0% found this document useful (0 votes)
79 views

Zen and The Art of Matlab: Damian Gordon

This document provides an introduction to using MATLAB for numeric computation and visualization. It discusses basic MATLAB commands and functions for creating and manipulating matrices, plotting graphs, and working with polynomials. Examples are provided for common tasks like matrix addition and multiplication, transposing matrices, plotting functions, and finding the roots of polynomials.

Uploaded by

John Taulo
Copyright
© © All Rights Reserved
Available Formats
Download as PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
79 views

Zen and The Art of Matlab: Damian Gordon

This document provides an introduction to using MATLAB for numeric computation and visualization. It discusses basic MATLAB commands and functions for creating and manipulating matrices, plotting graphs, and working with polynomials. Examples are provided for common tasks like matrix addition and multiplication, transposing matrices, plotting functions, and finding the roots of polynomials.

Uploaded by

John Taulo
Copyright
© © All Rights Reserved
Available Formats
Download as PDF, TXT or read online on Scribd
You are on page 1/ 105

Zen and the Art of MatLab

Damian Gordon
Hard work done by :

Daphne Gilbert
&
Susan Lazarus
Introduction to MatLab
• MatLab is an interactive, matrix-based
system for numeric computation and
visualisation
• MATrix LABoratory
• Used in image processing, image synthesis,
engineering simulation, etc.
References
• “Mastering MatLab” Duane Hanselman, Bruce
Littlefield
• “The MatLab Primer”
http://www.fi.uib.no/Fysisk/Teori/KURS/WRK/m
at/mat.html
• “The MatLab FAQ”
http://www.isr.umd.edu/~austin/ence202.d/matlab
-faq.html
Printed Circuit Board
Specific Bond Selected
Bond Shape Estimated
MATLAB Command Window

To get started, type one of these: helpwin, helpdesk, or demo.


For product information, type tour or visit www.mathworks.com.

» help

HELP topics:
Creating Variables
>> varname = 12
varname =
12

>> SS = 56; N = 4; Tot_Num = SS + N


Tot_Num =
60
Operations
+ Addition • Add vars
- Subtraction • Subtract vars
* Multiplication Multiplication
^ Power • Raise to the power
\ Division • Divide vars (A div B)
/ Division • Divide vars (B div A)
Creating Complex Numbers
>> 3 + 2i
>> sqrt(9) + sin(0.5)*j
ans =
3.0000 + 0.4794i
Num = sqrt(9) + sin(0.5)*j
real(Num)
imag(Num)
Entering Matrices (1)
>> A = [1 2 3; 4 5 6; 7 8 9]

OR
>> A = [
123
456
789]
Entering Matrices (2)
• To create an NxM zero-filled matrix
>> zeros(N,M)
• To create a NxN zero-filled matrix
>> zeros(N)
• To create an NxM one-filled matrix
>> ones(N,M)
• To create a NxN one-filled matrix
>> ones(N)
Entering Matrices (3)
• To create an NxM randomly-filled matrix (which
is uniformly distributed)
>> rand(N,M)

• To create an NxM randomly-filled matrix (which


is normally distributed)
>> randn(N,M)
Complex Matrices
• To enter a complex matrix, you may do it in
one of two ways :
>> A = [1 2; 3 4] + i*[5 6;7 8]

OR

>> A = [1+5i 2+6i; 3+7i 4+8i]


MATLAB Command Window
» who

Your variables are:

a b c

» whos
Name Size Bytes Class

a 8x8 512 double array


b 9x9 648 double array
c 9x9 648 double array

Grand total is 226 elements using 1808 bytes


Matrix Addition
» A = [ 1 1 1 ; 2 2 2 ; 3 3 3]
» B = [3 3 3 ; 4 4 4 ; 5 5 5 ]

»A+B
ans =

4 4 4
6 6 6
8 8 8
Matrix Subtraction
» A = [ 1 1 1 ; 2 2 2 ; 3 3 3]
» B = [3 3 3 ; 4 4 4 ; 5 5 5 ]

»B-A
ans =

2 2 2
2 2 2
2 2 2
Matrix Multiplication
» A = [ 1 1 1 ; 2 2 2 ; 3 3 3]
» B = [3 3 3 ; 4 4 4 ; 5 5 5 ]

»A*B
ans =
12 12 12
24 24 24
36 36 36
Matrix - Power
»A^2
ans =
6 6 6
12 12 12
18 18 18

»A^3
ans =
36 36 36
72 72 72
108 108 108
Matrix Transpose
A=
1 1 1
2 2 2
3 3 3
» A'
ans =
1 2 3
1 2 3
1 2 3
Matrix Division
Left Division \ Right Division /
x = A\B (is A*x=B) x=A/B (is x*A=B)

