Week 15: Matlab/Octave for Engineering Applications - Part 1 BJ Furman 27NOV2010 The Plan for Today Matlab/Octavefor engineering applications Overview of Matlab and Octave Matlab environment Octave command line Basic operations Script files Resources for more information Learning Objectives Explain what Matlab and Octave (M/O) are Navigate the Matlab user interface and Octave command line Use M/O as a scratch pad Create script files to execute a sequence of commands Matlab and Octave Matlab and Octave are ‘high-level’ languages They abstract away the nitty-gritty details Numerical calculation Oriented toward engineering, mathematical, and scientific computing Matlab (Matrix Laboratory) Key point! Powerful graphics and analysis tools Particularly good at handling arrays! Controls, signal processing, data analysis, and other specialized ‘toolboxes’ are available Widely used in industry Matlab is commercial software (a student version is available) http://www.mathworks.com/ Octave is open source and free: http://www.gnu.org/software/octave/ (main page) http://octave.sourceforge.net/ (access to pre-built installers) Matlab (ver. 6.5) Environment (GUI) Default Window Layout Workspace/Current Directory Window Workspace: lists variables Directory: files in current dir Command Window Interactive ‘scratch pad’ Command History Window Octave Command Line Enter commands at the prompt Matlab as a ‘scratch pad’ Info on variables in the workspace Variables are dynamically typed Octave as a ‘scratch pad’ dynamically typed Matlab/Octave Basics - 1 Fundamental element: the array even scalars --> stored as 1x1 array of double floating point value How many bytes? See Workspace Window Useful commands (see documentation for more details!) who (information about what is in memory) whos (more detailed information about what is in memory) clc (clears the command window) clear (clears all user defined variables) help name (provides information on command name) Matlab/Octave Basics - 2 Script files (.m files) Text files containing Matlab/Octave statements Type in a text editor (Matlab or Octave) or use M-file editor in Matlab (File/New/M-File or Ctrl-n) Comments Matlab: % Octave: % or # Example: look at cool_plot.m Add the directory containing cool_plot.m to the file path Script File Example: cool_plot.m Plot of z ( x, y ) = e −0.5[ x 2 + 0.5( x − y ) 2 ] over − 4 ≤ x, y ≤ 4 Octave Script File Example cool_plot.m needs to be in the ‘load path’ • Octave: addpath(dir-path) Example (yours may be different): addpath('C:\Octave\Octave_code') • Matlab: File | Set PathI Plot of z ( x, y ) = e −0.5[ x 2 + 0.5( x − y ) 2 ] over − 4 ≤ x, y ≤ 4 Matlab Script File Example Ch Example function exp(-0.5(x*x+0.5(x-y)(x-y))) z 1 0.9 0.8 0.7 0.6 0.5 0.4 0.3 0.2 0.1 0 1 0.9 0.8 0.7 0.6 0.5 0.4 0.3 0.2 0.1 0 4 3 2 y 1 0 -1 -2 -1 -3 -4 -4 See: chap. 23 of The Ch Language User's Guide and chap. 2 of The Ch Language Environment Reference -3 0 1 2 3 4 x -2 This plot is generated by Ch Student Edition Excel Example Data needs to be equally spaced • Select z-data values • Insert | Other Charts | Surface • Use Chart Tools | Layout tab to control display Matlab/Octave Basics - 3 Array creation A=[1 2 3; 4,5,6; 7 8 9] What does this do? Indexing elements size(A) A(1,2) Separate elements by spaces or commas, and rows by semicolon or carriage return Index by enclosing indices in ( ) Which element does this choose? Contrast with C. Adding elements A(4,2)=13 A(4,2)=13; What does this do? Contrast with C. The semicolon at the end suppresses the output Matlab/Octave Basics - 4 Vectors (just 1xn or nx1 arrays) Vectors using the colon operator C=1 : 0.25 : 2 D=0 : 5 1 0.25 2 Format: base : increment : limit For an increment of 1: base : limit Linspace B=[sin(pi/4), -2^3, size(A,1)] Format: start : end : n For n elements linearly spaced between start and E=linspace(0,5,3) end Logspace Format: start : end : n For n elements logarithmically spaced between F=logspace(1,3,5) start and end Matlab/Octave Basics - 5 Manipulating arrays Add a row A = [ A ; [ 10 11 12 ] ] Extract a sub-array What does this do? G = A(1:3, 1:2) Colon operator by itself means, “all the elements” Assuming A = [ 1 2 3; 4,5,6 ; 7 8 9 ] Can apply to the dimensions of the arrays to access all the elements of a row or column Can apply to the entire array to get all the elements as a column vector What order will they come out? Examples H = [1:4; linspace(10,40,4); 400:-100:100] I = H( [1 2], : ) What will this produce? J = H( : ) Matlab stores array elements in columnmajor order. Matlab/Octave Basics - 6 Special matrices zeros, ones, eye K=zeros(3) L=ones(4) M=eye(3) Matlab/Octave Basics - 7 Matrix operations Arithmetic just like with scalars! (But need to take care that dimensions agree) N=L*7 O=N+eye(4) P=B*E P=B*E’ Q=A+B Q=B+E [1 2]*[3 ; 4] What does the ‘ do? A=[1 2 3; 4,5,6; 7 8 9] B=[sin(pi/4), -2^3, size(A,1)] E=linspace(0,5,3) L=ones(4) Matlab/Octave Basics - 8 i2 i1 R2 Matrix operations, cont. Recall last week’s circuit analysis i3 R1=10k R2=R3=5k V=10V Matrix solution −1 −1 −1 Ri = V ⇒ R Ri = R V ⇒ i = R V use ' left' division to solve for i i=R\V If we had iR = V instead, we’d use ‘right’ division: ( i = R / V ) roughly the same as: i = VR-1 1 0 0 −1 0 (R2 + R3 ) R R3 +V Matrix division R1 − 1 i1 0 R1 i2 = V 0 i3 V i V R = [1 -1 -1; 0 0 10e3; 0 10e3 0]; V = [0 10 10]’; I=R\V Matlab/Octave Basics - 9 Matrix operations, cont. Element-by-element operations (use r . (dot) and v1 r r r r the arithmetic operator) dot product of two vectors θ r v1 • v2 = v1 v2 cos(θ ) v2 r r ˆ ˆ ˆ v1 = 3i + 2 j − 5k v2 = 2iˆ − 4 ˆj + 10kˆ r r what is v1 • v2 ? r r v1 • v2 = (3)( 2) + (2)( −4) + ( −5)(10) = 6 − 8 − 50 = −52 in Matlab/Octave : v1 = [3 2 − 5] v 2 = [2 − 4 10] sum( v1 . * v 2) Matlab/Octave Basics - 10 Functions Like script M-files, but several differences: Name that you assign function [output args] = function_name(input args) keyword first line must be of the form: variables generated in the function are local to the function, whereas for script files (.m files), variables are global must be named, ‘function_name.m’ Make sure you add comments at the start that describe what the function does Example: root-mean-square function, N 2 xi ∑ rms.m i =1 Given, x = [ x1 , x2 ,..., x N ] RMS = N Matlab/Octave Basics - 10.1 Functions, cont. Example: root-meansquare function, cont. Pseudocode: xs = x .^2 Sum the squares Given, x = [ x1 , x2 ,..., x N ] RMS = Take the square root rms = sqrt(ms) Square each element square each element of x sum the squares divide by N take the square root N sums = sum(xs) Divide by N N = length(x) ms = sums/N Before you write the function, make sure the name you propose is not already used! help fn_name ∑ xi2 i =1 N Matlab/Octave Basics - 10.2 Functions, cont. Example: root-mean-square function, cont. H1 comment line (used in lookfor) Comments that will be displayed by help command function rmsout = rms(v) % rms(v) root mean square of the elements of the column vector v % Function rms(v) returns the root mean square of the elements % of the column vector, v. If v is a matrix, then rms(v) returns % a row vector such that each element is the root mean square %of the elements in the corresponding column of v. vs = v.^2; % what does this line do? Also note semicolon. s = size(v); % what does this line do? rmsout=sqrt(sum(vs,1)/s(1)); % what is s(1)? Let v=sin([0: 0.0001*pi: 2*pi]’), one period of a sine wave. The RMS value of a sine wave is its amplitude*1/sqrt(2) Does rms() work with a row vector? How about a matrix? Matlab/Octave Basics - 10.3 Functions, cont. Make rms function more robust to work with row or column vector or matrix with column vectors of data Pseudocode: Test for size of v if > 2, print error message else if row vector transpose calculate rms Vector Dot Product Example Find the X and Y components of the vector, V r r r r r that is, find v x and v y , so that v x + v y = v r v r v Y ĵ θ θ iˆ r vy r vx X r = r • ˆ = vr iˆ cos(θ ) = vr (1) cos(θ ) = vr cos(θ ) vx v i x x x r r r r r v y = v • ˆj = v y ˆj cos(90 − θ ) = v y (1) cos(90 − θ ) = v y sin(θ ) Back Review References Matlab. (2009, November 6). In Wikipedia, the free encyclopedia. Retrieved November 6, 2009, from http://en.wikipedia.org/wiki/Matlab Matlab tutorials: http://www.mathworks.com/academia/student_center/tutorials/launchpad.html GNU Octave. (2009, October 31). In Wikipedia, the free encyclopedia. Retrieved November 6, 2009, from http://en.wikipedia.org/wiki/GNU_Octave Octave main page: http://www.gnu.org/software/octave/ (http://octave.sourceforge.net/ access to pre-built installers) Octave tutorials: http://homepages.nyu.edu/~kpl2/dsts6/octaveTutorial.html, http://smilodon.berkeley.edu/octavetut.pdf ftp://www.chabotcollege.edu/faculty/bmayer/ChabotEngi neeringCourses/ENGR-25.htm