22
Sundermeyer MAR 550 Spring 2020 1 Laboratory in Oceanography: Data and Methods MAR550, Spring 2020 Miles A. Sundermeyer Introduction to Matlab ® Programming Software

Laboratory in Oceanography: Data and Methods Introduction

  • Upload
    others

  • View
    2

  • Download
    0

Embed Size (px)

Citation preview

Page 1: Laboratory in Oceanography: Data and Methods Introduction

Sundermeyer

MAR 550

Spring 2020 1

Laboratory in Oceanography:

Data and Methods

MAR550, Spring 2020

Miles A. Sundermeyer

Introduction to Matlab®

Programming Software

Page 2: Laboratory in Oceanography: Data and Methods Introduction

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)

Page 3: Laboratory in Oceanography: Data and Methods Introduction

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')

Page 4: Laboratory in Oceanography: Data and Methods Introduction

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

Page 5: Laboratory in Oceanography: Data and Methods Introduction

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

Page 6: Laboratory in Oceanography: Data and Methods Introduction

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

Page 7: Laboratory in Oceanography: Data and Methods Introduction

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

Page 8: Laboratory in Oceanography: Data and Methods Introduction

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

Page 9: Laboratory in Oceanography: Data and Methods Introduction

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)

Page 10: Laboratory in Oceanography: Data and Methods Introduction

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)

Page 11: Laboratory in Oceanography: Data and Methods Introduction

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

Page 12: Laboratory in Oceanography: Data and Methods Introduction

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

Page 13: Laboratory in Oceanography: Data and Methods Introduction

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

Page 14: Laboratory in Oceanography: Data and Methods Introduction

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

Page 15: Laboratory in Oceanography: Data and Methods Introduction

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

Page 16: Laboratory in Oceanography: Data and Methods Introduction

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

Page 17: Laboratory in Oceanography: Data and Methods Introduction

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

Page 18: Laboratory in Oceanography: Data and Methods Introduction

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

Page 19: Laboratory in Oceanography: Data and Methods Introduction

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

Page 20: Laboratory in Oceanography: Data and Methods Introduction

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

Page 21: Laboratory in Oceanography: Data and Methods Introduction

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

Page 22: Laboratory in Oceanography: Data and Methods Introduction

Sundermeyer

MAR 550

Spring 2020 22