>> A = rand(4) >> A = rand(4)


>> B = rand(4) >> B = rand(4)
>> C = A \ B >> C = A / B

=> A * C = B => C * A = B
Matrix Operations
+ Addition • Add matrices
- Subtraction • Subtract matrices
* Multiplication Matrix Multiplication
^ Power • Raise to the power
‘ Conjugate Transpose • Get transpose
\ Left Division • x = A\B (is A*x=B)
/ Right Division • x=A/B (is x*A=B)
Philosophiae Naturalis
Principia Matlabematica
Damian Gordon
Getting to Matlab
Magic Matrix

MAGIC Magic square.


MAGIC(N) is an N-by-N matrix
constructed from the integers
1 through N^2 with equal row, column, and
diagonal sums.
Produces valid magic squares for N =
1,3,4,5,...
Identity Function
>> eye (4)
ans =

1 0 0 0
0 1 0 0
0 0 1 0
0 0 0 1
Upper Triangle Matrix
» a = ones(5) » triu(a)

a= ans =

1 1 1 1 1 1 1 1 1 1
1 1 1 1 1 0 1 1 1 1
1 1 1 1 1 0 0 1 1 1
1 1 1 1 1 0 0 0 1 1
1 1 1 1 1 0 0 0 0 1
Lower Triangle Matrix
» a = ones(5) » tril(a)

a= ans =

1 1 1 1 1 1 0 0 0 0
1 1 1 1 1 1 1 0 0 0
1 1 1 1 1 1 1 1 0 0
1 1 1 1 1 1 1 1 1 0
1 1 1 1 1 1 1 1 1 1
Hilbert Matrix
» hilb(4)

ans =

1.0000 0.5000 0.3333 0.2500


0.5000 0.3333 0.2500 0.2000
0.3333 0.2500 0.2000 0.1667
0.2500 0.2000 0.1667 0.1429
Inverse Hilbert Matrix
» invhilb(4)

ans =

16 -120 240 -140


-120 1200 -2700 1680
240 -2700 6480 -4200
-140 1680 -4200 2800
Toeplitz matrix.
TOEPLITZ
TOEPLITZ(C,R) is a non-symmetric
Toeplitz matrix having C as its
first column and R as its first row.
TOEPLITZ(R) is a symmetric (or
Hermitian) Toeplitz matrix.

-> See also HANKEL


Summary of Functions
• magic - magic matrix
• eye(4) - identity matrix
• triu(4) - upper triangle
• tril(4) - lower triangle
• hilb(4) - hilbert matrix
• invhilb(4) - Inverse Hilbert matrix
• toeplitz(4) - non-symmetric
Toeplitz matrix
Dot Operator
• A = magic(4); b=ones(4);
• A*B
• A.*B
• the dot operator performs element-by-
element operations, for “*”, “\” and “/”
Concatenation
• To create a large matrix from a group of
smaller ones
• try
– A = magic(3)
– B = [ A, zeros(3,2) ; zeros(2,3), eye(2)]
– C = [A A+32 ; A+48 A+16]
– Try some of your own !!
Subscripts
• Row i and Column j of matrix A is denoted
by A(i,j)
• A = Magic(4)
• try
– A(1,4) + A(2,4) + A(3,4) + A(4,4)
• try
– A(4,5)
The Colon Operator (1)
• This is one MatLab’s most important
operators
• 1:10 means the vector
– 1 2 3 4 5 6 7 8 9 10
• 100:-7:50
– 100 93 86 79 72 65 58 51
• 0:pi/4:pi
– 0 0.7854 1.5708 2.3562 3.1416
The Colon Operator (2)
• The first K elements in the jth column is
– A(1:K, j)
• Sum(A(1:4, 4)) is the sum of the 4th
column
or
• Sum(A(:, 4)) means the same
matlABBA
The Colon Operator (1)
• This is one MatLab’s most important
operators
• 1:10 means the vector
– 1 2 3 4 5 6 7 8 9 10
• 100:-7:50
– 100 93 86 79 72 65 58 51
• 0:pi/4:pi
– 0 0.7854 1.5708 2.3562 3.1416
The Colon Operator (2)
• The first K elements in the jth column is
– A(1:K, j)
• Sum(A(1:4, 4)) is the sum of the 4th
column
or
• Sum(A(:, 4)) means the same
Deleting Rows and Columns (1)
• Create a temporary matrix X
• X=A;
• X(:, 2) = []
• Deleting a single element won’t result in a
matrix, so the following will return an error
• X(1,2) = []
Deleting Rows and Columns (2)
• However, using a single subscript, you can
delete
– a single element
– sequence of elements
So X(2:2:10) = []
gives
• x = 16 9 2 7 13 12 1
The ‘FIND’ Command (1)
>> x = -3:3
x=
-3 -2 -1 0 1 2 3

