introduction to matlab part ii 1daniel baur / introduction to matlab part ii daniel baur / michael...
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: [email protected]
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