Introduction to Matlab Part II 1Daniel 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
Review of vectors Vector handling a = [1 2 3]; a = [1, 2, 3]; Row vector: a = [1 2 3]; a = [1, 2, 3]; b = [1; 2; 3]; Column vector: b = [1; 2; 3]; c = 0:5:100; (or 0:100) Vector with defined spacing: c = 0:5:100; (or 0:100) d = linspace(0, 100, 21); e = logspace(0, 3, 25); Vector with even spacing: d = linspace(0, 100, 21); e = logspace(0, 3, 25); f = e'; Transpose: f = e'; 2Daniel Baur / Introduction to Matlab Part II
Review of matrices Creating matrices A = [1 2 3; 4 5 6; 7 8 9]; Direct: A = [1 2 3; 4 5 6; 7 8 9]; B = zeros(3,2); Matrix of zeros: B = zeros(3,2); C = ones(3,2); Matrix of ones: C = ones(3,2); R = rand(3,2); Random matrix: R = rand(3,2); RD = randn(2,3); Normally distributed: RD = randn(2,3); Matrix characteristics [nRows, nColumns] = size(A); nColumns = size(A,2); Size [nRows, nColumns] = size(A); nColumns = size(A,2); maxDim = length(A); Largest dimension maxDim = length(A); nElements = numel(A); Number of elements nElements = numel(A); Creating vectors v = ones(3,1); Single argument calls create a square matrix, therefore use commands like v = ones(3,1); to create vectors 3Daniel Baur / Introduction to Matlab Part II
Review of accessing elements a = (1:5).^2; Vectors ( a = (1:5).^2; ) a(3); Single element: a(3); a([1, 3]); Multiple elemets: a([1, 3]); a(2:4); Range of elements: a(2:4); a(end); Last element: a(end); a(:); All elements: a(:); A = a'*a; Matrices ( A = a'*a; ) A(1,3); Single element: A(1,3); A(2:3,2:3); Submatrix: A(2:3,2:3); A(2,:);A(:,3); Entire row / column A(2,:);A(:,3); A([2, 3],[1, 3, 5]); Multiple rows / columns A([2, 3],[1, 3, 5]); A(2,end);A(end,3); Last element of row / column A(2,end);A(end,3); b = A(:); All elements as column vector b = A(:); 4Daniel Baur / Introduction to Matlab Part I a(:) always returns a column vector.
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 D*C Not commutative! A^2 Element-by-element operations A.^2 E = 2.^A; E = 2.^A; E i,j = 2^A i,j sqrt(A) Functions using matrices sqrtm(A) sqrtm(A)^2 inv(A) 5Daniel 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; 6Daniel Baur / Introduction to Matlab Part II Do not use x = inv(A)*b!
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 Function m-file: Starts with the function key-word, accepts inputs and gives outputs. All variables are local. classdef Class m-file: Contains the classdef key-word, used in object oriented programming. 7Daniel 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! 8Daniel Baur / Introduction to Matlab Part II Avoid reserved words and built-in function names
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) 9Daniel Baur / Introduction to Matlab Part II The editor has found unusual syntax or even a syntax error here! Mouse-over to see what is the issue. The editor has found unusual syntax or even a syntax error here! Mouse-over to see what is the issue.
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: 10Daniel Baur / Introduction to Matlab Part I In the context of if and while, both kinds of operators short-circuit.
Relational and logical operators (continued) Example of element-by-element comparison: isequal(A,B) Compare entire matrices with isequal(A,B) 11Daniel Baur / Introduction to Matlab Part I All numbers other than 0 evaluate to TRUE
Relational and logical Operators (continued) There are a some more operators that you can use: any(A,dim); any(A,dim); True if at least one element is ≠ 0 all(A,dim); all(A,dim); True if all elements are ≠ 0 xor(A,B); xor(A,B); True if one is = 0 and the other is ≠ 0 isnumeric(A); isnumeric(A); True if A is a numerical type isfinite(A); 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); A(A<0); All elements < 0 A(isfinite(A)); A(isfinite(A)); All elements except NaN and inf A(A == B); A(A == B); All elements that are equal to their counterpart You can even edit elements directly this way 12Daniel Baur / Introduction to Matlab Part I
For-loops in Matlab General form of for-loops: Example: 13Daniel Baur / Introduction to Matlab Part II If Matlab gets stuck in a loop (or any other calculation), use ctrl+c to terminate the program.
Examples with for-loops Try these: 14Daniel Baur / Introduction to Matlab Part II Loops are almost always slower than matrix / vector calculations!
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 15Daniel Baur / Introduction to Matlab Part II It is good practice to limit the number of iterations (eg. while n < nmax)
Examples of loops Try the following: 16Daniel Baur / Introduction to Matlab Part II Vectorize your operations and use built-in functions. If you must use a loop, preallocate your variables.
Exercise help rand 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 2 nd and 3 rd column of A 4.Create a matrix C consisting of the 1 st and 4 th row of A 5.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 G i,j = 2+2*C i,j 2 / F j,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 = b 11.Compute the 2-norm of x 12.Find the vector v representing the 2-norm of each column of A 13.Find the values of the series 17Daniel Baur / Introduction to Matlab Part II
Solutions (one Possibility) 18Daniel 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 19Daniel Baur / Introduction to Matlab Part II The elseif and else clauses are optional.
Controlling program flow (Continued) The switch block does multiple comparisons at once switch variable case expression statements; case expression statements;... otherwise statements; end Example 20Daniel Baur / Introduction to Matlab Part II Message identifier Error message
Controlling program flow (Continued) Other commands for controlling program flow are: break; break; Exits the current loop continue; continue; Immediately goes to the next iteration return; return; Terminates the entire program / function 21Daniel 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 22Daniel 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; 23Daniel Baur / Introduction to Matlab Part II
Data type «struct» 24Daniel Baur / Introduction to Matlab Part II comp(1).name = 'water'.MW = density= 1.Antoine= [8.07; 1730; 233]; comp(2).name = 'ethanol'.MW = density= Antoine= [8.20; 1643; 230]; comp(3).name =....MW =....density=....Antoine=... comp(1,n)struct
Exercise Create a new m-file called quadratic_roots.m Implement the following algorithm If b > 0 Elseif b < 0 Else 25Daniel Baur / Introduction to Matlab Part II
Possible Solution 26Daniel Baur / Introduction to Matlab Part II