K = find(abs(x) > 1)
K=
1267
The ‘FIND’ Command (2)
A = [ 1 2 3 ; 4 5 6 ; 7 8 9]

[i, j] = find (A > 5)


i= j=

3 1
3 2
2 3
3 3
Special Variables
• ans - default name for results
• pi - pi
• eps - “help eps”
• flops - count floating point ops
• inf - Infinity, e.g. 1/0
• NaN - Not a number, e.g. 0/0
• i,j - root minus one
• why - why not ?
LOGO Command
The ‘PLOT’ Command (1)
>> X = linspace(0, 2*pi, 30);
>> Y = sin(X);
>> plot(X,Y)

>> Z = cos(X);
>> plot(X,Y,X,Z);
The ‘PLOT’ Command (2)
>> W = [Y ; Z]
>> plot (X,W)

Rotate by 90 degrees
>> plot(W,X)
The Meditations of
Matlab Aurelius
The ‘PLOT’ Command (1)
>> X = linspace(0, 2*pi, 30);
>> Y = sin(X);
>> plot(X,Y)

>> Z = cos(X);
>> plot(X,Y,X,Z);
The ‘PLOT’ Command (2)
>> W = [Y ; Z]
>> plot (X,W)

Rotate by 90 degrees
>> plot(W,X)
PLOT Options
>> plot(X,Y,’g:’)
>> plot(X,Y,’r-’)
>> plot(X,Y,’ko’)

>> plot(X,Y,’g:’,X,Z,’r-’,X,Y,’wo’,X,Z,’c+’);
PLOT Options
>> grid on
>> grid off
>> xlabel(‘this is the x axis’);
>> ylabel(‘this is the y axis’);
>> title(‘Title of Graph’);
>> text(2.5, 0.7, ’sin(x)’);
>> legend(‘sin(x)’, ‘cos(x)’)
SUBPLOT Command
• Subplot(m,n,p)
– creates a m-by-n matrix in and plots in the pth
plane.
subplot(2,2,1)
plot(X,Y)
subplot(2,2,2)
plot(X,Z)
subplot(2,2,3)
plot( X,Y,X,Z)
subplot(2,2,4)
plot(W,X)
Specialised matrices
• compan • Companion matrix
• gallery • Higham test matrices
• hadamard • Hadamard matrix
• hankel • Hankel matrix
• pascal • Pascal matrix.
• rosser • Classic symmetric
eigenvalue test problem
• vander
• Vandermonde matrix
• wilkinson
• Wilkinson's eigenvalue
test matrix
Polynomials
Polynomials are represented as
row vectors with its coefficients in
descending order, e.g.
X4 - 12X3 + 0X2 +25X + 116

p = [1 -12 0 25 116]
Polynomials
The roots of a polynomial are found as
follows

r = roots(p)

roots are represented as a column vector


Polynomials
Generating a polynomial from its roots

polyans = poly(r)

includes imaginary bits due to rounding

mypolyans = real(polyans)
Polynomial Addition/Sub
• a = [1 2 3 4]
• b = [1 4 9 16]

• c=a+b
• d=b-a
Polynomial Addition/Sub
• What if two polynomials of different
order ?
X3 + 2X2 +3X + 4
X6 + 6X5 + 20X4 - 52X3 + 81X2 +96X + 84
• a = [1 2 3 4]
• e = [1 6 20 52 81 96 84]
• f = e + [0 0 0 a] or f = e + [zeros(1,3) a]
Polynomial Multiplication
• a = [1 2 3 4]
• b = [1 4 9 16]
Perform the convolution of two arrays !
• g = conv(a,b)
g=
1 6 20 50 75 84 64
Polynomial Division
• a = [1 2 3 4]
• g = [1 6 20 50 75 84 64]
Perform the deconvolution of two arrays !
[q,r] = deconv(g, a)
q= {quotient}
1 4 9 16
r= {remainder}
00000000
Polynomial Differentiation
• f = [1 6 20 48 69 72 44]

• h = polyder(f)

h=
6 30 80 144 138 72
Polynomial Evaluation
x = linspace(-1,3)

p = [1 4 -7 -10]

v = polyval(p,x)

plot (x,v), title(‘Graph of P’)


