introduction to matlab part ii 1daniel baur / introduction to matlab part ii daniel baur / michael...

26
Introduction to Matlab Part II 1 Daniel Baur / Introduction to Matlab Part II Daniel Baur / Michael Sokolov ETH Zurich, Institut für Chemie- und Bioingenieurwissenschaften ETH Hönggerberg / HCI F128 / F123 – Zürich E-Mail: [email protected] [email protected] http://www.morbidelli-group.ethz.ch/education/snm/Matlab

Upload: helena-molly-porter

Post on 18-Jan-2016

226 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Introduction to Matlab Part II 1Daniel Baur / Introduction to Matlab Part II Daniel Baur / Michael Sokolov ETH Zurich, Institut für Chemie- und Bioingenieurwissenschaften

1Daniel Baur / Introduction to Matlab Part II

Introduction to Matlab

Part II

Daniel Baur / Michael Sokolov

ETH Zurich, Institut für Chemie- und Bioingenieurwissenschaften

ETH Hönggerberg / HCI F128 / F123 – Zürich

E-Mail: [email protected]

[email protected]

http://www.morbidelli-group.ethz.ch/education/snm/Matlab

Page 2: Introduction to Matlab Part II 1Daniel Baur / Introduction to Matlab Part II Daniel Baur / Michael Sokolov ETH Zurich, Institut für Chemie- und Bioingenieurwissenschaften

2Daniel Baur / Introduction to Matlab Part II

Review of vectors

Vector handling Row vector: a = [1 2 3];

a = [1, 2, 3]; Column vector: b = [1; 2; 3]; Vector with defined spacing: c = 0:5:100; (or 0:100) Vector with even spacing: d = linspace(0, 100, 21);

e = logspace(0, 3, 25);

Transpose: f = e';

Page 3: Introduction to Matlab Part II 1Daniel Baur / Introduction to Matlab Part II Daniel Baur / Michael Sokolov ETH Zurich, Institut für Chemie- und Bioingenieurwissenschaften

3Daniel Baur / Introduction to Matlab Part II

Review of matrices

Creating matrices Direct: A = [1 2 3; 4 5 6; 7 8 9]; Matrix of zeros: B = zeros(3,2); Matrix of ones: C = ones(3,2); Random matrix: R = rand(3,2); Normally distributed: RD = randn(2,3);

Matrix characteristics Size [nRows, nColumns] = size(A);

nColumns = size(A,2); Largest dimension maxDim = length(A); Number of elements nElements = numel(A);

Creating vectors Single argument calls create a square matrix, therefore use

commands like v = ones(3,1); to create vectors

Page 4: Introduction to Matlab Part II 1Daniel Baur / Introduction to Matlab Part II Daniel Baur / Michael Sokolov ETH Zurich, Institut für Chemie- und Bioingenieurwissenschaften

4Daniel Baur / Introduction to Matlab Part I

Review of accessing elements

Vectors (a = (1:5).^2;) Single element: a(3); Multiple elemets: a([1, 3]); Range of elements: a(2:4); Last element: a(end); All elements: a(:);

