Lecture 13 - Matlab/Octave/FreeMat

advertisement
Lecture 13: M/O/F/ for
Engineering Applications Part 1
BJ Furman
26NOV2012
The Plan for Today

Matlab/Octave/FreeMat (M/O/F) for
engineering applications






Overview of M/O/F
Matlab/FreeMat environment
Octave command line
Basic operations
Script files
Resources for more information
Learning Objectives

Explain what M/O/F are

Navigate the Matlab user interface and
Octave command line

Use M/O/F as a scratch pad

Create script files to execute a sequence
of commands
Matlab and Octave

M/O/F 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 and FreeMat are open source and free:
http://www.gnu.org/software/octave/ (main page)
http://freemat.sourceforge.net/index.html (main page)
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
QtOctave GUI
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
M/O/F Basics - 1

Fundamental element: the array

even scalars are 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. In QtOctave, View  Clear Terminal)
clear (clears all user defined variables)
help name (provides information on command name)
M/O/F Basics - 2

Script files (.m files)

Text files containing M/O/F statements


Type in a text editor (M/O/F) or use
M-file editor in Matlab (File/New/M-File or Ctrl-n)
Comments
Matlab: %
 Octave: % or #
 FreeMat: %


Example: look at cool_plot.m

Verify directory containing cool_plot.m is in the file path


MATLAB: File | Set Path… | select folder
Octave: addpath(‘dir_path’) find from Windows Explorer
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 Path…
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
0
1
2
3
4
x
-2
-3This 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
M/O/F 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
M/O/F Basics - 4

Vectors (just 1xn or nx1 arrays)


Vectors using the colon operator



C = 1 : 0.25 : 2
D=0:5
Note: limit is reached only
if (limit-base)/increment is
an integer
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)]
E=
Format: start : end : n For n elements
linearly spaced between start and
linspace(0,5,3)
end
Logspace

F=
Format: start : end : n For n elements
logarithmically spaced between
logspace(1,3,5)
start and end
M/O/F 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.
M/O/F Basics - 6

Special matrices

zeros, ones, eye



K=zeros(3)
L=ones(4)
M=eye(3)
M/O/F 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)
M/O/F Basics - 8
i2
i1

R2
Matrix operations, cont.





i3
Recall the circuit analysis problem
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
M/O/F Basics - 9

Matrix operations, cont.

Element-by-element operations use
 . (dot) and the operator (other
v1
 
 
than addition/subtraction)

dot product of two vectors

 v1  v2  v1 v2 cos( )
v2


ˆ
ˆ
ˆ
v1  3i  2 j  5k
v2  2iˆ  4 ˆj  10 kˆ
 
what is v1  v2?
 
v1  v2  (3)( 2)  (2)( 4)  ( 5)(10 )  6  8  50  52
in M/O/F :
v1  [3 2  5]
sum(v1 . * v 2)
v 2  [2  4 10]
Note!! period-asterisk means
element-by-element multiplication
M/O/F Basics - 10

Functions

Like script M-files, but several differences:

first line must be of the form:
Name that you assign
function [output args] = function_name(input args)
keyword




variables generated in the function are local to the function,
whereas for script files (.m files), variables are global
the file 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

rms1.m
i 1
Given, x  [ x1 , x2 ,..., x N ] RMS 
N
M/O/F Basics - 10.1

Functions, cont.

Example: root-mean-square
function, cont.

Pseudocode:





xs = x .^2
Sum the squares


Given, x  [ x1 , x2 ,..., x N ] RMS 

sums = sum(xs)
Divide by N


N = length(x)
ms = sums/N
Take the square root

Expression to square each
element in vector x


square each element of x
sum the squares
divide by N
take the square root
N

rms = sqrt(ms)
Before you write the
function, make sure the
name you propose is
not already used!
 help fn_name

xi2
i 1
N
M/O/F 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 [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. 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?
y = 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?
M/O/F 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
See rms3.m
Vector Dot Product Example
Find the X and Y components of the vector, V


 

that is, find v x and v y , so that v x  v y  v

v

v
Y
ĵ


iˆ

vy

vx
X
    ˆ  v iˆ cos( )  v (1) cos( )  v cos( )
vx v i
x
x
x





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


FreeMat. http://freemat.sourceforge.net/index.html
ftp://www.chabotcollege.edu/faculty/bmayer/ChabotEngineeringCour
ses/ENGR-25.htm
Download