Download presentation
Presentation is loading. Please wait.
Published byKristina Harris Modified over 9 years ago
1
Lecture 14: M/O/F/ for Engineering Applications - Part 2 BJ Furman 28NOV2011
2
The Plan for Today Matlab/Octave/FreeMat (M/O/F) for engineering applications – part 2 Recap M/O/F key concepts Element-by-element operations (dot operator) Function examples 2D graphs File IO Resources for more information
3
Learning Objectives Distinguish between matrix and array arithmetic, and use them appropriately Explain the differences between script files and functions Explain the basic elements of creating a 2D graph Explain how to read from and write to files
4
Last Lecture Overview of Matlab/Octave Useful commands The array as a fundamental element creating arrays indexing elements vectors colon operator linspace logspace extracting sub-arrays using indexing and the colon operator special matrices ones(), zeros(), diag(), eye() Introduction to plotting in M/O/F via script file comparison to Ch and Excel
5
Arrays, Vectors, and Matrices Array : A collection of data elements arranged in rows and columns Vector: A one-dimensional array (single row or single column of data elements) Matrix : A two-dimensional array (more than one row and/or column of data elements) >> A=[1:9] >> B=[1:9]’ >> C=[1:3; 4:6; 7:9] row or column? C = 1 2 3 4 5 6 7 8 9 column vector
6
Colon Operator vs. linspace() What will the following do? D=0 : 3 : 10 F=linspace(0, 10, 11) Observations about the two methods: both methods produce vectors with equally spaced elements colon operator method allows you to specify the first element and the interval spacing between elements, but not the number of elements If just start : end, then spacing is 1 linspace method allows you to specify the first and last elements of the vector, but not the spacing between elements base : increment : limit start : end : n
7
Review of length() and size() What will the following do? length(ones(1,3)) length returns the number of elements of the vector size(zeros(2,3)) size returns the size of the dimensions of its argument
8
Review of Array Manipulation Given G=[2 4 6; 8 10 12], what is: G(2,3) G(:, 2) G(4) G(1,1)=0 G(1, :)=0 Observations: Array indexing begins with 1 (contrast with C) : means “all of” the elements in that dimension Extract elements by indexing Extract sub-arrays using vectors as the indexing arguments
9
More Array Manipulation Suppose H=1:9 (what will this produce?) How could we form into a 3x3 matrix? Reshape function I=reshape(H,3,3) How to transpose the rows to be the columns? Reverse the order of the rows of I J=I(3:-1:1,:) Reverse the order of the columns of I (how?) K=I(:, 3:-1:1) Reverse the order of all the elements of I (how?) Pseudocode: Index I in reverse order Reshape L = reshape(I(9:-1:1),3,3) I = I’
10
Matrix and Array Arithmetic Arithmetic operators: ++ - * / \ ^ ’ aaddition and subtraction are done element-by-element (same for matrix and array arithmetic) Unless one is a scalar, the operands must be of the same size sscalar (matrix or array) --> ? ((matrix or array) (matrix or array) --> ? ((matrix or arrays) must be of the same size FFor the other operators, need to distinguish between matrix and array operation Matrix arithmetic operations pper rules of linear algebra rows and columns must conform For example, A x B: must have column and row agreement Array arithmetic operations eelement-by-element Denote with dot operator:.*./.\.^.’ (array transpose) add.sub.mult.right div.left div.expon.algebr. transpose A B
11
Matrix and Array Arithmetic Examples Scalar and matrix operands If L=ones(1,5) and M=ones(1,4) N = 2*L --> ? N – 1 --> ? Non-scalar operations If O = [ 1:5 ] O + M --> ? L * O --> ? L* O’ --> ? ??? Error using ==> + Matrix dimensions must agree. ??? Error using ==> * Inner matrix dimensions must agree. 15 Same as sum(L.* O) (1x5 * 1x5 does not work!) (1x5 * 5x1 works! Inner matrix dimensions agree. Results in a 1x1)
12
Array Operations Element-by-element array operation Ex: Given a set of distances and times, calculate average speeds and maximum of averages How would you do this in C? Pseudocode: Calculate avg. speeds: speed[i] = distance[i] / time[i], for i=1 to 4 Determine maximum speed M/O/F (vectorize!): distances=[120, 213, 87, 35] (in miles) times=[ 2, 3.8, 0.9, 0.6] (in hours) speeds=distances./ times %( note: ‘dot /’ divide element-by-element) max_speed=max(speeds) To get the maximum speed and its index: [max_speed, i] = max(speeds)
13
Circuit Analysis Equations Matrix operations Matrix division Recall the circuit analysis R1=10k R2=R3=5k V=10V Matrix solution R2 R1 R3 +V i1 i2 i3 If we had iR = V instead, we’d use ‘right’ division to solve for i: ( i = R / V ) Think of it like inverting R and multiplying on the right side of V: i = VR -1 Think of it like inverting R and multiplying on the left side of V
14
Circuit Analysis Solution Circuit analysis solution: Build R, build V, solve for i Build R all at once R=[1 -1 1; 0 0 10e3; 0 10e3 0] or build by rows and combine eq1 = [ 1 -1 1] eq2 = [0 0 10e3] eq3 = [0 10e3 0] R = [eq1; eq2; eq3] Build V V = [0 10 10]’ (note: transposed) Solve I = R \ V I = R \ V R1=10k R2=R3=5k V=10V
15
Dot Product Example Another example of element-by-element operations dot product of two vectors
16
Dot Product Function Development Define the problem Create a function that will take two vectors as arguments and will return their vector dot product Inputs v1, v2 (three-element row vectors) Outputs z (the dot product) Algorithm Multiply v1 and v2 element-by-element Sum the element-by-element products Return the sum
17
Dot Product Function in M/O/F Write the function Test it out function [z] = dot_prod(v1, v2) % dot_prod(v1,v2) computes the vector dot product between vectors v1 and v2 % Function dot_prod(v1,v2) computes and returns the vector dot product between vectors v1 and v2 z = sum(v1.*v2); A = [ 1 2 3 ]; B = [ 4 5 6 ];% what should A dot B result in? A_dot_B = dot_prod(A,B)
18
Review of Functions Functions Like script M-files, but several differences: first line (function declaration) must be of the form: function [output args] = function_name(input args) variables generated in the function are local to the function, whereas for script files, variables are global must be named, ‘function_name.m’ (same as file name) Make sure you add comments at the start that describe what the function does (see example code) Example: root-mean-square function, rms.m
19
Root Mean-Square Function Development Functions, cont. Example: root-mean- square function, cont. Pseudocode: square each element of x sum the squares divide by N take the square root Square each element xs = x.^2 Sum the squares sums = sum(xs) Divide by N N = length(x) ms = sums/N Take the square root rms = sqrt(ms) Before you write the function, make sure the name you propose is not already used! Use: which name to check
20
Root Mean-Square Function Implementation Functions, cont. Example: root-mean-square function, cont. function [y] = 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 vs = v.^2; % what does this line do? Also note semicolon. s = length(v); y = sqrt(sum(vs)/s); Let v=sin([0: 0.01*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? H1 comment line (used in lookfor) Comments that will be displayed by help command
21
More Robust Root Mean-Square Function Functions, cont. Make rms function more robust to work with row or column vector or matrix with column vectors of data function [rmsout] = rms2(v) %RMS2(v) Root mean square of v % Function rms2(v) returns a row vector, where % each element is the rms value of values in each % column of v vs = v.^2; s = size(v); rmsout = sqrt(sum(vs,1)/s(1));
22
File I/O with M/O/F Data Input - simplest method load command Ex: load (‘data_file.txt’) reads on a row-by-row basis data values separated by spaces or commas and rows terminated by new line columns must have the same number of elements data is stored in workspace in an array with same name as the argument used in the load function Ex. Portland International Airport monthly rainfall load (‘PDXprecip.dat’) % must be in search path!
23
File I/O with M/O/F, cont. Data Output - simplest method Save command Ex: save (‘data_file_name’) Saves all the variables into a.mat file named ‘data_file_name’ Many other commands are available for special purpose file I/O
24
File I/O and Plotting Example % read data into PDXprecip matrix load('PDXprecip.dat'); % copy first column of PDXprecip into month month = PDXprecip(:,1); % and second column into precip precip = PDXprecip(:,2); % plot precip vs. month with circles plot(month,precip,'o'); % add axis labels and plot title xlabel('month of the year'); ylabel('mean precipitation (inches)'); title('Mean monthly precipitation at Portland International Airport'); Adapted from: http://web.cecs.pdx.edu/~gerry/MATLAB/plotting/loadingPlotData.html visited 15NOV2009http://web.cecs.pdx.edu/~gerry/MATLAB/plotting/loadingPlotData.html file_io_example.m
25
More on Plotting Add a red line through the data Plot multiple sets of data on a single graph and add a legend grid on Sub-plots Format: subplot (m,n,p) Figure window divided into m x n matrix of plotting areas Procedure: Pick the sub-plot window Execute plot commands for that sub-plot % plot precip vs. month with circles plot(month,precip,'o',month,precip,'-r'); General Format: plot (x, y, fmt,...) % copy first column of PDXtemperature into month month = PDXtemperature(:,1); % and second column into high_temp high_temp = PDXtemperature(:,2); % and third column into low temp low_temp = PDXtemperature(:,3); % and fourth column into avg temp avg = PDXtemperature(:,4); % generate the plot plot(month,high_temp,'ko',month,low_temp,'k+',month,avg,‘r-'); % add axis labels and plot title xlabel('Month'); ylabel('temperature (degrees F)'); title('Monthly average temperature for PDX'); % add a plot legend using labels read from the file legend('High','Low','Avg'); multi_plot.m
26
Vector Dot Product Example X Y Find the X and Y components of the vector, V ivv x ˆ Back
27
Review
28
References Matlab. (2009, November 6). In Wikipedia, the free encyclopedia. Retrieved November 6, 2009, from http://en.wikipedia.org/wiki/Matlab http://en.wikipedia.org/wiki/Matlab Matlab tutorials: http://www.mathworks.com/academia/student_center/tutorials/launchpad.html 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 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)http://www.gnu.org/software/octave/http://octave.sourceforge.net/ Octave tutorials: http://homepages.nyu.edu/~kpl2/dsts6/octaveTutorial.html, http://smilodon.berkeley.edu/octavetut.pdf http://homepages.nyu.edu/~kpl2/dsts6/octaveTutorial.html http://smilodon.berkeley.edu/octavetut.pdf FreeMat. http://freemat.sourceforge.net/index.htmlhttp://freemat.sourceforge.net/index.html ftp://www.chabotcollege.edu/faculty/bmayer/ChabotEngineeringCour ses/ENGR-25.htm ftp://www.chabotcollege.edu/faculty/bmayer/ChabotEngineeringCour ses/ENGR-25.htm
Similar presentations
© 2025 SlidePlayer.com. Inc.
All rights reserved.