Introduction to Matlab Part II 1Daniel Baur / Introduction to Matlab Part II Daniel Baur / Michael...
-
Upload
helena-molly-porter -
Category
Documents
-
view
230 -
download
0
Transcript of Introduction to Matlab Part II 1Daniel Baur / Introduction to Matlab Part II Daniel Baur / Michael...
![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.](https://reader035.fdocuments.net/reader035/viewer/2022062305/5697bfbe1a28abf838ca2d52/html5/thumbnails/1.jpg)
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
![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.](https://reader035.fdocuments.net/reader035/viewer/2022062305/5697bfbe1a28abf838ca2d52/html5/thumbnails/2.jpg)
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.](https://reader035.fdocuments.net/reader035/viewer/2022062305/5697bfbe1a28abf838ca2d52/html5/thumbnails/3.jpg)
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.](https://reader035.fdocuments.net/reader035/viewer/2022062305/5697bfbe1a28abf838ca2d52/html5/thumbnails/4.jpg)
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.](https://reader035.fdocuments.net/reader035/viewer/2022062305/5697bfbe1a28abf838ca2d52/html5/thumbnails/5.jpg)
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.](https://reader035.fdocuments.net/reader035/viewer/2022062305/5697bfbe1a28abf838ca2d52/html5/thumbnails/6.jpg)
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.](https://reader035.fdocuments.net/reader035/viewer/2022062305/5697bfbe1a28abf838ca2d52/html5/thumbnails/7.jpg)
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.](https://reader035.fdocuments.net/reader035/viewer/2022062305/5697bfbe1a28abf838ca2d52/html5/thumbnails/8.jpg)
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.](https://reader035.fdocuments.net/reader035/viewer/2022062305/5697bfbe1a28abf838ca2d52/html5/thumbnails/9.jpg)
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.](https://reader035.fdocuments.net/reader035/viewer/2022062305/5697bfbe1a28abf838ca2d52/html5/thumbnails/10.jpg)
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.](https://reader035.fdocuments.net/reader035/viewer/2022062305/5697bfbe1a28abf838ca2d52/html5/thumbnails/11.jpg)
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.](https://reader035.fdocuments.net/reader035/viewer/2022062305/5697bfbe1a28abf838ca2d52/html5/thumbnails/12.jpg)
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.](https://reader035.fdocuments.net/reader035/viewer/2022062305/5697bfbe1a28abf838ca2d52/html5/thumbnails/13.jpg)
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.](https://reader035.fdocuments.net/reader035/viewer/2022062305/5697bfbe1a28abf838ca2d52/html5/thumbnails/14.jpg)
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.](https://reader035.fdocuments.net/reader035/viewer/2022062305/5697bfbe1a28abf838ca2d52/html5/thumbnails/15.jpg)
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.](https://reader035.fdocuments.net/reader035/viewer/2022062305/5697bfbe1a28abf838ca2d52/html5/thumbnails/16.jpg)
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.](https://reader035.fdocuments.net/reader035/viewer/2022062305/5697bfbe1a28abf838ca2d52/html5/thumbnails/17.jpg)
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.](https://reader035.fdocuments.net/reader035/viewer/2022062305/5697bfbe1a28abf838ca2d52/html5/thumbnails/18.jpg)
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.](https://reader035.fdocuments.net/reader035/viewer/2022062305/5697bfbe1a28abf838ca2d52/html5/thumbnails/19.jpg)
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.](https://reader035.fdocuments.net/reader035/viewer/2022062305/5697bfbe1a28abf838ca2d52/html5/thumbnails/20.jpg)
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.](https://reader035.fdocuments.net/reader035/viewer/2022062305/5697bfbe1a28abf838ca2d52/html5/thumbnails/21.jpg)
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.](https://reader035.fdocuments.net/reader035/viewer/2022062305/5697bfbe1a28abf838ca2d52/html5/thumbnails/22.jpg)
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.](https://reader035.fdocuments.net/reader035/viewer/2022062305/5697bfbe1a28abf838ca2d52/html5/thumbnails/23.jpg)
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.](https://reader035.fdocuments.net/reader035/viewer/2022062305/5697bfbe1a28abf838ca2d52/html5/thumbnails/24.jpg)
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.](https://reader035.fdocuments.net/reader035/viewer/2022062305/5697bfbe1a28abf838ca2d52/html5/thumbnails/25.jpg)
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.](https://reader035.fdocuments.net/reader035/viewer/2022062305/5697bfbe1a28abf838ca2d52/html5/thumbnails/26.jpg)
26Daniel Baur / Introduction to Matlab Part II
Possible Solution