What is MATLAB? • MATrix LABoratory • Developed by The Mathworks, Inc (http://www.mathworks.com( • Interactive, integrated, environment – for numerical computations – for symbolic computations – for scientific visualizations • It is a high-level programming language Characteristics of MATLAB • Programming language based (principally) on matrices . – Slow - an interpreted language ,i.e .not pre-compiled. Avoid for loops; instead use vector form whenever possible . – Automatic memory management, i.e., you don't have to declare arrays in advance . – Intuitive, easy to use . – Shorter program development time than traditional programming languages such as Fortran and C . – Can be converted into C code via MATLAB compiler for better efficiency . • Many application-specific toolboxes available . Start menu Matlab “>>” – שורת הפקודה << date MATLAB Getting Help << help date >> helpwin date helpwin gives you the same information as help, but in a different window. Getting Help << doc date << lookfor date % search for keywords that best describe the function >> Ctrl+C % stop Matlab from running >> clc % clear screen Special characters • >> % default command prompt • % % comment - MATLAB simply ignores anything to the right of this sign (till the end of the line). >> % my comment • ; % semicolon at the end of the line will prevent MATLAB from echoing the information you type on the screen. >> a=20 >> B=20; Creating Variables • • • • • Matlab as a calculator: >>2+5 >>7*10+8 >>5^2 ‘ans’ - "answer", used in MATLAB as the default variable. Defining Your Own Variables • When Matlab comes across a new variable name - it automatically creates it. • Begins with a LETTER, e.g., A2z. • Can be a mix of letters, digits, and underscores (e.g., vector_A, but not vector-A) • Not longer than 31 characters. • No spaces • Different mixes of capital and small letters = different variables. For example: "A_VaRIAbLe", "a_variable", "A_VARIABLE", and "A_variablE • >> String=‘this is a string’ Listing & Clearing Variables << a=10 << b = 20 << the_average = (a + b ) / 2 << whos << clear, clear all %clear variables from memory Creating vectors Row separator: space/coma (,) Creating sequences: • From : jump: till • linespec(X1, X2, N) generates N points between X1 and X2. Coulmn separator: Semicolon (;) Creating Matrices • Matrices must be rectangular. • Creating random matrices: 2-by-4 random matrix (2 rows and 4 columns). Creating Matrices • You can combine existing vectors as matrix elements: • You can combine existing matrices as matrix elements: Indexing Into a Matrix >> B=A(3,1); >> A(:,end)=[1;7;3;8;4]; • The row number is first, followed by the column number. Linear Algebra Operations Matrix Multiplication • Inner dimensions must be equal • Dimension of resulting matrix = outermost dimensions of multiplied matrices • Resulting elements = dot product of the rows of the 1st matrix with the columns of the 2nd matrix Vector Multiplication Type the following: >>a=[2 3] >>b=[3 2] >>a*b >>a.*b >>a.*b’ >>a*b’ String Arrays • Created using single quote delimiter (') • Indexing is the same as for numeric arrays String Array Concatenation Working with String Arrays Example: Solving Equations • Solve this set of simultaneous equations: Ax=B, x=? Creating Scripts with MATLAB Editor/Debugger • Automatically saves files as ASCII text files for you. • Scripts in MATLAB has the ".m" suffix. • They are also called "M-files". Open Matlab Editor: • File New • >> edit M-file OR: Run Add path • >> addpath • Set path C:\EMEM899\Somedirectory Script M-files • • • Standard ASCII text files Contain a series of MATLAB expressions A script does not define a new workspace % Comments start with "%" character pause % Suspend execution - hit any key to continue. keyboard % Pause & return control to command line. % Type "return" to continue. break return % Terminate execution of current loop/file. % % Continue % Input % Exit current function Return to invoking function/command line. go to next iteration Prompt for user input A Simple Script Write a program which receives a number from the user, calculates it’s square root (use ‘sqrt’ command) and displays the result. save the script as "square_root_script.m" in your own folder % a simple MATLAB m-file to calculate the % square root of an input numbers. my_num=input('insert a number'); % now calculate the square root of the number and print it out: square_root = sqrt(my_num) Running Scripts • >> square_root_script • The header - comments you place at the beginning of your scripts will be returned to users when they get help for your script. • >> help square_root_script • Note: The variables defined in the script remain in the workspace even after the script finishes running. • Creating comments: ctrl+r, or right click on the mouse, or %{ coment coment %} Running Scripts (2) • Find and Replace – ctrl+F • Key words • Wrong use of key words • Indenting: Ctrl+I Flow Control Constructs • • Logic Control: – – IF / ELSEIF / ELSE SWITCH / CASE / OTHERWISE Iterative Loops: – – FOR WHILE The if, elseif and else statements • • Works on Conditional statements Logic condition is ‘true’ if its different then 0. if I == J A(I,J) = 2; else if abs(I-J) == 1 A(I,J) = -1; else A(I,J) = 0; end %else if end %if • if I == J A(I,J) = 2; elseif abs(I-J) == 1 A(I,J) = -1; else A(I,J) = 0; end ELSEIF does not need a matching END, while ELSE IF does. Boolean Operators & Indexing Switch, Case, and Otherwise • • More efficient than elseif statements Only the first matching case is executed switch input_num case -1 input_str = 'minus one'; case 0 input_str = 'zero'; case 1 input_str = 'plus one'; case {-10,10} input_str = '+/- ten'; otherwise input_str = 'other value'; end Problem • Build a program which receives a variable x and its units (mm, cm, inch, meter) and calculates Y- it’s value in centimeters units. • Use switch case. • 1 Inch = 2.54 cm • Write a comment for error case. • Save the file under units.m Solution x = 3.0; units = 'mm'; switch units case {'in','inch'} y = 2.54*x % converts to centimeters case {'m','meter'} y = x*100 % converts to centimeters case { 'millimeter','mm'} y = x/10; disp ([num2str(x) ' in ' units ' converted to cm is :' num2str(y)]) case {'cm','centimeter'} y = x otherwise disp (['unknown units:' units]) y = nan; end The for loop • • • • Similar to other programming languages Repeats loop a set number of times (based on index) Can be nested Each loop is closed with end. N=10; for I = 1:2:N for J = 1:N A(I,J) = 1/(I+J-1); end end The while loop • • • • Similar to other programming languages Repeats loop until logical condition returns FALSE. Can be nested. Stopping infinity loop: I=1; N=10; Ctrl+C while I<=N Ctrl+break J=1; while J<=N A(I,J)=1/(I+J-1); J=J+1; end I=I+1; end Array Operations Line Plots in Two Dimensions • Plot (x,y) • makes a two-dimensional line plot for each point in X and its corresponding point in Y: (X(1),Y(1)), (X(2),Y(2)), (X(3),Y(3)), etc., and then connect all these points together with line. • Example: • >> x=1:1:5; • >>Y=[2 7 0 -8 6]; • >> plot (x,y); • >> xlabel (‘label for x-axis’) • >> ylabel (‘label for y-axis’) • >> title (‘title’) Multiple Plots Check the following: x_points = [-10 : .05 : 10]; plot(x_points, exp(x_points)); % plot in Blue (default) grid on hold on plot(x_points, exp(.95 .* x_points), 'm'); % plot in Magenta plot(x_points, exp(.85 .* x_points), 'g'); % plot in Green plot(x_points, exp(.75 .* x_points), 'p'); % plot a star hold off xlabel('x-axis'); ylabel('y-axis'); title('Comparing Exponential Functions'); legend ('1', '2', '3', '4') 2.5 x 10 4 Comparing Exponential Functions 1 2 3 4 2 1.5 y-axis • • • • • • • • • • • • 1 0.5 0 -10 -5 0 5 10 Subplots • multiple plots in the same window, each with their own axes. • Subplot (M,N,P) • M – rows • N - columns • P – number of subplot in the figure Subplot (2,2,1) More about figures • • • • Figure % Open a new figure without closing old figures Figure (i) % Open the i-th figure Close all % close all open figures axis ([xmin xmax ymin ymax]) % sets scaling for the xand y-axes on the current plot. Special Graph Annotations (TeX) Plot Editor Toolbar Exercise Create the following: Merav's graph 2 sin(x) log(x) 1.5 y 1 0.5 0 -0.5 -1 • • • • • 1 1.5 2 2.5 3 x 3.5 4 x = (1, 1.05, 1.1, 1.15… 5) Y=sin(x) Z=log(x) Put your name in the title Hint: check the doc on function “LineSpec”. 4.5 5 Solution • • • • • • • • • • • x=1:0.05:5; y=sin(x); z=log(x); hold on plot (x,y,'-.r*') plot (x,z,'-.go') hold off title ('Merav''s graph'); xlabel ('x') ylabel ('y') legend ('sin(x)', 'log(x)'); More exercise • Make a 3 three-dimensional graph of (x,y,z) – use Matlab help. • Make two separate 2-D graphs, with separate axis, in the same window: y vs. x, and z vs. x. • Use the same x,y,z as defined in the previous exercise 3D graph sin(x) log(x) 1 1.8 0.8 1.6 0.6 2 1.4 1.5 0.4 1.2 0 z 1 1 z y=sin(x) 0.2 0.8 0.5 -0.2 0.6 -0.4 0 1 0.4 -0.6 0.5 0.2 -0.8 5 4 0 3 -0.5 -1 1 2 3 x 4 5 0 1 2 3 x 4 5 y 2 -1 1 x Solution • • • • • • • 3-D graph: >> plot3(x,y,z) >> grid >> xlabel ('x') >> ylabel('y') >> zlabel('z') >> title ('3D graph') • Subplots >> subplot (1,2,1); >> plot(x,y); >> title ('sin(x)'); >> xlabel('x'); >> ylabel('y=sin(x)'); >> grid; >> subplot (1,2,2); >> plot(x,z); >> xlabel('x'); >> title ('log(x)'); >> grid; >> ylabel ('z');