Upload
others
View
2
Download
0
Embed Size (px)
Citation preview
Sundermeyer
MAR 550
Spring 2020 1
Laboratory in Oceanography:
Data and Methods
MAR550, Spring 2020
Miles A. Sundermeyer
Introduction to Matlab®
Programming Software
Sundermeyer
MAR 550
Spring 2020 2
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
• https://www.mathworks.com/help/matlab/
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 2020 3
Introduction to Matlab .m files / coding
% Laboratory in Oceanography - Data and Methods
% SMAST, UMass Dartmouth
%
% 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
% Last modified by Miles A. Sundermeyer, 1/24/20
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% set some flags / options
printflag = 0;
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% set the variables
time = [0 14 28 42 56 70]; % (?)
stage = [0.6120 0.6470 0.5800 0.6290 0.6880 0.5830]; % (m)
flow = [0.330 0.395 0.241 0.338 0.531 0.279]; % (m^3/s)
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% create a figure window, figure number 1
figure(1)
clf
plot(stage,flow,'b*')
xlabel('stage(m)')
ylabel('flow (m^3s)')
title('Stage vs. Discharge Rating Curve')
Sundermeyer
MAR 550
Spring 2020 4
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 white space purposefully. 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
• Avoid built-in Matlab function names
• length trades off with clarity of expression
• use descriptive names whenever possible for clarity, simple names for
things like ‘for’ loops. (avoid using i, j as index in 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 2020 5
Introduction to Matlab Getting Started
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 2020 6
Introduction to Matlab Getting Started - 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 2020 7
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)
Introduction to Matlab Getting Started - Expressions
Sundermeyer
MAR 550
Spring 2020 8
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
Introduction to Matlab Getting Started - Expressions
Sundermeyer
MAR 550
Spring 2020 9
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
9 6 7 12
4 15 14 1
Sum, transpose, and diag
> sum(A)
ans = 34 34 34 34
> A’
ans =
16 5 9 4
3 10 6 15
2 11 7 14
13 8 12 1
Introduction to Matlab Getting Started / Matrices and Arrays
(Note: may use space or comma for elements of
same row)
Sundermeyer
MAR 550
Spring 2020 10
> sum(A')’
ans =
34
34
34
34
> diag(A)
ans =
16
10
7
1
Introduction to Matlab Getting Started / Matrices and Arrays
> sum(diag(A))
ans =
34
> sum(diag(fliplr(A)))
ans =
34
Sum, transpose, and diag (cont’d)
Sundermeyer
MAR 550
Spring 2020 11
Introduction to Matlab Getting Started / Matrices and Arrays
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 2020 12
Introduction to Matlab Getting Started / Matrices and Arrays
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 1.5708 2.3562 3.1416
Sundermeyer
MAR 550
Spring 2020 13
Introduction to Matlab Getting Started / Matrices and Arrays
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)) % computes the sum of the fourth column.
ans =
34
or
> sum(A(:,end)) % keyword ‘end’ refers to last row or column
ans =
34
Sundermeyer
MAR 550
Spring 2020 14
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
• reshape - convert vector array to N-dimen array
• Anything +-*/ nan = nan
Sundermeyer
MAR 550
Spring 2020 15
Introduction to Matlab Getting Started / Matrices and Arrays
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.,
> Z = zeros(2,4)
Z =
0 0 0 0
0 0 0 0
> F = 5*ones(3,3)
F =
5 5 5
5 5 5
5 5 5
> N = fix(10*rand(1,10))
N =
9 2 6 4 8 7 4 0 8 4
> 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
Sundermeyer
MAR 550
Spring 2020 16
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 2020 17
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
Introduction to Matlab Getting Started / Matrices and Arrays – Working with Matrices
Sundermeyer
MAR 550
Spring 2020 18
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
Introduction to Matlab Getting Started / Matrices and Arrays – Working with Matrices
Sundermeyer
MAR 550
Spring 2020 19
• 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
Introduction to Matlab Getting Started / Matrices and Arrays – Working with Matrices
Sundermeyer
MAR 550
Spring 2020 20
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
Introduction to Matlab Getting Started / Matrices and Arrays – Working with Matrices
Sundermeyer
MAR 550
Spring 2020 21
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
Introduction to Matlab Getting Started / Matrices and Arrays – Working with Matrices
Sundermeyer
MAR 550
Spring 2020 22