851-0585-04L – Modeling and Simulating Social Systems with MATLAB 19.06.2018 851-0585-04L – Modeling and Simulating Social Systems with MATLAB Lecture 1 – Introduction to MATLAB Karsten Donnay and Stefano Balietti Chair of Sociology, in particular of Modeling and Simulation © ETH Zürich |
19.06.2018 MATLAB Why MATLAB? Language is quick to learn, easy to use, rich in functionality, good plotting abilities. MATLAB is commercial software from The MathWorks, but there are free MATLAB clones with limited functionality (octave and Scilab). MATLAB can be downloaded from ides.ethz.ch
19.06.2018 MATLAB environment LIVE DEMO here!!
What is MATLAB? MATLAB derives its name from matrix laboratory 19.06.2018 What is MATLAB? MATLAB derives its name from matrix laboratory Interpreted language No compilation like in C++ or Java The results of the commands are immediately displayed Allows for object oriented programming (but has poor performance then...)
Overview - What is MATLAB? 19.06.2018 Overview - What is MATLAB? MATLAB derives its name from matrix laboratory Scalars Vectors Matrices x11
Overview - What is MATLAB? 19.06.2018 Overview - What is MATLAB? MATLAB derives its name from matrix laboratory Scalars Vectors Matrices x11 x12 x13 x11 x12 x13
Overview - What is MATLAB? 19.06.2018 Overview - What is MATLAB? MATLAB derives its name from matrix laboratory Scalars Vectors Matrices x11 x12 x13 x21 x22 x23
Overview - What is MATLAB? 19.06.2018 Overview - What is MATLAB? MATLAB derives its name from matrix laboratory Scalars Vectors Matrices Multi-dimensional x111 x121 x131 x211 x221 x231
Pocket calculator MATLAB can be used as a pocket calculator: 19.06.2018 Pocket calculator MATLAB can be used as a pocket calculator: >> 1+2+3 ans= 6 >> (1+2)/3 1
Variables and operators 19.06.2018 Variables and operators Variable assignment is made with ‘=’ Variable names are case sensitive: Num, num, NUM are all different to MATLAB >> num=10 num = 10 The semicolon ‘;’ cancels the validation display >> B=5; >> C=10*B C = 50
Variables and operators 19.06.2018 Variables and operators Basic operators: + - * / : addition subtraction multiplication division ^ : Exponentiation sqrt() : Square root % comment >> a=2; % First term >> b=5; % Second term >> c=9; % Third term >> R=a*(sqrt(c) + b^2); >> R R = 56
Data structures: Vectors 19.06.2018 Data structures: Vectors Vectors are used to store a set of scalars Vectors are defined by using square bracket [ ] >> x=[0 2 4 10] x = 0 2 4 10
Data structures: Defining vectors 19.06.2018 Data structures: Defining vectors Vectors can be used to generate a regular list of scalars by means of colon ‘:’ n1:k:n2 generate a vector of values going from n1 to n2 with step k >> x=0:2:6 x = 0 2 4 6 The default value of k is 1 >> x=2:5 x = 2 3 4 5
Data structures: Accessing vectors 19.06.2018 Data structures: Accessing vectors Access to the values contained in a vector x(i) return the ith element of vector x >> x=1:0.5:3; >> x(2) ans = 1.5 x(i) is a scalar and can be assigned a new value >> x=1:5; >> x(3)=10; >> x x = 1 2 10 4 5
Data structures: Size of vectors 19.06.2018 Data structures: Size of vectors Vectors operations The command length(x) return the size of the vector x >> x=1:0.5:3; >> s=length(x) s = 5 x(i) return an error if i>length(x) >> x=1:0.5:3; >> x(6) ??? Index exceeds matrix dimensions.
Data structures: Increase size of vectors 19.06.2018 Data structures: Increase size of vectors Vectors operations Vector sizes can be dynamically increased by assigning a new value, outside the vector: >> x=1:5; >> x(6)=10; >> x x = 1 2 3 4 5 10
Data structures: Increase size of vectors 19.06.2018 Data structures: Increase size of vectors Vectors operations Vector sizes can be dynamically increased by assigning a new value, outside the vector: >> x=1:5; >> x(6)=10; >> x x = 1 2 3 4 5 10 Important: the first element of a vector has index 1
Data structures: Sub-vectors 19.06.2018 Data structures: Sub-vectors Vectors operations Subvectors can be addressed by using a colon x(i:j) return the sub vector of x starting from the ith element to the jth one >> x=1:0.2:2; >> y=x(2:4); >> y y = 1.2 1.4 1.6
Data structures: Matrices 19.06.2018 Data structures: Matrices Matrices are two dimensional vectors Can be defined by using semicolon into square brackets [ ] >> x=[0 2 4 ; 1 3 5 ; 8 8 8] x = 0 2 4 1 3 5 8 8 8 >> x=[1:4 ; 5:8 ; 1:2:7] 1 2 3 4 5 6 7 8 1 3 5 7
Data structures: Matrices 19.06.2018 Data structures: Matrices Accessing the elements of a matrix x(i,j) return the value located at ith line and jth column i and j can be replaced by a colon ‘:’ to access the entire line or column >> x=[0 2 4 ; 1 3 5 ; 8 8 8] x = 0 2 4 1 3 5 8 8 8 >> y=x(2,3) y = 5
Data structures: Matrices 19.06.2018 Data structures: Matrices Access to the values contained in a matrix x(i,j) return the value located at ith line and jth column i and j can be replaced by a colon ‘:’ to access the entire line or column >> x=[0 2 4 ; 1 3 5 ; 8 8 8] x = 0 2 4 1 3 5 8 8 8 >> y=x(2,:) y =
Data structures: Matrices 19.06.2018 Data structures: Matrices Access to the values contained in a matrix x(i,j) return the value located at ith line and jth column i and j can be replaced by a colon ‘:’ to access the entire line or column >> x=[0 2 4 ; 1 3 5 ; 8 8 8] x = 0 2 4 1 3 5 8 8 8 >> y=x(:,3) y = 4 5 8
Matrices operations: Transpose 19.06.2018 Matrices operations: Transpose Transpose matrix Switches lines and columns transpose(x) or simply x’ >> x=[1:3 ; 4:6] x = 1 2 3 4 5 6 >> transpose(x) 1 4 2 5 3 6 >> x’
Matrices operations Inter-matrices operations 19.06.2018 Matrices operations Inter-matrices operations C=A+B : returns C with C(i,j) = A(i,j)+B(i,j) C=A-B : returns C with C(i,j) = A(i,j)-B(i,j) A and B must have the same size, unless one of them is a scalar >> A=[1 2;3 4] ; B=[2 2;1 1]; >> C=A+B C = 3 4 4 5 >> C=A-B -1 0 2 3
Matrices operations: Multiplication 19.06.2018 Matrices operations: Multiplication Inter-matrices operations C=A*B is a matrix product. Returns C with C(i,j) = ∑ (k=1 to N) A(i,k)*B(k,j) N is the number of columns of A which must equal the number of rows of B Each element of the new matrix is given by the sum of th
Element-wise multiplication 19.06.2018 Element-wise multiplication Inter-matrices operations C=A.*B returns C with C(i,j) = A(i,j)*B(i,j) A and B must have the same size, unless one of them is a scalar >> A=[2 2 2;4 4 4]; >> B=[2 2 2;1 1 1]; >> C=A.*B C = 4 4 4
Element-wise division 19.06.2018 Element-wise division Inter-matrices operations C=A./B returns C with C(i,j) = A(i,j)/B(i,j) A and B must have the same size, unless one of them is a scalar >> A=[2 2 2;4 4 4]; >> B=[2 2 2;1 1 1]; >> C=A./B C = 1 1 1 4 4 4
Matrices operations: Division Inter-matrices operations x=A\b returns the solution of the linear equation A*x=b A is a n-by-n matrix and b is a column vector of size n >> A=[3 2 -1; 2 -2 4; -1 0.5 -1]; >> b=[1;-2;0]; >> x=A\b x = 1 -2
Matrices operations: Division Inter-matrices operations x=A\b returns the solution of the linear equation A*x=b A is a n-by-n matrix and b is a column vector of size n >> A=[3 2 -1; 2 -2 4; -1 0.5 -1]; >> b=[1;-2;0]; >> x=A\b x = 1 -2 Attention! / (slash) and \ (back slash) produce different results
19.06.2018 Matrices: Creating Matrices can also created by these commands: rand(n, m) a matrix of size n x m, containing random numbers [0,1] zeros(n, m), ones(n, m) a matrix containing 0 or 1 for all elements
Matrices Dimensions size() returns info about a matrix’s dimensions. 19.06.2018 Matrices Dimensions size() returns info about a matrix’s dimensions. >> A = zeros(3,4); >> size(A) ans = 3 4 >> size(A,1) 3 >> size(A,2) 4
19.06.2018 The for loop Vectors are often processed with loops in order to access and process each value, one after the other: Syntax : for i=x …. end With i the name of the running variable x a vector containing the sequence of values assigned to i
19.06.2018 The for loop MATLAB waits for the keyword end before computing the result. >> for i=1:3 i^2 end i = 1 4 9
19.06.2018 The for loop MATLAB waits for the keyword end before computing the result. >> for i=1:3 y(i)=i^2; end >> y y = 1 4 9
Conditional statements: if 19.06.2018 Conditional statements: if The keyword if is used to test a condition Syntax : if (condition) ..sequence of commands.. end The condition is a Boolean operation The sequence of commands is executed if the tested condition is true
Logical operators Logical operators 19.06.2018 Logical operators Logical operators < , > : less than, greater than == : equal to && : and || : or ~ : not ( ~true is false) (1 stands for true, 0 stands for false)
Conditional statements: Example 19.06.2018 Conditional statements: Example An example: >> threshold=5; >> x=4.5; >> if (x<threshold) diff = threshold - x; end >> diff diff = 0.5
Conditional statements: else 19.06.2018 Conditional statements: else The keyword else is optional Syntax : if (condition) ..sequence of commands n°1.. else ..sequence of commands n°2.. end >> if (x<threshold) diff = threshold - x ; else diff = x – threshold; end
Scripts and functions External files used to store and save sequences of commands. Scripts: Simple sequence of commands Global variables Functions: Dedicated to a particular task Inputs and outputs Local variables
Scripts and functions Should be saved as .m files : From the Directory Window
Scripts and functions Scripts : Create .m file, e.g. sumVector.m. Type commands in the file. Type the file name, .e.g sumVector, in the command window. %sum of 4 values in x x=[1 3 5 7]; R=x(1)+x(2)+x(3)+x(4); R sumVector.m >> sumVector R = 16
Scripts and functions Make sure that the file is in your working directory!
Scripts and functions Functions : Create .m file, e.g. absoluteVal.m Declare inputs and outputs in the first line of the file, function [out1, out2, …] = functionName (in1, in2, …) e.g. function [R] = absoluteVal(x) Use the function in the command window functionName(in1, in2, …) e.g. absoluteVal(x)
Scripts and functions >> A=absoluteVal(-5); >> A A = 5 absoluteVal.m function [R] = absoluteVal(x) % Compute the absolute value of x if (x<0) R = -x ; else R = x ; end >> A=absoluteVal(-5); >> A A = 5
Scripts and functions >> A=absoluteVal(-5); >> A A = 5 absoluteVal.m function [R] = absoluteVal(x) % Compute the absolute value of x if (x<0) R = -x ; else R = x ; end >> A=absoluteVal(-5); >> A A = 5
Exercise 1 Compute: a) b) c) 19.06.2018 Exercise 1 Compute: a) b) c) Slides/exercises: www.soms.ethz.ch/matlab (use Firefox!)
19.06.2018 Exercise 2 Solve for x:
Exercise 3 Fibonacci sequence: write a function which computes the Fibonacci sequence of a given number n and returns the result in a vector. The Fibonacci sequence F(n) is given by :
References http://www.mathworks.ch/products/matlab/index. html https://ides.ethz.ch/