Chapter 2 MATLAB Fundamentals MATLAB Matrix Laboratory Problem-Solving Methodology State the problem clearly Describe the Input/Output (I/O) Work the problem by hand Algorithm - Numerical Method Develop a MATLAB Solution Debugging and Testing Documentation Why MATLAB? Industry standard software application Wealth of built-in functions and libraries Toolboxes (add-on software modules) – image and signal processing, control systems design, fuzzy logic, etc. Has own structured programming language Ease of application and testing (pre- and postprocessing without lots of programming and formatting) Platform independent MATLAB MATLAB is a numerical analysis system Can write “programs”, but they are not formally compiled Should still use structured programming Should still use comments Comments are indicated by “%” at the beginning of the line Program Documentation Comments!!! You must include comments in the computer programs you turn in -otherwise we will have great difficulty knowing what you are doing For example, here is some cryptic code without comment for j=0:2 k=(2-j)*(1+3*j)/2 end What does it do? Put a comment in % turns (0,1,2) into (1,2,0) MATLAB Windows Command Window -- enter commands and data -- print results Graphics Window -- display plots and graphs Edit Window -- create and modify m-files Managing MATLAB Environment who or whos -- See the current runtime environment clear -- remove all variables from memory clc -- clear the command window clf -- clear the graphics window save -- save the workspace environment load -- restore workspace from a disk file abort -- CTRL-C help -- help “command” Really good “help” command MATLAB Syntax No complicated rules Perhaps the most important thing to remember is semicolons (;) at the end of a line to suppress output Type “more on” to keep text from leaving screen too fast diary “filename” saves a text record of session diary off turns it off MATLAB MATLAB’s basic component is a Vector or Matrix Even single value variables (Scalars) All operations are optimized for vector use Loops run slower in MATLAB than in Fortran (not a vector operation) “size” command gives size of the matrix Scalars, Vectors, Matrices MATLAB treat variables as “matrices” Matrix (m n) - a set of numbers arranged in rows (m) and columns (n) Scalar: 1 1 matrix Row Vector: 1 n matrix Column Vector: m 1 matrix A 5.27 B 5.02 2.3 7.21 5.02 C B' 2.3 7.21 1 3 2 5 D 2 4 3.2 9.5 0.5 1 7.2 2 >> pi ans = 3.1416 >> size(pi) ans = 1 1 pi 3.1416 >> a=[1 2 3; 4 5 6] a= 1 2 3 4 5 6 >> size(a) ans = 2 3 1 2 3 a 4 5 6 a= Complex variables MATLAB handles complex arithmetic automatically No need to compute real and imaginary parts separately The unit imaginary number i = 1 is preassigned » x=5+2*i x = 5.0000 + 2.0000i » y=5*x+3 y = 28.0000 +10.0000i MATLAB Example » x=3+5-0.2 x = 7.8000 » y=3*x^2+5 y = 187.5200 » z=x*sqrt(y) z = 106.8116 » A=[1 2 3; 4 5 6] A = 1 2 3 4 5 6 » b=[3;2;5] b = 3 2 5 » C=A*b C = 22 52 » who Your variables are: A C b x » whos Name A C b x y z y z Size 2x3 2x1 3x1 1x1 1x1 1x1 Bytes 48 16 24 8 8 8 Class double double double double double double array array array array array array » save Saving to: matlab.mat default filename » save matrix1 filename “matrix1” Data types All numbers are double precision Text is stored as arrays of characters You don’t have to declare the type of data (defined when running) MATLAB is case-sensitive!!! Variable Names Usually, the name is identified with the problem Variable names may consist of up to 31 characters Variable names may be alphabetic, digits, and the underscore character ( _ ) Variable names must start with a letter ABC, A1, C56, CVEN_302 day, year, iteration, max time, velocity, distance, area, density, pressure Time, TIME, time (case sensitive!!) Initializing Variables Explicitly list the values reads from a data file uses the colon (:) operator reads from the keyboard A = [1; 3; 5; 10]; C = [2 3 5 1; 0 1 … B = [1 3 5; -6 4 -1] (continuation) 1 -2; 3 5 1 -3] E = [A; 1; A]; F = [C(2,3); A] Matrix Concatenation x 1 2 3 ; z x y 7 9 4 y 1 2 3 7 9 4 u x ; y 1 2 3 7 9 4 v x y ; y x 1 2 3 7 9 4 7 9 4 1 2 3 Colon Operator Creating new matrices from an existing matrix C = [1,2,5; -1,0,1; 3,2,-1; 0,1,4] F = C(:, 2:3) = [2,5; 0,1; 2,-1; 1,4] 1 1 C 3 0 5 0 1 2 1 1 4 2 5 2 0 1 F 2 1 4 1 Colon Operator Creating new matrices from an existing matrix C = [1,2,5; -1,0,1; 3,2,-1; 0,1,4] E = C(2:3,:) = [-1 0 1; 3 2 -1] 1 1 C 3 0 5 0 1 2 1 1 4 2 1 1 0 E 3 2 1 Colon Operator Creating new matrices from an existing matrix C = [1,2,5; -1,0,1; 3,2,-1; 0,1,4] G = C(3:4,1:2) = [3,2; 0,1] 1 1 C 3 0 5 0 1 2 1 1 4 2 3 2 G 0 1 Colon Operator Variable_name = a:step:b time = 0.0:0.5:2.5 time = [0.0, 0.5, 1.0, 1.5, 2.0, 2.5] Negative increment values = 10:-1:2 values = [10, 9, 8, 7, 6, 5, 4, 3, 2] linspace Function linspace(x1, x2) gives 100 evenly spaced values between x1 and x2 x = linspace(x1,x2) linspace(a,b,n) generate n equally spaced points between a and b x = linspace(a,b,n) » linspace(0,2,11) ans = Columns 1 through 7 0 0.2000 0.4000 0.6000 1.8000 2.0000 Columns 8 through 11 1.4000 1.6000 0.8000 1.0000 1.2000 logspace Function logspace(a,b,n) generates a logarithmically equally spaced row vector x = logspace(a,b,n) logspace(a,b) generates 50 logarithmically equally spaced points x = logspace(a,b) » logspace(-4,2,7) ans = 0.0001 0.0010 0.0100 0.1000 1.0000 10.0000 100.0000 Special Matrices 1 0 0 eye( 3) 0 1 0 0 0 1 0 0 zeros(3,2) 0 0 0 0 1 1 1 ones( 3) 1 1 1 1 1 1 1 1 1 1 ones(2,4) 1 1 1 1 Scalar Arithmetic Operations In order of priority Symbol Operation MATLAB Form ^ Exponentia tion a b a^ b Negation a a Multiplica tion and division ab; a b b (Matrix inverse) Left division a \ b a Addition and subtractio n a b a * b; a / b * / \ Example: x = (a + b*c)/d^2 count = count + 1 a\b a b; a b Order of Precedence of Arithmetic Operations 1. Parentheses, starting with the innermost pair 2. Exponentiation, from left to right 3. Multiplication and division with equal precedence, from left to right 4. Addition and subtraction with equal precedence, from left to right Examples: factor = 1 + b/v + c/v^2 slope = (y2 - y1)/(x2 - x1) loss = f * length/dia * (1/2 * rho * v^2) func = 1 + 0.5*(3*x^4 + (x + 2/x)^2) Order of Precedence of Arithmetic Operations The priority order can be overridden with parentheses » a=3; b=5; c=2; » y = -7.3^2 » s1 = a-b*c y = s1 = -7 » s2=(a-b)*c s2 = -53.2900 » y=(-7.3)^2 y = 53.2900 -4 Multiplication has higher priority than subtraction Exponentiation has higher priority than negation Array Operations An array operation is performed element-by-element C(1) A(1) * B(1); C(2) A(2) * B(2); C(3) A(3) * B(3); C(4) A(4) * B(4); C(5) A(5) * B(5); MATLAB: C = A.*B; Element-by-Element Operations Symbol Operation Scalar - array addition Form Ab Scalar - array subtractio n Array addition A b [8 , 3 ] 6 [ 2 , 3 ] A B [ 4 , 6 ] [8, 3] [12, 9] .* ./ .\ .^ Array Array Array Array Array A B A.*B A./B A.\B A.^ B subtractio n multiplica tion right division left division exponentia tion Example [ 4 , 6 ] 3 [7 , 9] [ 4 , 6 ] [8 , 3 ] [ 4 , 3 ] [ 3, 6 ]. * [ 2, 3] [6 , 18] [ 3, 7 ]. /[ 8, 5 ] [ 3 / 8 , 7 / 5 ] [0.375 ,1.400 ] [ 3, 7 ]. \ [8, 5 ] [ 3 \ 8, 7 \ 5 ] [ 2.667 ,0.7143] [ 4 , 2].^ 3 [ 4^3, 2^3] [64 , 8] 3.^ [ 2, 5 ] [ 3^2, 3^5 ] [9, 243] [5 , 3].^ [ 2, 4 ] [5^2, 3^4 ] [ 25 , 81] Vector and Matrix operations 1 2 3 a 3 b 4 a b 7 5 6 11 But a*b gives an error (undefined) because dimensions are incorrect. Need to use .* 1* 2 2 a .* b 3 * 4 12 5 * 6 30 Vectorized Matrix Operations A 2 3 8 1 B 1 4 5 2 C A .* B 2 12 40 2 D A . / B 2 0.75 1.6 0.5 E A .^ 3 8 27 512 1 F ( 3 ).^ B 3 81 243 9 Array Operations for m n Matrices 2 3 4 1 A 1 : 4; - 1 : -1 : -4; 3 1 2 - 1 1 2 3 4 3 1 2 1 10 15 20 5 B A.* 5 5 10 15 20 15 5 10 5 8 27 64 1 C A.^ 3 1 8 27 64 27 1 8 1 Matrix Transpose x 4 2 3 ; 4 x' 2 3 y 3 1 2 3 ; y' 1 - 2 4 8 4 12 x'* y 2 3 1 2 6 2 4 3 9 3 6 3 x * y' 4 2 3 1 ( 4 )( 3 ) ( 2 )( 1 ) 3( 2 ) 4 - 2 Built-in Functions All the standard operators +, , *, /, ^ Sqrt( ), abs( ), sin( ), cos( ), exp( ), tanh( ), acos( ), log( ), log10( ), etc. These operators are vectorized 3 a 5 ; 4 sin(3) exp(3) sin( a ) sin(5) ; exp(a) exp(5) sin(4) exp(4) Built-in Functions Certain functions, such as exponential and square root, have matrix definition also Use “help expm” and “help sqrtm” for details >> A = [1 3 5; 2 4 6; -3 2 -1] A = 1 3 5 2 4 6 -3 2 -1 >> B = sqrt(A) (element by element) B = 1.0000 1.7321 2.2361 1.4142 2.0000 2.4495 0 + 1.7321i 1.4142 0 >> C = sqrtm(A) (C*C = A) C = 2.1045 + 0.0000i 0.1536 - 0.0000i 1.8023 1.7141 - 0.0000i 1.1473 + 0.0000i 1.7446 -2.0484 + 0.0000i 1.3874 + 0.0000i 0.5210 + 1.0000i + 0.0000i + 0.0000i - 0.0000i MATLAB Graphics One of the best things about MATLAB is interactive graphics “plot” is the one you will be using most often Many other 3D plotting functions -- plot3, mesh, surfc, etc. Use “help plot” for plotting options To get a new figure, use “figure” logarithmic plots available using semilogx, semilogy and loglog Plotting Commands plot(x,y) defaults to a blue line plot(x,y,’ro’) uses red circles plot(x,y,’m*’) uses magenta asterisks If you want to put two plots on the same graph, use “hold on” plot(a,b,’r:’) hold on plot(a,c,’ko’) (red dotted line) (black circles) Free-Falling Bungee Jumper Use built-in functions sqrt & tanh >> g = 9.81; m = 75.2; cd = 0.24; >> t = 0:1:20 t = Columns 1 through 15 0 1 2 3 4 5 18 19 20 6 7 8 9 10 11 12 13 14 Columns 16 through 21 15 16 17 >> v=sqrt(g*m/cd)*tanh(sqrt(g*cd/m)*t) v = Columns 1 through 9 0 9.7089 18.8400 26.9454 33.7794 39.2956 43.5937 46.8514 49.2692 53.2262 53.8772 54.3389 54.6653 54.8956 55.0579 55.1720 Columns 10 through 18 51.0358 52.3119 Columns 19 through 21 55.2523 55.3087 55.3484 Plot the velocity versus time curve >> >> >> >> plot(t,v); grid on title('Free Falling Bungee Jumper') xlabel('time t (second)'); ylabel('velocity v (m/s)') print –djpeg bungee.jpg How to change line thickness, line color, font size, symbols, marker size, etc.? Color, Symbols, and Line Types Use “help plot” to find available Specifiers Colors Symbols Line Types b blue . point - solid g green o circle : dotted r red x x-mark -. dashdot c cyan + plus -- dashed m magenta * star y yellow s square k black d diamond v triangle (down) ^ triangle (up) < triangle (left) > triangle (right) p pentagram h hexagram » » » » » » » x=0:0.1:5; y=2*x.^3-12*x.^2+8*x-6; H=plot(x,y,'b',x,y,'r*'); set(H,'LineWidth',3,'MarkerSize',12) xlabel('x'); ylabel('y'); title('f(x)=2x^3-12x^2+8x-6'); print -djpeg075 poly.jpg Adjust line thickness, font size, marker size, etc. element-by-element operations x.^n » » » » » » » x=0:0.1:10; y=sin(2.*pi*x)+cos(pi*x); H1=plot(x,y,'m'); set(H1,'LineWidth',3); hold on; H2=plot(x,y,'bO'); set(H2,'LineWidth',3,'MarkerSize',10); hold off; xlabel('x'); ylabel('y'); title('y = sin(2\pix)+cos(\pix)'); print -djpeg075 function.jpg » » » » » » x=0:0.1:3; y1=exp(-x); y2=sqrt(x); H=plot(x,y1,'b-',x,y2,'r--'); set(H,'LineWidth',3) xlabel('x'); ylabel('y'); title('MATLAB Plots'); H1=text(1.8,0.2,'exp(-x)'); set(H1,'FontSize',18); H2=text(1.8,1.3,'sqrt(x)'); set(H2,'FontSize',18); Plotting Commands plot (x, y) plot(x1, y1, x2, y2) plot (x, y, ‘color symbol line style’) » x = linspace(0, 2*pi); » y = sin (2.*x); » z = cos (0.5*x); » plot (x, y) » plot (x, y, x, z) figure or figure (#) : open a figure » figure (2) » plot (x, y, 'r o -'); grid on (red, circle, solid line) » hold on (blue, star, dotted line) » plot (x, z, 'b * :') Graphics Commands Axis, Labels, and Title xlabel ( label ) ylabel ( label ) title ( title of the plot ) text ( x_location, y_location, text ) axis ( [ x_min x_max y_min y_max ] ) » xlabel (Time) - text string » ylabel (Temperature) » title (Temperature Record : 1900 - 2000) » text (17, 120, Record High ) » text (85, -40, Record Low ) » axis ([0 100 -50 140]) » hold off CVEN 302-501 Homework No. 1 Chapter 2 Problems 2.2 (15), 2.4 (15), 2.7 (20), 2.10 (20), 2.11 (20). Due Friday. 09/05/2008 at the beginning of the period