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

Post on 18-Jan-2016

230 Views

Category:

Documents

0 Downloads

Preview:

Click to see full reader

TRANSCRIPT

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: daniel.baur@chem.ethz.ch

michael.sokolov@chem.ethz.ch

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

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

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

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.

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)

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!

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.

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

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.

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.

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

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

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.

14Daniel Baur / Introduction to Matlab Part II

Examples with for-loops

Try these:

Loops are almost always slower

than matrix / vector calculations!

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)

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.

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

18Daniel Baur / Introduction to Matlab Part II

Solutions (one Possibility)

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.

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

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

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

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;

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

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

26Daniel Baur / Introduction to Matlab Part II

Possible Solution

top related