MatLab Notes
MatLab Notes
MatLab Notes
Version 3.1
David F. Griffiths
formerly of
Department of Mathematics
The University of Dundee
Dundee DD1 4HN
Scotland, UK
With additional material by Ulf Carlsson
Department of Vehicle Engineering
KTH, Stockholm, Sweden
Thanks to Dr Anil Bharath, Imperial College,
Dr Chris Gordon, University of Christchurch,
Prof. Dr. Markus Kottmann, HSR Hochschule f
ur Technik, Switzerland
for their contributions to this revised version.
c
Copyright
1996
by David F. Griffiths. Amended October, 1997, August 2001, September 2005,
October 2012, March 2015.
This introduction may be distributed provided that it is not be altered in any way and that its
source is properly and completely specified.
Contents
1 MATLAB
2 Starting Up
3 Matlab as a Calculator
5 Variables
5.1 Variable Names . . . . . . . . . .
3
3
6 Suppressing output
7 BuiltIn Functions
7.1 Trigonometric Functions . . . . .
7.2 Other Elementary Functions . . .
8 Vectors
8.1 The Colon Notation . . . .
8.2 Extracting Parts of Vectors
8.3 Column Vectors . . . . . . .
8.4 Transposing . . . . . . . . .
.
.
.
.
.
.
.
.
.
.
.
.
9 Keeping a record
10 Script Files
11 Keyboard Accelerators
12 Arithmetic with Vectors
12.1 Inner Product (*) . . . . .
12.2 Elementwise Product (.*)
12.3 Elementwise Division (./)
12.4 Elementwise Powers (.^) .
13 Plotting Functions
13.1 PlottingTitles & Labels
13.2 Grids . . . . . . . . . . . .
13.3 Line Styles & Colours . .
13.4 Multiplots . . . . . . . .
13.5 Hold . . . . . . . . . . . .
13.6 Hard Copy . . . . . . . .
13.7 Subplot . . . . . . . . . .
13.8 Zooming . . . . . . . . . .
13.9 Figure Properties . . . . .
13.10Formatted text on Plots .
13.11Controlling Axes . . . . .
14 Elementwise Examples
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
15 TwoDimensional Arrays
15.1 Size of a matrix . . . . . . . .
15.2 Transpose of a matrix . . . .
15.3 Special Matrices . . . . . . .
15.4 The Identity Matrix . . . . .
15.5 Diagonal Matrices . . . . . .
15.6 Building Matrices . . . . . . .
15.7 Tabulating Functions . . . . .
15.8 Extracting Parts of Matrices
15.9 Elementwise Products (.*) .
15.10Matrixvector products . . .
15.11MatrixMatrix Products . . .
15.12Sparse Matrices . . . . . . . .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
17
18
18
18
19
19
20
20
20
21
21
22
23
23
. . . 24
26
27
28
28
. . . 29
. . . 30
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
31
31
31
32
32
32
32
33
37
38
. . . 39
. . . 39
40
42
MATLAB
These notes provide only a brief glimpse of the (truncated lines are shown with . . . ). Then to
power and flexibility of the Matlab system. For obtain help on Elementary math functions,
a more comprehensive view we recommend the for instance, type
book
>> help elfun
Matlab Guide 2nd ed.
D.J. Higham & N.J. Higham
Clicking on a key word, for example sin will
SIAM Philadelphia, 2005, ISBN:
provide further information together with a link
0-89871-578-4.
to doc sin which provides the most extensive
documentation on a keyword along with examples of its use.
2 Starting Up
Another useful facility is to use the
Matlab can be used in a number of different
lookfor keyword
ways or modes; as an advanced calculator in the
calculator mode, in a high level programming command, which searches the help files for the
language mode and as a subroutine called from keyword. See Exercise 15.1 (page 22) for an
a C-program. More information on the first two example of its use.
of these modes is provided by these notes.
When used in calculator mode all Matlab commands are entered to the command line from
the keyboard at the command line prompt
indicated with >>.
2
Matlab as a Calculator
Command
>>format short
>>format short e
>>format long e
>>format short
>>format bank
Example of Output
31.4162(4decimal places)
3.1416e+01
3.141592653589793e+01
31.4162(4decimal places)
31.42(2decimal places)
The command
>> 2 + 3/4*5
ans =
5.7500
>>
format compact
1. quantities in brackets,
2. powers 2 + 3^2 2 + 9 = 11,
Variables
>> 3-2^4
ans =
3. * /, working left to right (3*4/5=12/5),
-13
>> ans*5
4. + -, working left to right (3+4-5=7-5),
ans =
Thus, the earlier calculation was for 2 + (3/4)*5
-65
by priority 3.
The result of the first calculation is labelled
ans by Matlab and is used in the second cal4 Numbers & Formats
culation, where its value is changed.
We can use our own names to store numbers:
Matlab recognizes several different kinds of numbers
>> x = 3-2^4
x =
Type
Examples
-13
Integer
1362, 217897
>> y = x*5
Real
1.234, 10.76
y =
Suppressing output
7.2
One often does not want to see the result of intermediate calculationsterminate the assign- These include sqrt, exp, log, log10
ment statement or expression with semicolon >> x = 9;
>> sqrt(x),exp(x),log(sqrt(x)),log10(x^2+6)
>> x=-13; y = 5*x, z = x^2+y
ans =
y =
3
-65
ans =
z =
8.1031e+03
104
ans =
>>
1.0986
the value of x is hidden. Note that we can ans =
place several statements on one line, separated
1.9395
by commas or semicolons.
exp(x) denotes the exponential function exp(x) =
Exercise 6.1 In each case find the value of the ex and the inverse function is log:
expression in Matlab and explain precisely the
>> format long e, exp(log(9)), log(exp(9))
order in which the calculation was performed.
ans = 9.000000000000002e+00
i)
-2^3+9
ii)
2/3*3
ans = 9
iii) 3*2/3
iv) 3*4-5^2*2-3
>> format short
v)
(2/3^2*5)*(3-4^3)^2
7
7.1
vi)
3*(3*4-2*5^2-3)
BuiltIn Functions
Trigonometric Functions
Vectors
>> w = [1 2 3], z = [8 9]
>> cd = [2*z,-w], sort(cd)
These come in two flavours and we shall first de- w =
scribe row vectors: they are lists of numbers
1
2
3
separated by either commas or spaces. The z =
number of entries is known as the length of
8
9
the vector and the entries are often referred to cd =
as elements or components of the vector.
16
18
-1
-2
-3
The entries must be enclosed in square brack- ans =
ets.
-3
-2
-1
16
18
>> v = [ 1 3, sqrt(5)]
v =
1.0000
3.0000
>> length(v)
ans =
3
2.2361
8.1
>> 1:4
We can do certain arithmetic operations with ans =
vectors of the same length, such as v and v3 in
1
the previous section.
>> 3:7
ans =
>> v + v3
3
ans =
>> 1:-1
4.0000
7.0000
7.2361
ans =
>> v4 = 3*v
[]
v4 =
3.0000
9.0000
6.7082
>> v5 = 2*v -3*v3
v5 =
-7.0000
-6.0000 -10.5279
>> v + v2
??? Error using ==> +
Matrix dimensions must agree.
0.5200
-2.0000
8.2
and does not distinguish between row and column vectors (compare with size described in
15.1). The size might be needed to determine the last element in a vector but this can
be found by using the reserved word end:
-3
-5
8.4
-3
We can convert a row vector into a column vector (and vice versa) by a process called transposing which is denoted by .
-7
8.3
Transposing
>> w, w, c, c
w =
1
-2
3
ans =
1
-2
3
ans =
1.0000
3.0000
2.2361
ans =
1.0000
3.0000
>> t = w + 2*c
t =
3.0000
4.0000
>> T = 5*w-2*c
T =
3.0000
-16.0000
10.5279
Column Vectors
2.2361
7.4721
2.0000 - 2.0000i
>> x.
ans =
1.0000 + 3.0000i
2.0000 - 2.0000i
>> whos
They can also be seen in the Workspace pane
of the main window. See help whos and help
save.
>> whos
Size
1 by
1 by
1 by
1 by
Elements
1
1
3
3
2
2
2
2
Bytes
8
24
16
16
Density
Full
Full
Full
Full
Complex
No
No
No
No
Keeping a record
10
Script Files
cntrl
cntrl
cntrl
cntrl
cntrl
a
e
f
b
d
11
12
Keyboard Accelerators
12.1
v1
v2
v = . .
u = [u1 , u2 , . . . , un ] ,
..
vn
The inner product is defined by multiplying the
corresponding elements together and adding the
results to give a single number (inner).
uv =
n
X
i=1
ui vi .
20
>> [ sqrt(u*u), norm(u)]
For example, if u = [10, 11, 12], v = 21 ans =
22
19.1050
19.1050
then n = 3 and
where norm is a builtin Matlab function that
uv = 1020+(11)(21)+12(22) = 167. accepts a vector as input and delivers a scalar
as output. It can also be used to compute other
We can perform this product in Matlab by
norms: help norm.
>> u = [ 10, -11, 12], v = [20; -21; -22]
>> prod = u*v % row times column vector Exercise 12.1 The angle, , between two column vectors x and y is defined by
Suppose we also define a row vector w and a
column vector z by
x0 y
cos =
.
kxk kyk
>> w = [2, 1, 3], z = [7; 6; 5]
w =
Use this formula to determine the cosine of the
2
1
3
angle between
z =
7
x = [1, 2, 3]0 and y = [3, 2, 1]0 .
6
Hence show that the angle is 44.4153degrees.
5
and we wish to form the inner products of u
with w and v with z.
>> u*w
??? Error using ==> *
Inner matrix dimensions must agree.
12.2
% u is a row vector
u v = [u1 v1 , u2 v2 , . . . , un vn ].
>> u.*w
ans =
20 -11 36
>> u.*v
ans =
200 231 -264
>> v.*z
U = [6, 2, 4],
3
4
W =
2
6
ans =
140
-126
-110
Perhaps the most common use of the Hadamard
product is in the evaluation of mathematical
expressions so that they may be plotted.
V = [3, 2, 3, 0],
, Z = 2
2
7
12.3
>> y = x.*sin(pi*x)
y =
0
0.1768
0.5000
0.5303
0.0000
>> a./a
ans =
1
1
1
1
1
>> c = -2:2, a./c
c =
-2
-1
0
1
2
Warning: Divide by zero
ans =
-0.5000 -2.0000 Inf
4.0000
12.4
12
26
13
16
>> 1/x
??? Error using ==> /
Matrix dimensions must agree.
>> 1./x
ans =
10
100
1000
10000
so 1./x works, but 1/x does not.
11
49
10
1000
13
28561
13
Plotting Functions
13.2
Grids
13.3
>> plot(x,y,r--x)
The third argument is a string comprising characters that specify the colour (red), the line
style (dashed) and the symbol (x) to be drawn
at each data point. The order in which they
appear is unimportant and any, or all, may be
omitted. The options for colours, styles and
symbols include:
y
m
c
r
g
b
w
k
Colours
yellow
magenta
cyan
red
green
blue
white
black
Line
.
o
x
+
*
:
-.
--
Styles/symbols
point
circle
x-mark
plus
solid
star
dotted
dashdot
dashed
13.4
13.5
Hold
A call to plot clears the graphics window before plotting the current graph. This is not convenient if we wish to add further graphics to the
figure at some later stage. To stop the window
being cleared:
>> plot(x,y,r-), hold on
>> plot(x,y,gx), hold off
Multiplots
Several graphs may be drawn on the same figure hold on holds the current picture; hold off
releases it (but does not clear the window, which
as in
can be done with clf). hold on its own tog>> plot(x,y,k-,x,cos(3*pi*x),g--)
gles the hold state.
A descriptive legend may be included with
13.6
Hard Copy
plot(x,y,k-,x,cos(3*pi*x),g--)
legend(Sin curve,Cos curve)
title(Multi-plot)
xlabel(x axis), ylabel(y axis)
grid
13.7
Subplot
13.8
13.9
Figure Properties
All plot properties can be edited from the Figure window by selecting the Edit and Tools
menus from the toolbar. For instance, to change
the linewidth of a graph, click Edit and choose
Figure Properties... from the menu. Clicking on the required curve will display its attributes which can be readily modified.
One of the shortcomings of editing the figure
window in this way is the difficulty of reproducing the results at a later date. The recommended alternative involves using commands
that directly control the graphics properties.
The current setting of any plot property can be
determined by first obtaining its handle number, which is simply a real number that we
save to a named variable:
Zooming
14
[0 0 0]
--
1
o
6
[1 2 3]
YData:
ZData:
[27 8 1]
[1x0 double]
close all
figure(1);
set(0,defaultaxesfontsize,12)
set(0,defaulttextfontsize,16)
>> x = 0:.01:1; y=sin(3*pi*x);
set(0,defaulttextinterpreter,latex)
>> plot(x,y,k-,x,cos(3*pi*x),g--)
N = 100; n = 1:N;
>> legend(Sin curve,Cos curve)
y = (1+1./n).^n;
>> title(Multi-plot )
>> xlabel(x axis), ylabel(y axis) subplot(2,1,1)
plot(n,y,.,markersize,8)
>> set(gca,fontsize,16,...
hold on
ytick,-1:.5:1);
axis([0 N,2 3])
redraw Fig. 3 and the last line sets the font plot([0 N],[1, 1]*exp(1),--)
size to 16points and changes the tick-marks on text(40,2.4,$y_n = (1+1/n)^n$)
the y-axis to 1, 0.5, 0, 0.5, 1see Fig. 4. The text(10,2.8,y = e)
... in the penultimate line tell Matlab that the xlabel($n$), ylabel($y_n$)
line is split and continues on the next line.
The results are shown in the upper part of Fig. 5.
13.10
It is possible to typeset simple mathematical The salient features of these commands are
expressions (using LATEX commands) in labels,
1. The set commands in lines 34 increase
legends, axes and text. We shall give two illusthe size of the default font size used for
trations.
15
13.11
Controlling Axes
4. The axis command changes the dimen- The look of a graph can be changed by using
sions of the plotting area to be 0 x N the axis command. We have already seen in
and 2 y 3.
Example 13.1 how the plotting area can be
The axis command has four parameters, changed.
the first two are the minimum and max- axis equal is required in order that a circle
imum values of x to use on the axis and does not appear as an ellipse
the last two are the minimum and maxi>> clf, N = 100; t = (0:N)*2*pi/N;
mum values of y.
>> x = cos(t); y = sin(t);
5. The command text(40,2.4,string ) >> plot(x,y,-,0,0,.);
prints string at the location with coordi- >> set(gca,ytick,-1:.5:1)
>> axis equal
nates (40 2.4).
6. The string y_n gives subscripts: yn , while See Fig. 6. We recommend looking at help
axis and experimenting with the commands
x^3 gives superscripts: x3 .
axis equal, axis off, axis square,
Example 13.2 Draw a graph the function y = axis normal, axis tight in any order.
2
e3x sin3 (3x) on the interval 2 x 2.
The appropriate commands are included in the
script file for the previous example (so the default values continue to operate):
subplot(2,1,2)
x = -2:.01:2;
y = exp(-3*x.^2).*sin(8*pi*x).^3;
plot(x,y,r-,linewidth,1)
xlabel($x$), ylabel($y$)
text(-1.95,.75,$ \exp(-40x^2)\sin^3(8\pi x)$)
print -djpeg90 eplot1
The results are shown in the lower part of Fig. 5.
1. sin3 8x is typeset by the LATEX string Fig. 6: Use of axis equal to get a circle to
$\sin^3 8\pi x$ and translates into the appear correctly.
Matlab command sin(8*pi*x).^3the
position of the exponent is different.
16
14
Elementwise Examples
y=
iii)
v=
sin x
x
x2 +1
x2 4
ii)
u=
iv)
w=
and
1
(x1)2 + x
(10x)1/3 2
(4x2 )1/2
z = sin2 x/(x2 + 3)
for 0 x 10.
>> x = 0:0.1:10;
>> y = sin(x)./x;
>> subplot(221), plot(x,y), title((i))
Warning: Divide by zero
>> u = 1./(x-1).^2 + x;
>> subplot(222),plot(x,u), title((ii))
Warning: Divide by zero
>> v = (x.^2+1)./(x.^2-4);
>> subplot(223),plot(x,v),title((iii))
Warning: Divide by zero
>> w = ((10-x).^(1/3)-1)./sqrt(4-x.^2);
Warning: Divide by zero
>> subplot(224),plot(x,w),title((iv))
15
TwoDimensional Arrays
subplot(222),axis([0 10 0 10])
grid
grid
hold on
plot(x,v,--), hold off,
plot(x,y,:)
17
15.1
15.2
Size of a matrix
Transpose of a matrix
We can get the size (dimensions) of a matrix Transposing a vector changes it from a row to a
column vector and vice versa (see 8.4)recall
with the command size
that is also performs the conjugate of complex
>> size(A), size(x)
numbers. The extension of this idea to matrices
ans =
is that transposing interchanges rows with the
2
3
corresponding columns: the 1st row becomes
ans =
the 1st column, and so on.
3
1
>> D, D
>> size(ans)
D =
ans =
1
2
3
4
5
1
2
6
7
8
9
10
So A is 2 3 and x is 3 1 (a column vector).
11
13
15
17
19
The last command size(ans) shows that the ans =
value returned by size is itself a 1 2 matrix
1
6
11
(a row vector). We can save the results for use
2
7
13
in subsequent calculations.
3
8
15
4
9
17
>> [r c] = size(A), S = size(A)
5
10
19
r =
>> size(D), size(D)
3
ans =
c =
3
5
2
ans =
S =
5
3
3
2
Arrays can be reshaped. A simple example is:
15.3
Special Matrices
>> A(:)
ans =
5
1
7
-3
9
-7
which converts A into a column vector by stack- zeros(m,n) gives an m n matrix of 0s,
ing its columns on top of each other. This could >> Z = zeros(2,3), zeros(size(P))
also be achieved using reshape(A,6,1). The Z =
command
0
0
0
0
0
0
>> reshape(A,3,2)
ans
=
ans =
0
0
5
-3
18
0
0
0
0
15.6
Building Matrices
K(1:2,end-1:end)
ans =
3
4
7
8
15.7
Tabulating Functions
>> x = 0:0.1:0.5;
>> y = 4*sin(3*x); u = 3*sin(4*x);
>> [ x y u]
ans =
0
0
0
0.1000
1.1821
1.1683
so we have added an extra column (x) to C in
0.2000
2.2586
2.1521
order to form G and have stacked A and B on
0.3000
3.1333
2.7961
top of each other to form H.
0.4000
3.7282
2.9987
0.5000
3.9900
2.7279
>> J = [1:4; 5:8; 9:12; 20 0 5 4]
J =
Note the use of transpose () to get column
1
2
3
4
vectors. (we could replace the last command
5
6
7
8
by [x; y; u;])
9
10
11
12
We could also have done this more directly:
20
0
5
4
>> x = (0:0.1:0.5);
>> [x 4*sin(3*x) 3*sin(4*x)]
15.8
2
6
3
7
4
8
9
10
11
12
20
0
5
4
>> J(1,1)
ans =
1
>> J(2,3)
ans =
7
>> J(4,3)
ans =
5
>> J(4,5)
??? Index exceeds matrix dimensions.
>> J(4,1) = J(1,1) + 6
J =
1
2
3
4
5
6
7
8
9
10
11
12
7
0
5
4
>> J(1,1) = J(1,1) - 3*J(1,2)
J =
-5
2
3
4
5
6
7
8
9
10
11
12
7
0
5
4
10
11
15.9
>> A, B
A =
5
7
9
1
-3
-7
B =
-1
2
5
9
0
5
>> A.*B
ans =
-5
14
45
9
0
-35
>> A.*C
??? Error using ==> .*
Matrix dimensions must agree.
>> A.*C
ans =
0
21
36
1
6
-14
Elementwise powers .^ and division ./ work in
an analogous fashion.
15.10
Matrixvector products
21
"
#
8
5
7
9
Ax =
4
1 3 7
1
5 8 + 7 (4) + 9 1
=
1 8 + (3) (4) + (7) 1
21
=
13
It is somewhat easier in Matlab:
>> A = [5 7 9; 1 -3 -7]
A =
5
7
9
1
-3
-7
>> x = [8; -4; 1]
x =
8
-4
1
>> A*x
ans =
21
13
(m n) times (n 1) (m 1).
>> x*A
??? Error using ==> *
Inner matrix dimensions must agree.
Unlike multiplication in scalar arithmetic, A*x
is not the same as x*A.
15.11
MatrixMatrix Products
..
A = m rows
, B=
|
{z
}
p
columns
22
15.12
Sparse Matrices
must all have the same length and only the first
n 1 terms of l are used while the last n 1
terms of u are used. spdiags places these vectors in the diagonals labelled -1, 0 and 1 (0
defers to the leading diagonal, negatively numbered diagonals lie below the leading diagonal,
etc.)
1 n1
2
2
n2
3
3
n3
B=
.
..
..
..
.
.
n + 1 n 1 1
n n
16
equations.
Ax = b
or, componentwise, as
ii) x = A \ b,
24
It may be shown that the required solution satisfies the socalled normal equations
Cx = d, where C = AT A and d = AT b.
It is wellknown that the solution of this system
can be overwhelmed by numerical rounding error in practice unless great care is taken in its
solution (a large part of the difficulty is inherent in the loss of information in computing the
matrixmatrix product AT A). As in the solution of square systems of linear equations, special techniques have been developed to address
these issues and they have been incorporated
into the Matlab routine library.
This means that a direct solution to the problem of overdetermined equations is available in
Matlab through its left division operator \.
When the matrix A is not square, the operation
Deformation x [cm]
0.001
0.011
0.013
0.30
0.75
Using the quadratic force-deformation relationship together with the experimental data yields
an overdetermined system of linear equations
and the components of the residual are given
by
x = A\b
r1
= x1 k1 + x21 k2 F1
r2
= x2 k1 + x22 k2 F2
r3
= x3 k1 + x23 k2 F3
r4
= x4 k1 + x24 k2 F4
r5 = x5 k1 + x25 k2 F5 .
automatically gives the least squares solution
to Ax = b. This is illustrated in the next ex- These lead to the matrix and vector definitions
ample.
x1 x21
F1
x2 x22
F2
Example 16.1 A spring is a mechanical ele
assigns the value A to the 1-by-1 character array t1. The assignment,
>>
>>
>>
>>
>>
>>
>> t2 = BCDE
t2 =
BCDE
>> size(t2)
ans =
1
4
17
The ability to process text in numerical processing is useful for the input and output of
;...
n = 3, 4, 5, . . . .
( 5 1)/2 = 0.6180 . . ..
>> F(1) = 0; F(2) = 1;
>> for i = 3:20
F(i) = F(i-1) + F(i-2);
end
>> plot(1:19, F(1:19)./F(2:20),o )
>> hold on, xlabel(n)
>> plot(1:19, F(1:19)./F(2:20),- )
>> legend(Ratio of terms f_{n-1}/f_n)
>> plot([0 20], (sqrt(5)-1)/2*[1,1],--)
18
Loops
11
19
5.4
6]
S20
S21
..
.
=
=
1+
1+
1
22
1
22
+
+
1
32
1
32
+ +
+ +
1
202
1
202
1
212
S100
1+
1
22
1
32
+ +
1
202
1
212
+ +
1
1002
>> S = zeros(100,1);
The first two instances illustrate that there can
>> S(20) = sum(1./(1:20).^2);
be considerable variation in successive calls to
>> for n = 21:100
the same operations. The third instance shows
>>
S(n) = S(n-1) + 1/n^2;
that the elapsed time can be assigned to a vari>> end
able.
>> clf; plot(S,.,[20 100],[1,1]*pi^2/6,-)
>> axis([20 100 1.5 1.7])
20 Logicals
>> [ (98:100) S(98:100)]
ans =
Matlab represents true and false by means of
98.0000
1.6364
the integers 0 and 1.
99.0000
1.6365
true = 1,
false = 0
100.0000
1.6366
If at some point in a calculation a scalar x, say,
where a column vector S was created to hold the has been assigned a value, we may make certain
answers. The first sum was computed directly logical tests on it:
x == 2 is x equal to 2?
using the sum command then each succeeding
x ~= 2 is x not equal to 2?
sum was found by adding 1/n2 to its predex > 2
is x greater than 2?
cessor. The little table at the end shows the
x < 2
is x less than 2?
values of the last three sumsit appears that
x >= 2 is x greater than or equal to 2?
they are approaching a limit (the value of the
x <= 2 is x less than or equal to 2?
limit is 2 /6 = 1.64493 . . .).
Pay particular attention to the fact that the
A more elegant solution is given by
test for equality involves two equal signs ==.
>> n = 1:100;
>> x = pi
>> S = cumsum(1./n.^2);
x =
where cumsum calculates the cumulative sum of
3.1416
entries in a vector.
>> x ~= 3, x ~= pi
ans =
Exercise 18.1 Repeat Example 18.2 to include
1
181 sums (i.e., the final sum should include the
ans
=
term 1/2002 .)
0
19
Timing
5.0000
1.0000
y =
0
1
1
1
1
1
0
0
1
0
1
0
ans =
3.1416
-3.0000
x < 4
5.0000
-1.0000
1
0
0
0
x == -3
20.1
While Loops
There are some occasions when we want to repeat a section of Matlab code until some logical
1
1
condition is satisfied, but we cannot tell in ad1
0
vance how many times we have to go around
As one might expect, & represents and and (not the loop. This we can do with a while...end
so clearly) the vertical bar | means or; also ~ construct.
means not as in ~= (not equal), ~(x>0), etc.
Example 20.1 What is the greatest value of n
that can be used in the sum
>> x > 3 | x == -3 | x <= -5
ans =
12 + 22 + + n2
0
1
1
1
1
0
and get a value of less than 100?
One of the uses of logical tests is to mask out
certain elements of a matrix.
>> x, L = x >= 0
x =
-2.0000
3.1416
-5.0000
-3.0000
L =
0
1
1
0
1
1
>> pos = x.*L
pos =
0
3.1416
0
0
>> S = 1; n = 2;
>> while S+ n^2 < 100
S = S + n^2; n = n+1;
end
>> [n-1, S]
ans =
6
91
5.0000
-1.0000
Exercise 20.1 Replace 100 in the previous example by 10 and work through the lines of code
by hand. You should get the answers n = 2 and
S = 5.
Method 1:
>> x = zeros(1,20); x(1) = pi/4;
>> n = 1; d = 1;
>> while d > 0.001
n = n+1; x(n) = cos(x(n-1));
d = abs( x(n) - x(n-1) );
end
n,x(1:n)
n =
14
x =
Columns 1 through 6
0.7854 0.7071 0.7602 0.7247 0.7487 0.7326
Columns 7 through 12
0.7435 0.7361 0.7411 0.7377 0.7400 0.7385
Columns 13 through 14
0.7395 0.7388
20.2
if...then...else...end
>> if a >= c
b = sqrt(a^2 - c^2)
elseif a^c > c^a
30
ans =
-0.5664
b = c^a/a^c
else
b = a^c/c^a
end
b =
0.2347
-0.1416
0.1416
0.5664
21.2
Exercise 20.3 Which of the above statements The sum applied to a vector adds up its components (as in sum(1:10)) while, for a matrix,
assigned a value to b?
it adds up the components in each column
and returns a row vector. sum(sum(A)) then
The general form of the if statement is
sums all the entries of A.
if logical test 1
>> A = [1:3; 4:6; 7:9]
Commands to be executed if test 1
A =
is true
1
2
3
elseif logical test 2
4
5
6
Commands to be executed if test 2
7
8
9
is true but test 1 is false
>> s = sum(A), ss = sum(sum(A))
..
.
s =
12
15
18
end
ss =
45
21
x = pi/4*(1:3);
>> A=[sin(x),sin(2*x),sin(3*x)]/sqrt(2)
21.1 Rounding Numbers
>> A =
0.5000
0.7071
0.5000
There are a variety of ways of rounding and
0.7071
0.0000
-0.7071
chopping real numbers to give integers. Use the
0.5000
-0.7071
0.5000
definitions given in the table in 26 on page 42
in order to understand the output given below:
>> s1 = sum(A.^2), s2 = sum(sum(A.^2))
s1 =
>> x = [-4 -1 1 4]*pi
1.0000
1.0000
1.0000
x =
-12.5664
-3.1416
3.1416
12.5664 s2 =
3.0000
>> round(x)
ans =
The sums of squares of the entries in each col-13
-3
3
13
umn of A are equal to 1 and the sum of squares
>> fix(x)
of
all the entries is equal to 3.
ans =
-12
-3
3
12
>> A*A
>> floor(x)
ans =
ans =
1.0000
0
0
-13
-4
3
12
0
1.0000
0.0000
>> ceil(x)
0
0.0000
1.0000
ans =
>> A*A
-12
-3
4
13
ans =
>> sign(x), rem(x,3)
1.0000
0
0
ans =
0
1.0000
0.0000
-1
0
1
1
1
0
0.0000
1.0000
31
0
0.0555
-0.2220
21.4
Random Numbers
The function rand(m,n) produces an mn matrix of random numbers, each of which is in the
range 0 to 1. rand on its own produces a single
random number.
>> y = rand, Y = rand(2,3)
y =
0.9191
Y =
0.6262
0.1575
0.2520
0.7446
0.7764
0.6121
0
0.0555
-0.2220
Repeating these commands will lead to different answers. Example 22.2 gives an illustration
of the use of random numbers.
32
22
Function mfiles
2
9
1. Decide on a name for the function, making sure that it does not conflict with a
name that is already used by Matlab. In
this example the name of the function is
to be area, so its definition will be saved
in a file called area.m
= find(A <= 0)
1
2
8
9
>> A(n)
ans =
-2
0
-1
0
>> s
??? Undefined function or variable s.
34
fn = fn1 + fn2 ,
n = 3, 4, 5, . . . .
35
else
f1 = 0; f2 = 1;
Output: fn
for i = 3:n
f = f1 + f2;
We shall describe four possible functions and
f1 = f2; f2 = f;
try to assess which provides the best solution.
end
end
Method 1: File Fib1.m
Method 3: File: Fib3.m
This version makes use of an idea called recursive programmingthe function makes calls
to itself.
function f = Fib1(n)
% Returns the nth number in the
% Fibonacci sequence.
F = zeros(1,n);
F(2) = 1;
for i = 3:n
F(i) = F(i-1) + F(i-2);
end
f = F(n);
function f = Fib3(n)
% Returns the nth number in the
% Fibonacci sequence.
if n==1
f = 0;
elseif
n==2
This code resembles that given in Example 18.1.
f
=
1;
We have simply enclosed it in a function mfile
and given it the appropriate header. The most else
f = Fib3(n-1) + Fib3(n-2);
significant change is the line F=zeros(1,n) which
serves to both define the value of F(1) and to end
allocate sufficient memory to store a vector to
hold the first n Fibonacci numbers. Had we not Method 4: File Fib4.m
The
done this then the length of the vector F would The final version uses matrix powers.
vecfn
be extended on each trip around the loop and
.
tor y has two components, y =
fn+1
more memory would have to be allocated for
its storage. The time penalties this would incur
would not be significant in this example (since, function f = Fib4(n)
with modest values of n, it computes in a tiny % Returns the nth number in the
fraction of a second) but could be important % Fibonacci sequence.
when dealing with large arrays in codes that A = [0 1;1 1];
y = A^n*[1;0];
are run many times over.
f=y(1);
Method 2: File Fib2.m
The first version was rather wasteful of memory, all the entries in the sequence where saved
even though we only required the last one for
output. The second version removes the need
to use a vector.
function f = Fib2(n)
% Returns the nth number in the
% Fibonacci sequence.
if n==1
f = 0;
elseif n==2
f = 1;
36
Time
5.8052 105
2.5534 105
1.4972 101
5.4041 105
23
1.0000
1.5000
2.0000
2.5000
3.0000
Plotting Surfaces
meshgrid(2:.5:4, 1:.5:3);
2.5000
2.5000
2.5000
2.5000
2.5000
3.0000
3.0000
3.0000
3.0000
3.0000
3.5000
3.5000
3.5000
3.5000
3.5000
4.0000
4.0000
4.0000
4.0000
4.0000
1.0000
1.5000
2.0000
2.5000
3.0000
1.0000
1.5000
2.0000
2.5000
3.0000
1.0000
1.5000
2.0000
2.5000
3.0000
1.0000
1.5000
2.0000
2.5000
3.0000
z = f (x, y).
y = 1:0.5:3;
Fig. 9: Plot of Saddle function.
Exercise 23.1 Repeat the previous example replac- >> fmax = max(max(f))
ing mesh by surf and then by surfl. Consult the fmax =
help pages to find out more about these functions.
0.0886
>> kmax = find(f==fmax)
Example 23.2 Plot the surface defined by the func- kmax =
tion
323
2
2
f = xye2(x +y )
539
on the domain 2 x 2, 2 y 2. Find the >> Pos = [X(kmax), Y(kmax)]
values and locations of the maxima and minima of Pos =
-0.5000
0.6000
the function.
0.5000
-0.6000
>> plot(X(kmax),Y(kmax),*)
>> [X,Y] = meshgrid(-2:.1:2,-2:.2:2);
>> text(X(kmax),Y(kmax), Maximum)
>> f = -X.*Y.*exp(-2*(X.^2+Y.^2));
>> figure (1)
See 13.10 for formatting text and labels.
>> mesh(X,Y,f), xlabel(x), ylabel(y), grid
>> figure (2), contour(X,Y,f)
>> xlabel(x), ylabel(y), grid, hold on
24
38
2256
4564
3653
6798
6432
respectively
>> t = data(1:2:length(data));
>> press = data(2:2:length(data));
24.2
Unformatted Files
39
>> xlabel(Time,[s]);
>> ylabel(Acceleration, [m/s^2]);
25
File: specplot.m
GUI for plotting a user selected frequency
spectrumin four alternative plot formats,
lin-lin, lin-log, log-lin and log-log.
Author: U Carlsson, 2001-08-22
40
data = fread(fid,float32);
% Close file
% Create pushbuttons for switching between
fclose(fid);
% four different plot formats. Set up the
% Partition data vector in frequency and
% axis stings.
% pressure vectors
X = Frequency, [Hz];
pdat = data(2:2:length(data));
Y = Pressure amplitude, [Pa];
fdat = data(1:2:length(data));
linlinBtn = uicontrol(style,pushbutton,...% Plot pressure signal in a lin-lin diagram
string,lin-lin,...
plot(fdat,pdat);
position,[200,395,40,20],callback,... % Define suitable axis labels
plot(fdat,pdat);xlabel(X);ylabel(Y););
xlabel(Frequency, [Hz]);
linlogBtn = uicontrol(style,pushbutton,...ylabel(Pressure amplitude, [Pa]);
string,lin-log,...
Executing this GUI from the command line
position,[240,395,40,20],...
(>> specplot) brings the following screen.
callback,...
semilogy(fdat,pdat);xlabel(X);ylabel(Y););
loglinBtn = uicontrol(style,pushbutton,...
string,log-lin,...
position,[280,395,40,20],...
callback,...
semilogx(fdat,pdat);xlabel(X);ylabel(Y););
loglogBtn = uicontrol(style,pushbutton,...
string,log-log,...
position,[320,395,40,20],...
callback,...
loglog(fdat,pdat);xlabel(X);
ylabel(Y););
% Create exit pushbutton with red text.
exitBtn = uicontrol(Style,pushbutton,...
string,EXIT,position,[510,395,40,20],...
foregroundcolor,[1 0 0],...
callback,close;);
Fig. 13: Graph of vibration data from Exam-
ple 25.1
%
%
%
%
%
%
%
Example 25.1 illustrates how the callback property allows the programmer to define what actions
should result when buttons are pushed etc. These
actions may consist of single Matlab commands or
complicated sequences of operations defined in various subroutines.
41
26
Command Summary
The command
>> help
will give a list of categories for which help is available (e.g. matlab/general covers the topics listed
in Table 3.
Further information regarding the commands listed
in this section may then be obtained by using:
>> help topic
try, for example,
>> help help
abs
sqrt
sign
conj
imag
real
angle
cos
sin
tan
cosd
sind
tand
exp
log
log10
cosh
sinh
tanh
acos
acosd
acosh
asin
asind
asinh
atan
atand
atan2
atanh
round
floor
fix
ceil
rem
Absolute value
Square root function
Signum function
Conjugate of a complex number
Imaginary part of a complex
number
Real part of a complex number
Phase angle of a complex number
Cosine function, radians
Sine function, radians
Tangent function, radians
Cosine function, degrees
Sine function, degrees
Tangent function, degrees
Exponential function
Natural logarithm
Logarithm base 10
Hyperbolic cosine function
Hyperbolic sine function
Hyperbolic tangent function
Inverse cosine, result in radians
Inverse cosine, result in degrees
Inverse hyperbolic cosine
Inverse sine, result in radians
Inverse sine, result in degrees
Inverse hyperbolic sine
Inverse tan, result in radians
Inverse tan, result in degrees
Twoargument form of inverse
tan
Inverse hyperbolic tan
Round to nearest integer
Round towards minus infinity
Round towards zero
Round towards plus infinity
Remainder after division
42
Matrix analysis.
Matrix condition number.
Matrix or vector norm.
Managing commands and functions.
LINPACK reciprocal condition
help
On-line documentation.
estimator.
doc
Load hypertext documentation.
rank
Number of linearly independent
what
Directory listing of M-, MATrows or columns.
and MEX-files.
det
Determinant.
type
List M-file.
trace
Sum of diagonal elements.
lookfor Keyword search through the
null
Null space.
HELP entries.
orth
Orthogonalization.
which
Locate functions and files.
rref
Reduced row echelon form.
demo
Run demos.
Linear equations.
Managing variables and the workspace.
\ and /
Linear equation solution; use
who
List current variables.
help slash.
whos
List current variables, long form.
chol
Cholesky factorization.
load
Retrieve variables from disk.
lu
Factors from Gaussian eliminasave
Save workspace variables to disk.
tion.
clear
Clear variables and functions
inv
Matrix inverse.
from memory.
qr
Orthogonal- triangular decomposize
Size of matrix.
sition.
length
Length of vector.
qrdelete Delete a column from the QR facdisp
Display matrix or text.
torization.
Working with files and the operating system.
qrinsert Insert a column in the QR factorcd
Change current working direcization.
tory.
nnls
Nonnegative least- squares.
dir
Directory listing.
pinv
Pseudoinverse.
delete
Delete file.
lscov
Least squares in the presence of
!
Execute operating system comknown covariance.
mand.
Eigenvalues and singular values.
unix
Execute operating system comeig
Eigenvalues and eigenvectors.
mand & return result.
poly
Characteristic polynomial.
diary
Save text of MATLAB session.
polyeig
Polynomial eigenvalue problem.
Controlling the command window.
hess
Hessenberg form.
cedit
Set command line edit/recall faqz
Generalized eigenvalues.
cility parameters.
rsf2csf
Real block diagonal form to comclc
Clear command window.
plex diagonal form.
home
Send cursor home.
cdf2rdf
Complex diagonal form to real
format
Set output format.
block diagonal form.
echo
Echo commands inside script
schur
Schur decomposition.
files.
balance
Diagonal scaling to improve
more
Control paged output in comeigenvalue accuracy.
mand window.
svd
Singular value decomposition.
Quitting from MATLAB.
Matrix functions.
quit
Terminate MATLAB.
expm
Matrix exponential.
expm1
M- file implementation of expm.
Table 3: General purpose commands.
expm2
Matrix exponential via Taylor series.
expm3
Matrix exponential via eigenvalues and eigenvectors.
logm
Matrix logarithm.
43 sqrtm
Matrix square root.
funm
Evaluate general matrix function.
cond
norm
rcond
44
Index
diary, 7
dice, 35
divide
elementwise, 10
doc, 2
<, 28, 30
<=, 28, 30
==, 28, 30
>, 28, 30
>=, 28, 30
%, 7, 33
, 6
., 7
.*, 9
..., 15, 26
./, 10
.^, 11
:, 5, 6, 18, 21
;, 4
echo, 8
elementary functions, 4
elementwise
divide ./, 10
power .^, 11
product .*, 9, 21
end, 6, 20
error, 35
eye, 19
ezplot, 12
abs, 42
accelerators
keyboard, 8
acosd, 9
and, 29
angle, 42
ans, 3
array, 17
axes, 16, 17
axis, 16
auto, 16
normal, 16
square, 16
false, 28
Fibonnaci, 27, 35
figure, 13
file
function, 33
script, 7
find, 32
fix, 42
fliplr, 23
flipud, 23
floor, 42
floor, 35
for loops, 27
format, 3
compact, 10
long, 11
rat, 10
fraction, 10
full, 23
function mfiles, 33
functions
elementary, 4
trigonometric, 4
ceil, 42
clear, 34
clf, 13
close, 13
colon notation, 5, 21
column vectors, 6
comment (%), 7, 33
complex
conjugate transpose, 6
numbers, 4, 6
complex numbers, 4
components of a vector, 5
conj, 42
contour, 37
cos, 42
cosd, 42
cosd, 9
CPU, 28
cumsum, 28
cursor keys, 8
get, 14
graphs, see plotting
grid, 12, 17, 37
GUI, 40
hard copy, 13
help, 2, 34
hold, 13, 17
if statement, 30
diag, 19
45
labels, 12
line styles, 12
printing, 13
surfaces, 36
title, 12
power
elementwise, 11
printing plots, 13
priorities
in arithmetic, 3
product
elementwise, 9, 21
inner, 21, 22
Pythagorass theorem, 34
imag, 42
inner product, 8, 21, 22
int2str, 27
keyboard accelerators, 8
labels for plots, 12
legend, 13
length, 6
length of a vector, 5, 6, 8
line styles, 12
linspace, 12
logical conditions, 28
lookfor, 2
loops, 27
while, 29
quit, 2
mfiles, 7, 33
matrix, 17
building, 20
diagonal, 19
identity, 19
indexing, 20
orthogonal, 32
size, 18
sparse, 23
special, 18
spy, 20
square, 19
symmetric, 19
tridiagonal, 23
zeros, 18
matrix products, 22
matrixvector products, 21
max, 32, 37
mesh, 37
meshgrid, 37
min, 32, 37
multiplots, 13
rand, 32
random numbers, 32
real, 42
rem, 42
reshape, 18, 39
round, 42
rounding error, 4
rounding numbers, 31
save, 7
script files, 7
semicolon, 4, 17
set, 15
shapes, 13
sign, 42
sin, 42
sind, 42
size, 18
sort, 5
sparse, 23
spdiags, 23
spy, 20
sqrt, 42
str2num, 26
strings, 12
subplot, 14
subscripts, 16
sum, 27, 31
superscripts, 16
nargin, 34
norm of a vector, 9
not, 2830
num2str, 27
numbers, 3
complex, 4
format, 3
random, 32
rounding, 31
timing, 28
title for plots, 12
toc, 28
transposing, 6
tridiagonal, 23
trigonometric functions, 4
true, 28
ones, 18
or, 29
plotting, 12, 17, 36
46
47