Laboratory in Oceanography:
Data and Methods
Introduction to Matlab®
Programming Software
MAR550, Spring 2013
Miles A. Sundermeyer
Sundermeyer
MAR 550
Spring 2013
1
Introduction to Matlab
The name MATLAB stands for matrix laboratory
Fundamentally a programming language – does not need compiling, runs off
interactive command line or command scripts
Matlab Website:
• http://www.mathworks.com
• http://www.mathworks.com/access/helpdesk/help/techdoc/matlab.html
Starting and quitting Matlab …
• Windows: double click the Matlab icon
…
• Linux: run “matlab” on command line
• Type ‘exit’ to quit (works in either)
Sundermeyer
MAR 550
Spring 2013
2
Introduction to Matlab
.m files / coding
% Code for generating plot of example of system of equations - this case
% stage vs. flow rating curve, with observations at different times.
%
% Written by Miles A. Sundermeyer, 1/27/09
% set the variables
time = [0 14 28 42 56 70];
stage = [0.6120 0.6470 0.5800 0.6290 0.6880 0.5830];
flow = [0.330 0.395 0.241 0.338 0.531 0.279];
% create plot
plot(stage,flow,'b*')
xlabel('stage(m)')
ylabel('flow (m^3s)')
title('Stage vs. Discharge Rating Curve')
set(gca,'xlim',[0.56 0.7])
set(gca,'ylim',[0.2 0.6])
% fit line to data
% create X matrix for linear fit
X = [stage' ones(size(time'))];
B = X\discharge';
% left divide y = Xb by X to solve for B=[m b]'
% (need to transpose stage to column vector first)
% now B contains both the slope, m, and intercept, b
stagefit = [min(stage) max(stage)];
hold on
plot(stagefit,[stagefit' ones(size(stagefit'))]*B,'r-');
Sundermeyer
MAR 550
Spring 2013
3
Introduction to Matlab
.m files / coding
Best Programming Practices
• Use .m files for all your code for sake of documentation and repeatability
• Include header summarizing what code does, inputs and outputs, author,
and date written/modified.
• Use vertical and horizontal whitespace generously. Indentation and
spacing should reflect the block structure of the code.
• Comments should describe what is happening, how it is being done, what
parameters mean, which globals are used, and any restrictions or bugs.
Avoid unnecessary comments.
• Variable names
• length trades off with clarity of expression
• use descriptive names whenever possible for clarity, simple names for
things like ‘for’ loops.
• give units where appropriate (as comments, e.g., % (m/s))
• Function names should reflect what they do and what they return
Sundermeyer
MAR 550
Spring 2013
4
Introduction to Matlab
Getting Started / Introduction / Product Overview
Desktop Tools and Development Environment
• MATLAB desktop and Command Window
• editor & debugger, code analyzer, help browser, viewer for workspace & files
Mathematical Function Library
• Computational algorithms from basic (e.g., sum, sine, cosine, complex
arithmetic) to sophisticated functions (e.g., matrix inverse, matrix eigenvalues,
Bessel functions, FFTs).
The Language
• A high-level matrix/array language with control flow statements, functions,
data structures, input/output, and object-oriented programming features.
Graphics
• Extensive graphing / annotation: incl. 2-D, 3-D, image processing, animation
• Ability to build graphical user interfaces on MATLAB applications
External Interfaces
• Libraries for writing C and Fortran programs to interact with MATLAB
• Ability to call external routines from MATLAB and vice versa
Sundermeyer
MAR 550
Spring 2013
5
Introduction to Matlab
Getting Started / Matrices and Arrays / Expressions
Variables
• Declarations or dimension not required
• Variable names consist of a letter, followed by any number of letters, digits,
or underscores
• Case sensitive
• e.g.,
> num_students = 25
creates a 1-by-1 matrix named num_students and stores the value 25 in its
single element
Numbers
• Conventional decimal notation
• Scientific notation uses the letter ‘e’ to specify a power-of-ten scale factor
• Imaginary numbers use either i or j as a suffix (read more for rules on imag
numbers)
• e.g.,
3 -99 0.0001 9.6397238 1.60210e-20
6.02252e23 1i -3.14159j 3e5i
Sundermeyer
MAR 550
Spring 2013
6
Introduction to Matlab
Getting Started / Matrices and Arrays / Expressions
Operators (see also ‘help <any operator>’ for list – worth doing once to see)
+ Addition-Subtraction
* Multiplication
/ Division
\ Left division (described in Linear Algebra in MATLAB documentation)
^ Power
‘ Complex conjugate transpose
( ) Specify evaluation order
Functions
• standard elementary math functions (abs, sqrt, exp, sin)
• special functions for useful constants
pi
3.14159265...
i,j
Imaginary unit,
Inf Infinity (e.g., 1/0)
nan Not-a-number (e.g., 0/0, inf/inf, 0*inf)
Sundermeyer
MAR 550
Spring 2013
7
Introduction to Matlab
Getting Started / Matrices and Arrays / Expressions
Examples of Matlab Expressions
> rho = (1+sqrt(5))/2
rho = 1.6180
> a = abs(3+4i)
a=5
> z = sqrt(besselk(4/3,rho-i))
z = 0.3730+ 0.3214i
Sundermeyer
MAR 550
Spring 2013
8
Introduction to Matlab
Getting Started / Matrices and Arrays / Matrices and Magic Squares
Entering Matrices
> A = [16 3 2 13; 5 10 11 8; 9 6 7 12; 4 15 14 1]
A = 16 3 2 13
5 10 11 8
(Note: may use space or comma for elements of
9 6 7 12
same row)
4 15 14 1
Sum, transpose, and diag
> sum(A)
ans = 34 34 34 34
> A’
ans =
16 5
3 10
2 11
13 8
Sundermeyer
MAR 550
Spring 2013
9 4
6 15
7 14
12 1
9
Introduction to Matlab
Getting Started / Matrices and Arrays / Matrices and Magic Squares
Sum, transpose, and diag (cont’d)
> sum(A')’
ans =
34
34
34
34
> sum(diag(A))
ans =
34
> sum(diag(fliplr(A)))
ans =
34
> diag(A)
ans =
16
10
7
1
Sundermeyer
MAR 550
Spring 2013
10
Introduction to Matlab
Getting Started / Matrices and Arrays / Matrices and Magic Squares
Subscripts
• The element in row i and column j of A is denoted by A(i,j). For example,
A(4,2) is the number in the fourth row and second column.
•
It is also possible to refer to the elements of a matrix with a single subscript,
A(k).
•
If you try to use the value of an element outside of the matrix, it is an error:
> t = A(4,5)
??? Index exceeds matrix dimensions.
•
If you store a value in an element outside of the matrix, the size increases to
accommodate the newcomer:
> X = A;
> X(4,5) = 17
X=
16 3 2 13 0
5 10 11 8 0
9
6 7 12 0
4 15 14 1 17
Sundermeyer
MAR 550
Spring 2013
11
Introduction to Matlab
Getting Started / Matrices and Arrays / Matrices and Magic Squares
The Colon Operator
• One of most important Matlab operators - occurs in several different forms
> 1:10
ans =
1 2 3 4 5 6 7 8 9 10
•
To obtain non-unit spacing, specify an increment:
> 100:-7:50
ans =
100 93 86 79 72 65 58 51
> 0:pi/4:pi
ans =
0 0.7854
Sundermeyer
MAR 550
Spring 2013
1.5708
2.3562
3.1416
12
Introduction to Matlab
Getting Started / Matrices and Arrays / Matrices and Magic Squares
The Colon Operator (cont’d)
• Subscript expressions involving colons refer to portions of a matrix:
e.g., A(1:k,j) refers to the first k elements of the jth column of A.
> sum(A(1:4,4))
ans =
34
% computes the sum of the fourth column.
> sum(A(:,end))
ans =
34
% keyword ‘end’ refers to last row or column
or
Sundermeyer
MAR 550
Spring 2013
13
Introduction to Matlab
Useful Tidbits …
Useful Tidbits
•
‘who’ and ‘whos’
- returns variable names, types, sizes
•
<variable name>
- displays variable
•
help <function name / operator> - displays header of function
•
lookfor <topic>
- searches headers for keywords
•
up, down, left, right arrows
- to repeat/modify previous commands
•
semicolon after command
- suppresses output
•
Anything +-*/ nan = nan
Sundermeyer
MAR 550
Spring 2013
14
Introduction to Matlab
Getting Started / Matrices and Arrays / Working with Matrices
Functions that generate basic matrices
• zeros(n,m)
% [n x m] matrix of zeros
• ones(n,m)
% [n x m] matrix of ones
• rand(n,m)
% [n x m] matrix of uniformly distributed
random elements
• randn(n,m)
% [n x m] matrix of normally distributed
random elements
e.g.,
> N = fix(10*rand(1,10))
> Z = zeros(2,4)
N=
Z=
9264874084
0000
0000
> F = 5*ones(3,3)
F=
555
555
555
Sundermeyer
MAR 550
Spring 2013
> R = randn(4,4)
R=
0.6353 0.0860 -0.3210 -1.2316
-0.6014 -2.0046 1.2366 1.0556
0.5512 -0.4931 -0.6313 -0.1132
-1.0998 0.4620 -2.3252 0.3792
15
Introduction to Matlab
Getting Started / Matrices and Arrays / Working with Matrices
Concatenation
Joining smaller matrices to make bigger ones
e.g.,
> B = [A A+32; A+48 A+16]
B=
16 3 2 13 48 35 34 45
5 10 11 8 37 42 43 40
9 6 7 12 41 38 39 44
4 15 14 1 36 47 46 33
64 51 50 61 32 19 18 29
53 58 59 56 21 26 27 24
57 54 55 60 25 22 23 28
52 63 62 49 20 31 30 17
Sundermeyer
MAR 550
Spring 2013
16
Introduction to Matlab
Getting Started / Matrices and Arrays / More about Matrices and Arrays
Build a table of squares and powers of 2:
e.g.,
> n = (0:9)';
> pows = [n n.^2 2.^n]
pows =
0 0 1
1 1 2
2 4 4
3 9 8
4 16 16
5 25 32
6 36 64
7 49 128
8 64 256
9 81 512
Sundermeyer
MAR 550
Spring 2013
17
Introduction to Matlab
Getting Started / Matrices and Arrays / Working with Matrices
Deleting Rows and Columns
• Delete the second column of X, use
e.g.,
> A (:,2) = [ ]
A = 16 2 13
5 11 8
9 7 12
4 14 1
• Deleting a single element from a matrix
A(1,2) = [ ]
% results in an error
• Using a 1-d subscript deletes element(s) and reshapes remaining elements
into a row vector
e.g.,
> X=A
X(2:2:10) = [ ]
X = 16 9 2 7 13 12 1
Sundermeyer
MAR 550
Spring 2013
18
Introduction to Matlab
Getting Started / Matrices and Arrays / Working with Matrices
• Zero out a portion of B:
e.g.,
> B(1:2,2:3) = 0
B=
7.5
0
0
4.5
-3.5 0
0 -0.5
0.5 -2.5 -1.5 3.5
-4.5 6.5 5.5 -7.5
Sundermeyer
MAR 550
Spring 2013
19
Introduction to Matlab
Getting Started / Matrices and Arrays / More about Matrices and Arrays
Logical Subscripting
• Eliminate missing data
e.g.,
> x = [2.1 1.7 1.6 1.5 NaN 1.9 1.8 1.5 5.1 1.8 1.4 2.2 1.6 1.8];
> x = x(isfinite(x))
x = 2.1 1.7 1.6 1.5 1.9 1.8 1.5 5.1 1.8 1.4 2.2 1.6 1.8
e.g.,
> x = x(abs(x-mean(x)) <= 3*std(x))
x = 2.1 1.7 1.6 1.5 1.9 1.8 1.5 1.8 1.4 2.2 1.6 1.8
Sundermeyer
MAR 550
Spring 2013
20
Introduction to Matlab
Getting Started / Matrices and Arrays / More about Matrices and Arrays
The ‘find’ Function
e.g., find indices of the primes in A:
> k = find(isprime(A))'
k = 2 5 9 10 11 13
> A(k)
ans = 5 3 2 11 7 13
Note: lhs index in an assignment statement preserves matrix structure
e.g.,
> A(k) = NaN
A=
16
NaN NaN NaN
NaN 10
NaN 8
9
6
NaN 12
4
15
14
1
Sundermeyer
MAR 550
Spring 2013
21
© Copyright 2026 Paperzz