270 likes | 321 Views
Learn about vectors, matrices, accessing elements, matrix operations, M-files, scripts, relational and logical operators in MATLAB. Understand creation, manipulation, and properties of these key data structures in MATLAB. Enhance your MATLAB skills with practical examples and exercises.
E N D
Introduction to Matlab Part II Tommaso Marcato/ Michael SokolovETH Zurich, Institut für Chemie- und BioingenieurwissenschaftenETH Hönggerberg / HCI E120 / F137 – ZürichE-Mail: tommaso.marcato@chem.ethz.chmichael.sokolov@chem.ethz.chhttps://shihlab.ethz.ch/education/Snm/matlab-introduction Tommaso Marcato / 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'; Tommaso Marcato / 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 Tommaso Marcato / Introduction to Matlab Part II
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. Tommaso Marcato / 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) Tommaso Marcato / 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 usex = inv(A)*b! Tommaso Marcato / 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 functionkey-word, accepts inputs and gives outputs. All variables are local. • Class m-file: Contains the classdefkey-word, used in object oriented programming. Tommaso Marcato / 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 Tommaso Marcato / Introduction to Matlab Part II
Example of a Script (Continued) • 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) The editor has found unusual syntax or even a syntax error here! Mouse-over to see what is the issue. Tommaso Marcato / Introduction to Matlab Part II
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. Tommaso Marcato / Introduction to Matlab Part II
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 Tommaso Marcato / Introduction to Matlab Part II
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 Tommaso Marcato / 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. Tommaso Marcato / Introduction to Matlab Part II
Examples with for-loops • Try these: • Loops are almost always slower than matrix / vector calculations! Tommaso Marcato / 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) Tommaso Marcato / Introduction to Matlab Part II
Examples of loops • Try the following: • If you must use a loop, preallocate your variables. • Vectorize your operationsand use built-in functions. Tommaso Marcato / Introduction to Matlab Part II
Exercise • Create the matrix A(5,5) with random elements between -2 and 2 (type help rand to figure out how the function works) • Set all negative elements of A to 1.5 (use logical indexing!) • Create a matrix B consisting of the 2nd and 3rd column of A • Create a matrix C consisting of the 1st and 4th row of A • Calculate D = A∙B∙C. What is the size of D? • Add D+A = E. Multiply the transpose of E with B to create F. • Create the matrix G so that Gi,j = 2+2*Ci,j2 / Fj,i • Create an equally spaced row vector b with 5 elements from 3 to 38 • Find the solution of the linear system A∙x = b’ • Find the solution of y∙A = b • Compute the 2-norm of x • Find the vector v representing the 2-norm of each column of A • Find the values of the series Tommaso Marcato / Introduction to Matlab Part II
Solutions (one Possibility) Tommaso Marcato / 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. Tommaso Marcato / Introduction to Matlab Part II
Controlling program flow (Continued) • The switch block does multiple comparisons at once • switch variablecase expression statements;case expression statements; ...otherwise statements;end • Example Message identifier Error message Tommaso Marcato / 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 Tommaso Marcato / 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 Tommaso Marcato / 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; Tommaso Marcato / Introduction to Matlab Part II
Data type «struct» comp(1) comp(3) comp(2) .name= ... .name= 'ethanol' .name= 'water' .MW = ... .MW = 46.06 .MW = 18.02 .density = 0.789 .density = ... .density = 1 .Antoine = [ 8.07; 1730; 233]; .Antoine = ... .Antoine = [ 8.20; 1643; 230]; comp (1,n) struct Tommaso Marcato / 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 Tommaso Marcato / Introduction to Matlab Part II
Possible Solution Tommaso Marcato / Introduction to Matlab Part II