Rational Polynomials
• Rational polynomials, seen in Fourier,
Laplace and Z transforms
• We represent them by their numerator and
denominator polynomials
• we can use residue to perform a partial
fraction expansion
• We can use polyder with two inputs to
differentiate rational polynomials
An Anthropologist on Matlab
Data Analysis Functions (1)
• corrcoef(x) • Correlation coefficients
• cov(x) • Covariance matrix
• cplxpair(x) • complex conjugate pairs
• cross(x,y) • vector cross product
• cumprod(x) • cumulative prod of cols
• cumsum(x) • cumulative sum of cols
• del2(A) • five-point discrete Laplacian
• diff(x) • diff between elements
• dot(x,y) • vector dot product
• gradient(Z, dx, dy) • approximate gradient
Data Analysis Functions (2)
• histogram(x) • Histogram or bar chart
• max(x), max(x,y) • max component
• mean(x) • mean of cols
• median(x) • median of cols
• min(x), min(x,y) • minimum component
• prod(x) • product of elems in col
• sort(x) • sort cols (ascending)
• std(x) • standard dev of cols
• subspace(A,B) • angle between subspaces
• sum(x) • sum of elems per col
Symbolic Math Toolbox
Symbolic Expressions

• ‘1/(2*x^n)’
• cos(x^2) - sin(x^2)
• M = sym(‘[a , b ; c , d]’)
• f = int(‘x^3 / sqrt(1 - x)’, ‘a’, ‘b’)
Symbolic Expressions
diff(‘cos(x)’)
ans =
-sin(x)

det(M)
ans =
a*d - b * c
Symbolic Functions
• numden(m) - num & denom of polynomial
• symadd(f,g) - add symbolic polynomials
• symsub(f,g) - sub symbolic polynomials
• symmul(f,g) - mult symbolic polynomials
• symdiv(f,g) - div symbolic polynomials
• sympow(f,’3*x’) - raise f^3
Advanced Operations
• f = ‘1/(1+x^2)’
• g = ‘sin(x)’

compose(f,g) % f(g(x))
ans=
1/(1+sin(x)^2)
Advanced Operations
• finverse(x^2)
ans =
x^(1/2)

• symsum(‘(2*n - 1) ^ 2’, 1, ‘n’)


ans =
11/3*n + 8/3-4*(n+1)^2 + 4/3*(n+1)^3
Symbolic Differentiation
f = ‘a*x^3 + x^2 + b*x - c’
diff(f) % by default wrt x
ans =
3*a^2 + 2*x + b
diff(f, ‘a’) % wrt a
ans =
x^3
diff(f,’a’,2) % double diff wrt a
ans =
0
Symbolic Integration
f = sin(s+2*x)
int(f)
ans =
-1/2*cos(s+2*x)
int(f,’s’)
ans =
-cos(s+2*x)
int(f, ‘s’, pi/2,pi)
ans=
-cos(s)
Comments &Punctuation (1)
• All text after a percentage sign (%) is
ignored
>> % this is a comment

• Multiple commands can be placed on one


line separated by commas (,)
>> A = magic(4), B = ones(4), C = eye(4)
Comments &Punctuation (2)
• A semicolon may be also used, either after a
single command or multiple commands
>> A = magic(4); B = ones(4); C = eye(4);
• Ellipses (…) indicate a statement is
continued on the next line
A = B/…
C
SAVE Command (1)
>> save
• Store all the variables in binary format in a file
called matlab.mat
>> save fred
• Store all the variables in binary format in a file
called fred.mat
• >> save a b d fred
• Store the variables a, b and d in fred.mat
SAVE Command (2)
>> save a b d fred -ascii
• Stores the variables a, b and d in a file called
fred.mat in 8-bit ascii format
>> save a b d fred -ascii -double
• Stores the variables a, b and d in a file called
fred.mat in 16-bit ascii format
Load Command
• Create a text file called mymatrix.dat with
– 16.0 3.0 2.0 13.0
– 5.0 10.0 11.0 8.0
– 9.0 6.0 7.0 12.0
– 4.0 15.0 14.0 1.0

• “load mymatrix.dat”, create variable


mymatrix
M-Files
• To store your own MatLab commands in a
file, create it as a text file and save it with a
name that ends with “.m”
• So mymatrix.m
A = […
16.0 3.0 2.0 13.0
5.0 10.0 11.0 8.0
9.0 6.0 7.0 12.0
4.0 15.0 14.0 1.0];

• type mymatrix
IF Condition

if condition If x = 2
{commands} output = ‘x is even’
end end
WHILE Loop

