1.23k likes | 1.46k Views
Solution Strategies 1. PROGRAMMING WITH MATLAB. 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
E N D
Solution Strategies 1. PROGRAMMING WITH MATLAB
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) – optimization, neural network, image and signal processing, control systems design, fuzzy logic, etc. • Has own structured programming language • Ease of application and testing (pre- and post-processing without lots of programming and formatting) • Platform independent
What is MATLAB? • Both a computer programming language and a software • Began as a set of tools to solve linear algebraic equations. Has grown to a complete scientific programming suite • Interpretive programming language: Read script files and perform operations; generally not compiled • Enhanced calculator / spreadsheet – much more flexible • Complete visualization package and post-processing analysis suite
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
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 • 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
>> pi ans = 3.1416 >> size(pi) ans = 1 1 >> a=[1 2 3; 4 5 6] a = 1 2 3 4 5 6 >> size(a) ans = 2 3 a=
Complex variables • MATLAB handles complex arithmetic automatically • No need to compute real and imaginary parts separately • The unit imaginary number i = 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 b y C x z » whos Name Size Bytes Class A 2x3 48 double array C 2x1 16 double array b 3x1 24 double array x 1x1 8 double array y 1x1 8 double array z 1x1 8 double array » save Saving to: matlab.mat » save matrix1 default filename 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]; B = [1 3 5; -6 4 -1] C = [2 3 5 1; 0 1 … (continuation) 1 -2; 3 5 1 -3] E = [A; 1; A]; F = [C(2,3); A]
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]
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]
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]
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 0.8000 1.0000 1.2000 Columns 8 through 11 1.4000 1.6000 1.8000 2.0000
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
Scalar Arithmetic Operations • In order of priority (Matrix inverse) Example: x = (a + b*c)/d^2 count = count + 1
Order of Precedence of Arithmetic Operations • Parentheses, starting with the innermost pair • Exponentiation, from left to right • Multiplication and division with equal precedence, from left to right • 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 » y = -7.3^2 y = -53.2900 » y=(-7.3)^2 y = 53.2900 » a=3; b=5; c=2; » s1 = a-b*c s1 = -7 » s2=(a-b)*c s2 = -4 Exponentiation has higher priority than negation Multiplication has higher priority than subtraction
Array Operations • An array operation is performed element-by-element MATLAB: C = A.*B;
Vector and Matrix operations But a*b gives an error (undefined) because dimensions are incorrect. Need to use .*
Built-in Functions • All the standard operators +, , *, /, ^ • Sqrt( ), abs( ), sin( ), cos( ), exp( ), tanh( ), acos( ), log( ), log10( ), etc. • These operators are vectorized
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) B = 1.0000 1.7321 2.2361 1.4142 2.0000 2.4495 0 + 1.7321i 1.4142 0 + 1.0000i >> C = sqrtm(A) C = 2.1045 + 0.0000i 0.1536 - 0.0000i 1.8023 + 0.0000i 1.7141 - 0.0000i 1.1473 + 0.0000i 1.7446 + 0.0000i -2.0484 + 0.0000i 1.3874 + 0.0000i 0.5210 - 0.0000i (element by element) (C*C = A)
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,’g*’) uses green asterisks If you want to put two plots on the same graph, use “hold on” plot(a,b,’r:’) (red dotted line) hold on plot(a,c,’ko’) (black circles)
Bungee Jumper • You are asked to plot the velocity of a bungee jumper as a function of time during the free-fall part of the jump
Exact (Analytic) Solution • Newton’s Second Law • Exact Solution
Free-Falling Bungee Jumper >> g = 9.81; m = 75.2; cd = 0.24; >> t = 0:1:20 t = Columns 1 through 15 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 Columns 16 through 21 15 16 17 18 19 20 >> 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 Columns 10 through 18 51.0358 52.3119 53.2262 53.8772 54.3389 54.6653 54.8956 55.0579 55.1720 Columns 19 through 21 55.2523 55.3087 55.3484 • Use built-in functionssqrt&tanh
>> plot(t,v); grid on >> title('Free Falling Bungee Jumper') >> xlabel('time t (second)'); ylabel('velocity v (m/s)') >> print –djpeg bungee.jpg • Plot the velocity versus time curve How to change line thickness, line color, font size, symbols, marker size, etc.?
Color, Symbols, and 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 Colors Symbols Line Types • Use “help plot” to find available Specifiers
» 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, ‘colorsymbolline style’) » x = linspace(0, 2*pi); » y = sin (2.*x); » z = cos (0.5*x); » plot (x, y) » plot (x, y, x, z) » figure (2) » plot (x, y, 'r o -'); grid on » hold on » plot (x, z, 'b * :') figure or figure (#) : open a figure (red, circle, solid line) (blue, star, dotted line)
Graphics Commands xlabel ( label )ylabel ( label )title ( title of the plot )text (x_location, y_location, text )axis ([ x_min x_max y_min y_max ]) • Axis, Labels, and Title » xlabel (Time) » ylabel (Temperature) » title (Temperature Record : 1900 - 2000) » text (17, 120, Record High ) » text (85, -40, Record Low ) » axis ([0 100 -50 140])» hold off - text string