Week 15: Matlab/Octave for Engineering Applications

advertisement
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
Download
Study collections