Matrices (A = a'*a;) Single element: A(1,3); Submatrix: A(2:3,2:3); Entire row / column A(2,:); A(:,3); Multiple rows / columns A([2, 3],[1, 3, 5]); Last element of row / column A(2,end); A(end,3); All elements as column vector b = A(:);

a(:) always returns a

column vector.

Page 5: Introduction to Matlab Part II 1Daniel Baur / Introduction to Matlab Part II Daniel Baur / Michael Sokolov ETH Zurich, Institut für Chemie- und Bioingenieurwissenschaften

5Daniel Baur / Introduction to Matlab Part II

Review of matrix operations

Create a Matrix A = rand(3);

Operations with constants B = 2*A C = 2+A

Matrix addition; Transpose D = A+C D = D'

Deleting rows / columns C(3,:) = []; D(:,2) = [];

Matrix multiplication C*D D*C Not commutative! A^2

Element-by-element operations A.^2 E = 2.^A; Ei,j = 2^Ai,j

sqrt(A)

Functions using matrices sqrtm(A) sqrtm(A)^2 inv(A)

Page 6: Introduction to Matlab Part II 1Daniel Baur / Introduction to Matlab Part II Daniel Baur / Michael Sokolov ETH Zurich, Institut für Chemie- und Bioingenieurwissenschaften

6Daniel Baur / Introduction to Matlab Part II

Review of matrix operations (continued)

Matrix properties sum(A,dim); det(A); inv(A); eigs(A);

More creation options and reshaping B = [ones(4); diag(1:4); eye(4)]; B = reshape(B, 24, 6); C = repmat(B, 1, 3);

Solution of linear algebraic systems A = rand(3); b = rand(3,1); x = A\b;

Do not use

x = inv(A)*b!

Page 7: Introduction to Matlab Part II 1Daniel Baur / Introduction to Matlab Part II Daniel Baur / Michael Sokolov ETH Zurich, Institut für Chemie- und Bioingenieurwissenschaften

7Daniel Baur / Introduction to Matlab Part II

M-Files

What is an m-file? An m-file is a collection of commands. It is equivalent to programs,

functions, subroutines, modules, etc. in other programming languages. It can even contain entire class definitions.

What can I use it for? Creating a permanent record of what you are doing Experimenting on an algorithm Writing utilities and whole programs

What types of m-files are there? Script m-file: No input and output. Operates on workspace variables. Function m-file: Starts with the function key-word, accepts inputs

and gives outputs. All variables are local. Class m-file: Contains the classdef key-word, used in object

oriented programming.

Page 8: Introduction to Matlab Part II 1Daniel Baur / Introduction to Matlab Part II Daniel Baur / Michael Sokolov ETH Zurich, Institut für Chemie- und Bioingenieurwissenschaften

8Daniel Baur / Introduction to Matlab Part II

Example of a Script

Problem definition v = 1e-17*ones(100,1); sum(v) v1 = [v;1]; sum(v1)-1 v2 = [1;v]; sum(v2)-1

Create the «mysum» script (In Matlab:) File New M-File clear all; close all; v = 1e-17*ones(100,1); v1 = [v;1]; s = sum(v1); s-1

(In Editor:) File Save As... mysum.m Check the directory path!

Avoid reserved words and

built-in function names

Page 9: Introduction to Matlab Part II 1Daniel Baur / Introduction to Matlab Part II Daniel Baur / Michael Sokolov ETH Zurich, Institut für Chemie- und Bioingenieurwissenschaften

9Daniel Baur / Introduction to Matlab Part II

You should see

How to run the script? From the command window (check the path!) From the editor (press Run button or use Debug Run or press F5)

Example of a Script (Continued)

The editor has found unusual syntax

or even a syntax error here!

Mouse-over to see what is the issue.

Page 10: Introduction to Matlab Part II 1Daniel Baur / Introduction to Matlab Part II Daniel Baur / Michael Sokolov ETH Zurich, Institut für Chemie- und Bioingenieurwissenschaften

10Daniel Baur / Introduction to Matlab Part I

Relational and logical operators

Relational operators are straight forward in Matlab: <, >, <=, >=, ==, ~=

The NOT operator is the tilde symbol «~» For the logical operators AND and OR, two kinds exist:

&&, || Operators with short-circuiting (scalars only) &, | Operators for element-by-element comparisons

Logical operators return logical types Example of how short-circuitung operators work:

In the context of if and while, both

kinds of operators short-circuit.

Page 11: Introduction to Matlab Part II 1Daniel Baur / Introduction to Matlab Part II Daniel Baur / Michael Sokolov ETH Zurich, Institut für Chemie- und Bioingenieurwissenschaften

11Daniel Baur / Introduction to Matlab Part I

Relational and logical operators (continued)

Example of element-by-element comparison:

Compare entire matrices with isequal(A,B)

All numbers other

than

0 evaluate to TRUE

Page 12: Introduction to Matlab Part II 1Daniel Baur / Introduction to Matlab Part II Daniel Baur / Michael Sokolov ETH Zurich, Institut für Chemie- und Bioingenieurwissenschaften

12Daniel Baur / Introduction to Matlab Part I

Relational and logical Operators (continued)

There are a some more operators that you can use: any(A,dim); True if at least one element is ≠ 0 all(A,dim); True if all elements are ≠ 0 xor(A,B); True if one is = 0 and the other is ≠ 0 isnumeric(A); True if A is a numerical type isfinite(A); True for each element if it is neither NaN nor

inf

Indexing is possible through logical variable types (try it!) A(A<0); All elements < 0 A(isfinite(A)); All elements except NaN and inf A(A == B); All elements that are equal to their

counterpart

You can even edit elements directlythis way

Page 13: Introduction to Matlab Part II 1Daniel Baur / Introduction to Matlab Part II Daniel Baur / Michael Sokolov ETH Zurich, Institut für Chemie- und Bioingenieurwissenschaften

13Daniel Baur / Introduction to Matlab Part II

For-loops in Matlab

General form of for-loops:

Example: If Matlab gets stuck in a loop (or

any other calculation), use

ctrl+c to terminate the program.

Page 14: Introduction to Matlab Part II 1Daniel Baur / Introduction to Matlab Part II Daniel Baur / Michael Sokolov ETH Zurich, Institut für Chemie- und Bioingenieurwissenschaften

14Daniel Baur / Introduction to Matlab Part II

Examples with for-loops

Try these:

Loops are almost always slower

than matrix / vector calculations!

Page 15: Introduction to Matlab Part II 1Daniel Baur / Introduction to Matlab Part II Daniel Baur / Michael Sokolov ETH Zurich, Institut für Chemie- und Bioingenieurwissenschaften

15Daniel Baur / Introduction to Matlab Part II

While-loops in Matlab

General form of while-loops: while expression

statements;end

The statements are executed as long as the expression is true (or ≠ 0)

The statements are executed an indefinite number of times

It is good practice to limit the number

of iterations (eg. while n < nmax)

Page 16: Introduction to Matlab Part II 1Daniel Baur / Introduction to Matlab Part II Daniel Baur / Michael Sokolov ETH Zurich, Institut für Chemie- und Bioingenieurwissenschaften

16Daniel Baur / Introduction to Matlab Part II

Examples of loops

Try the following:

Vectorize your operations

and use built-in functions.

If you must use a loop,

preallocate your variables.

Page 17: Introduction to Matlab Part II 1Daniel Baur / Introduction to Matlab Part II Daniel Baur / Michael Sokolov ETH Zurich, Institut für Chemie- und Bioingenieurwissenschaften

17Daniel Baur / Introduction to Matlab Part II

Exercise

1. Create the matrix A(5,5) with random elements between -2 and 2 (type help rand to figure out how the function works)

2. Set all negative elements of A to 1.5 (use logical indexing!)3. Create a matrix B consisting of the 2nd and 3rd column of A4. Create a matrix C consisting of the 1st and 4th row of A5. Calculate D = A∙B∙C. What is the size of D?6. Add D+A = E. Multiply the transpose of E with B to create F.7. Create the matrix G so that Gi,j = 2+2*Ci,j

2 / Fj,i

8. Create an equally spaced row vector b with 5 elements from 3 to 38

9. Find the solution of the linear system A∙x = b’10. Find the solution of y∙A = b11. Compute the 2-norm of x12. Find the vector v representing the 2-norm of each column of A13. Find the values of the series

20 10, i i is s s v

Page 18: Introduction to Matlab Part II 1Daniel Baur / Introduction to Matlab Part II Daniel Baur / Michael Sokolov ETH Zurich, Institut für Chemie- und Bioingenieurwissenschaften

18Daniel Baur / Introduction to Matlab Part II

Solutions (one Possibility)

Page 19: Introduction to Matlab Part II 1Daniel Baur / Introduction to Matlab Part II Daniel Baur / Michael Sokolov ETH Zurich, Institut für Chemie- und Bioingenieurwissenschaften

19Daniel Baur / Introduction to Matlab Part II

Controlling program flow

The if block has the following structure if expression

statements;elseif expression

statements;else

statements;end

Example

The elseif and else

clauses are optional.

Page 20: Introduction to Matlab Part II 1Daniel Baur / Introduction to Matlab Part II Daniel Baur / Michael Sokolov ETH Zurich, Institut für Chemie- und Bioingenieurwissenschaften

20Daniel Baur / Introduction to Matlab Part II

Controlling program flow (Continued)

The switch block does multiple comparisons at once switch variable

case expressionstatements;

case expressionstatements;

...otherwise

statements;end

ExampleMessage identifier

Error message

Page 21: Introduction to Matlab Part II 1Daniel Baur / Introduction to Matlab Part II Daniel Baur / Michael Sokolov ETH Zurich, Institut für Chemie- und Bioingenieurwissenschaften

21Daniel Baur / Introduction to Matlab Part II

Controlling program flow (Continued)

Other commands for controlling program flow are: break; Exits the current loop continue; Immediately goes to the next iteration return; Terminates the entire program / function

Page 22: Introduction to Matlab Part II 1Daniel Baur / Introduction to Matlab Part II Daniel Baur / Michael Sokolov ETH Zurich, Institut für Chemie- und Bioingenieurwissenschaften

22Daniel Baur / Introduction to Matlab Part II

Controlling program flow (Continued)

The try block checks for errors occuring during execution try

statements;catch err

statements;end

If an error occurs in the try block, the catch block is executed immediately instead of continuing

Example

Page 23: Introduction to Matlab Part II 1Daniel Baur / Introduction to Matlab Part II Daniel Baur / Michael Sokolov ETH Zurich, Institut für Chemie- und Bioingenieurwissenschaften

23Daniel Baur / Introduction to Matlab Part II

Data type «struct»

What is a struct? Structs are arrays with a property called «fields». Fields hold

different kinds of data and are accessed by dots. Structs are very useful for bundling different kinds of information.

Example (try it out!)comp(1).name = 'water';comp(1).Mw = 18.02;comp(1).density = 1;comp(2).name = 'ethanol';comp(2).Mw = 46.06;comp(2).density = 0.789;

Page 24: Introduction to Matlab Part II 1Daniel Baur / Introduction to Matlab Part II Daniel Baur / Michael Sokolov ETH Zurich, Institut für Chemie- und Bioingenieurwissenschaften

24Daniel Baur / Introduction to Matlab Part II

Data type «struct»

comp(1)

.name = 'water'

.MW = 18.02

.density = 1

.Antoine = [

8.07;

1730;

233];

comp(2)

.name =

'ethanol'.MW = 46.06

.density = 0.789

.Antoine = [

8.20;

1643;

230];

comp(3)

.name = ...

.MW = ...

.density = ...

.Antoine = ...

comp (1,n) struct

Page 25: Introduction to Matlab Part II 1Daniel Baur / Introduction to Matlab Part II Daniel Baur / Michael Sokolov ETH Zurich, Institut für Chemie- und Bioingenieurwissenschaften

25Daniel Baur / Introduction to Matlab Part II

Exercise

Create a new m-file called quadratic_roots.m Implement the following algorithm

If b > 0

Elseif b < 0

Else

2

2 12

4;

2

b b ac cx x

a ax

2

1 21

4;

2

b b ac cx x

a ax

1/2

1 2

cx x

a

Page 26: Introduction to Matlab Part II 1Daniel Baur / Introduction to Matlab Part II Daniel Baur / Michael Sokolov ETH Zurich, Institut für Chemie- und Bioingenieurwissenschaften

26Daniel Baur / Introduction to Matlab Part II

Possible Solution