MATLAB Programming I Joy Outline • • • • • • • Examples What is Matlab? History Characteristics Organization of Matlab – Toolboxes Basic Applications Programming Example I • Obtain the result of matrix multiply 4 9 8 6 3 15 7 7 • Matlab Code >>A=[4,6; 9,15; 8,7]; >>B=[3,24,5; 7,19,2]; >>C=A*B C= 54 210 32 132 501 75 73 325 54 24 19 5 2 C Code #include <cstdlib> #include <iostream> #include <fstream> #include <sstream> #include <iomanip> #include <vector> using namespace std; typedef vector<vector<int> > Mat; void input(istream& in, Mat& a); Mat matrix_product(const Mat& a, const Mat& b); void print(const Mat& a); C Codes int main(int argc, char *argv[]) { ifstream in1 ( "Matrix A.txt" ); ifstream in2 ( "Matrix B.txt" ); int row, row1, col, col1; in1>>row>>col; in2>>row1>>col1; Mat a(row, vector<int>(col)); input(in1, a); Mat b(row1, vector<int>(col1)); input(in2, b); print(matrix_product(a,b)); system("PAUSE"); return EXIT_SUCCESS; } C Code Cond. void input(istream& in, Mat& a) { for(int i = 0; i < a.size(); ++i) for(int j = 0; j < a[0].size(); ++j) in>>a[i][j]; } void print(const Mat& a) { for(int i = 0; i < a.size(); ++i) { cout<<endl; for(int j = 0; j < a[0].size(); ++j) cout<<setw(5)<<a[i][j]; } cout<<endl; } C Code Cond. Mat matrix_product(const Mat& a, const Mat& b) { Mat c(a.size(), vector<int>(b[0].size())); for(int i = 0; i < c.size(); ++i) for(int j = 0; j < c[0].size(); ++j) { c[i][j] = 0; for(int k = 0; k < b.size() ; ++k) c[i][j] = c[i][j] + a[i][k] * b[k][j]; } return c; } Example II • Calculate the transpose of the matrix: 3 17 2 5 19 7 6 4 54 • Matlab Code >>A=[3,17,2;5,19,7;6,4,54] >>A^(-1) ans = -0.9327 0.8505 -0.0757 0.2131 -0.1402 0.0103 0.0879 -0.0841 0.0262 What is MATLAB? • Abbreviation of MATrix LABoratory • Is a high-performance language for technical computing • It integrates computation, visualization, and programming in an easy-to-use environment where problems and solutions are expressed in familiar mathematical notation. Usage of MATLAB • • • • • • • Math and computation Algorithm development Data acquisition Modeling, simulation, and prototyping Data analysis, exploration, and visualization Scientific and engineering graphics Application development including graphical user interface building History • In 1970s – Dr.Cleve Moler Based on Fortran on EISPACK and LINPACK Only solve basic matrix calculation and graphic • 1984 – MathWorks Company by Cleve Moler and Jack Little Matlab 1.0 based on C Included image manipulations, multimedia etc. toolboxes • In 1990 – run on Windows Simulink, Notebook, Symbol Operation, etc. • 21 Century Main Features • Powerful tool for matrix calculations Basic data type is double complex matrix with subscript is 1 High efficient/reliable algorithms • Multi-paradigm - interactive environment (no compiler) - programming • Most input/output parameters in Matlab functions are variable • User friendly with extensively help system MATLAB SYSTEM MATLAB Simulink Applications Develop Tools Stateflow Toolboxes Module Libraries DATA Data-Accessing Tools Generating-Codes Tools Third parties modules C Buildup of MATLAB • Development Environment MATLAB desktop and Command Window, a command history, an editor and debugger, and browsers for viewing help, the workspace, files, and the search path. • The MATLAB Mathematical Function Library A vast collection of computational algorithms ranging from elementary functions to more sophisticated functions • The MATLAB Language A high-level matrix/array language with control flow statements, functions, data structures, input/output, and object-oriented programming features • Graphics Display vectors and matrices as graphs two-dimensional and three-dimensional data visualization image processing animation and presentation graphics • The MATLAB Application Program Interface (API) Interchange the C/Fortran codes with Matlab codes Basic Applications I • Matrices and Arrays Generating Arrays/Matrices Elementary Matrices: sum, transpose, diagonal, subscripts Variables: does not require any type declarations or dimension statements Operators: +,-,*,/, ^, etc. Examples of Expressions Generating Matrices • Directly enter A = [16 3 2 13; 5 10 11 8; 9 6 7 12; 4 15 14 1] • Use Functions zeros All 0’s ones All 1’s rand Uniformly distributed random elements randn Normally distributed random elements Example: B = zeros(1,5) – row vector/array C = ones(7,1) –column vector/array D = rand(5,8,3) – multiple dimension matrix • Load/Import from files Elementary Matrices >>D=rand(3,2,3) D(:,:,1) = D(:,:,2) = 0.9501 0.4860 0.4565 0.4447 0.2311 0.8913 0.0185 0.6154 0.6068 0.7621 0.8214 0.7919 >> sum(D(:,1,1)) ans = 1.7881 >> E=D(:,:,2)' E= 0.4565 0.0185 0.8214 0.4447 0.6154 0.7919 >> a=diag(D(:,:,3)) a= 0.9218 0.9355 >> F=[D(1,:,1),D(2,:,3); D(1,:,1)+1, D(2,:,3)-1] F= 0.9501 0.4860 0.7382 0.9355 1.9501 1.4860 -0.2618 -0.0645 >>F(:,2)=[] F= 0.9501 0.7382 0.9355 1.9501 -0.2618 -0.0645 >> F(2:1:4)=[] F= 0.9501 0.9355 -0.0645 D(:,:,3) = 0.9218 0.4057 0.7382 0.9355 0.1763 0.9169 Examples of Expression >>rho = (1+sqrt(5))/2 rho = 1.6180 >>a = abs(3+4i) a= 5 >>huge = exp(log(realmax)) huge = 1.7977e+308 =1.8X10308 Basic Application II • Graphic Programming • Flow Control Selector: if, switch & case Loop: for, while, continue, break, try & catch Other: return • Other Data Structures Multidimensional arrays, Cell arrays, Structures, etc. • Scripts and Functions Flow Control Examples I • Selector: 2-way: if rand < 0.3 flag = 0; else flag = 1; end Multiple-ways: %Condition %then_expression_1 %then_expression_2 %endif if A > B 'greater‘ elseif A < B 'less‘ elseif A == B 'equal‘ else error('Unexpected situation') end | switch (grade) | case 0 | ‘Excellent’ | case 1 | ‘Good’ | case 2 | ‘Average’ | otherwise | ‘Failed’ | end Flow Control Examples II • Loop >>Generate a matrix for i = 1:2 for j = 1:6 H(i,j) = 1/(i+j); end end >>H H= 0.5000 0.3333 0.3333 0.2500 0.2500 0.2000 0.2000 0.1667 0.1667 0.1429 0.1429 0.1250 • Loop Cond. >>%Obtain the result is a root of the polynomial x3 - 2x – 5 a = 0; fa = -Inf; b = 3; fb = Inf; while b-a > eps*b x = (a+b)/2; fx = x^3-2*x-5; if sign(fx) == sign(fa) a = x; fa = fx; else b = x; fb = fx; end end >>x x= 2.09455148154233 Scripts • MATLAB simply executes the commands found in the file • Example % Investigate the rank of magic squares r = zeros(1,32); %generation a row array 1X 32 % “;” tell the system does not display % the result on the screen for n = 3:32 r(n) = rank(magic(n)); end r bar(r) %display r in bar figure Scripts Cond. • Note: No input/output parameters (Different from functions! ) Write the script in editor, which can be activated by command “edit” in command window, save it with its specific name Next time you want to execute the script just call the name in the command window Functions • Functions are M-files that can accept input arguments and return output arguments. The names of the M-file and of the function should be the same. Function Example I • Background of AIC AIC is used to compare the quality of nested models AIC requires a bias-adjustment in small sample sizes AIC 2 ln(likelihood ) 2 K AICad 2 ln(likelihood ) 2 K deltai AICi min( AIC ) wi exp( 0.5 deltai ) R exp(0.5 delta r 1 r ) 2 K ( K 1) n K 1 Function Head (Comments) %AICad Function %Date:Dec.29th, 2008 %Purpose: Calculate the adjusted % Akaike’s Information Criteria (AIC) %InPut: AIC % n (the sample size) % K (the number of parameters in the model) %OutPut: AICad % delta % weight %Functions Called: None %Called by: None IN Command Window >>AIC=[-123; -241.7; -92.4; -256.9]; >>n=12; >>K=[4;8;2;6]; >>[AICad, delta, w] = CalAIC(AIC, n, K) AICad = delta = w= -83.0000 -97.7000 -80.4000 -172.9000 89.9000 75.2000 92.5000 0 0.0000 0.0000 0.0000 1.0000 M file function[AICad,delta,w]=CalAIC(AIC,n,K) AICad = AIC+2.*K.*(K+1); a = min(AICad); delta = AICad - a; b = exp(-0.5.*delta); c = sum(b); w = b./c; Function Example II • Background of PCA Comparing more than two communities or samples Sample 1 2 3 4 5 Post Oak 66 48 26 15 11 Red Oak 25 30 55 20 50 Water Oak 24 31 42 49 58 Ycombine wpost x post wred xred wwater xwater Background of PCA Cond. • Principal Components Analysis (PCA) • It finds weighted sums of samples or observations (linear combinations) that are highly correlated with the values of the response variables (e.g., species’ abundances) PCA objectively “chooses” these weights in such a way as to maximize the variance in the weighted sums Based on correlations between response variables . Function Head %Principle Component Analysis Function %Date:Dec.29th, 2008 %Purpose: Obtain the axis scores of PCA %InPut: the abundance of 3 species % in 5 different samples %OutPut: sample scores of PCA axis %Functions Called: None %Called by: None IN Command Window >>a=[66;48;26;15;11]; >>b=[25;30;55;20;50]; >>c=[24;31;42;49;58]; >>[score1, score2]=PCA(a,b,c) score1 = score2 = -2.2233 -0.1963 -1.1519 -0.0743 0.8734 -1.0888 0.4871 1.5120 2.0147 -0.1526 M file function[x11,x12,x13,x21,x22,x23]=PCA(a,b,c) %Calculate the mean and population standard deviation of 3 species for i=1:5 d(i)=(a(i)-mean(a))^2; stda=sqrt(sum(d)/5); e(i)=(b(i)-mean(b))^2; stdb=sqrt(sum(e)/5); f(i)=(c(i)-mean(c))^2; stdc=sqrt(sum(f)/5); end %Obtain the z-scores of 3 species for i=1:5 za(i)=(a(i)-mean(a))/stda; zb(i)=(b(i)-mean(b))/stdb; zc(i)=(c(i)-mean(c))/stdc; end N=[za',zb',zc']; M file Cond. %Obtain the original correlation matrix M=[1,corr(a,b),corr(a,c);corr(a,b),1,corr(b,c);corr(a,c),corr(b,c),1]; [V1,D1]= eig(M); %Calculate the eigenvector and eigenvalues weight1=V1(:,3); %Get the maximum eigenvector score1=N*weight1; %We use the exact same procedure that we used for axis 1, %except that we use a partial correlation matrix %The partial correlation matrix is made up of all pairwise correlations %among the 3 species, independent of their correlation with the axis 1 %sample scores. Hence, axis 2 sample scores will be uncorrelated %with (or orthogonal to) axis 1 scores. M file Cond. new=[a,b,c,score1]; M2=[1,corr(a,b),corr(a,c),corr(a,score1);… corr(a,b),1,corr(b,c),corr(b,score1);… corr(a,c), corr(b, c), 1, corr(c,score1);… corr(a,score1),corr(b,score1),corr(c,score1),1]; for i=1:3 for j=1:3 corrnew(i,j)=M2(i,j); end end g=[M2(4,1)*M2(4,1),M2(4,1)*M2(4,2),M2(4,1)*M2(4,3);… M2(4,2)*M2(4,1),M2(4,2)*M2(4,2),M2(4,2)*M2(4,3);… M2(4,3)*M2(4,1),M2(4,3)*M2(4,2),M2(4,3)*M2(4,3)]; corrmatrix=corrnew-g; [V2,D2]=eig(corrmatrix); weight2=V2(:,3); %signs needs to be checked with JMP score2=N*weight2; MATLAB in MCSR • Matlab is available on willow and sweetgum • www.mcsr.olemiss.edu • assist@mcsr.olemiss.edu • Enter matlab can activate Matlab in willow or sweetgum • Use ver to obtain the version of Matlab, which can tell you which toolboxes of Matlab in that machine • Price of personal purchase is 500$ include update releases (only include MATLAB & Simulink) You need pay separate fee for each toolbox such as statistical, bioinformatics, etc Take Home Message