X = 10;
while condition count = 0;
{commands} while x > 2
end x = x / 2;
count = count +
1;
end
FOR Loop
for n = 1:10
x(n) = sin(n);
end
for x=array
{commands} A = zeros(5,5); %
end prealloc
for n = 1:5
for m = 5:-1:1
A(n,m) = n^2 + m^2;
end
disp(n)
end
Creating a function
function a = gcd(a,b)
% GCD Greatest common divisor
% gcd(a,b) is the greatest common divisor of
% the integers a and b, not both zero.
a = round(abs(a)); b = round(abs(b));
if a == 0 & b == 0
error('The gcd is not defined when both numbers are zero')
else
while b ~= 0
r = rem(a,b);
a = b; b = r;
end
end
Quick Exercise (!)
• Consider Polynomial Addition again :
how would you write a program that takes in two
polynomials and irrespective of their sizes it adds the
polynomials together ? Given that the function length(A)
returns the length of a vector.
Answers on a postcard to : [email protected]

oh, and while you’re here anyhow, if you have a browser


open, please go to the following sites :
http://www.the hungersite.com
http://www.hitsagainsthunger.com
Flash Gordon
and the Mud Men of Matlab
Quick Exercise (!)
• Consider Polynomial Addition again :
how would you write a program that takes in two
polynomials and irrespective of their sizes it adds the
polynomials together ? Given that the function length(A)
returns the length of a vector.
Answers on a postcard to : [email protected]

oh, and while you’re here anyhow, if you have a browser


open, please go to the following sites :
http://www.the hungersite.com
http://www.hitsagainsthunger.com
Creating Programs
Title : Program.m

function out = program(inputs)


% PROGRAM
<code>
Know Thyself
• Where am I ?
– pwd
• Get me onto the hard disk
– cd C:
• Where am I now ?
– pwd
• Get me to where I know
– cd ..
Quick Answer (!)
function c = mypoly(a,b)
% MYPOLY Add two polynomials of variable lengths
% mypoly(a,b) add the polynomial A to the polynomial
% B, even if they are of different length
%
% Author: Damian Gordon
% Date : 3/5/2001
% Mod'd : x/x/2001
%
c = [zeros(1,length(b) - length(a)) a] + [zeros(1, length(a) -

length(b)) b];
Recursion
function b = bart(a)
%BART The Bart Simpson program writes on the blackboard
% program, Bart writes the message a few times
% and then goes home to see the Simpsons
if a == 1
disp('I will not....');
else
disp('I will not skateboard in the halls');
bart(a - 1);
end
Curve Fitting
• What is the best fit ?
– In this case least squares curve fit
• What curve should be used ?
– It depends...
POLYFIT : Curve Fitting
• polyfit(x,y,n) - fit a polynomial

• x,y - data points describing the curve


• n - polynomial order
• n = 1 -- linear regression
• n = 2 -- quadratic regression
Curve Fitting Example
x = [0 .1 .2 .3 .4 .5 .6 .7 .8 .9 1];
y = [-.447 1.978 3.28 6.16 7.08 7.34 7.66 9.56 9.48
9.30 11.2];
polyfit(x,y,n)
• n=1
p = 10.3185 1.4400
• n=2
p = -9.8108 20.1293 -0.0317
y = -9.8108x2 + 20.1293x - 0.0317
Curve Fitting Example
xi = linspace(0,1,100);

z = polyval(p,xi)

plot(x,y,'o',x,y,xi,z,':');
Interpolation - 1D
• t = interp1(x,y,.75)
t=

9.5200

also
• interp1(x,y,.75,’spline’)
• interp1(x,y,.75,’cubic’)
Interpolation - 2D
• interp2(x,y,Z,xi,yi,TYPE)

TYPE =

'nearest' - nearest neighbor interpolation


'linear' - bilinear interpolation
'cubic' - bicubic interpolation
'spline' - spline interpolation
Fourier Functions
• fft • Fast fourier transform
• fft2 • 2-D fft
• ifft • Inverse fft
• ifft2 • 2-D Inverse fft
• filter • Discrete time filter
• filter2 • 2-D discrete tf
• fftshift • shift FFT results so -ve
freqs appear first
Tensors
• See ‘Programs’

• ‘Tensors’

• ‘Tensors.html’
3D Graphics
T = 0:pi/50:10*pi;
plot3(sin(t), cos(t), t);
3D Graphics
title('Helix'), xlabel('sin(t)'),
ylabel('cos(t)'), zlabel('t')
grid
3D Graphics
• Rotate view by elevation and azimuth

view(az, el);

view(-37.5, 60);

You might also like