Professional Documents
Culture Documents
Version 3.0
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,
for his contributions to this revised version.
c
Copyright
1996
by David F. Griffiths. Amended October, 1997, August 2001, September 2005,
October 2012.
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
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 Bits of Matrices . . .
15.9 Elementwise Product of Matrices (.*) . . . . . . . . . . . . . .
15.10Matrixvector products . . . . .
15.11MatrixMatrix Products . . . . .
15.12Sparse Matrices . . . . . . . . . .
17
18
18
18
19
19
20
20
20
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 . . .
4
4 16 Systems of Linear Equations
23
4
16.1 Overdetermined systems . . . . . 24
8 Vectors
8.1 The Colon Notation . . . .
8.2 Extracting Bits of a Vector
8.3 Column Vectors . . . . . . .
8.4 Transposing . . . . . . . . .
.
.
.
.
.
.
.
.
.
.
.
.
26
27
28
28
7 20 Logicals
20.1 While Loops . . . . . . . . . . . . 29
20.2 if...then...else...end . . . . 30
7
9 Keeping a record
10 Script Files
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
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 . . . . .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
12
12
12
12
13
13
13
14
14
14
15
16
11 Keyboard Accelerators
14 Elementwise Examples
21
21
22
23
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
31
31
31
32
32
32
32
22 Function mfiles
33
23 Plotting Surfaces
36
17
40
26 Command Summary
41
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, [1 2 3], [1 2 3]
w =
1
-2
3
ans =
1
-2
3
ans =
1.0000
3.0000
2.2361
ans =
1.0000
3.0000
2.2361
>> t = w + 2*[1 2 3]
t =
3.0000
4.0000
7.4721
>> T = 5*w-2*[1 2 3]
T =
3.0000
-16.0000
10.5279
Column Vectors
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
where n is its dimension. This can be computed
For example, if u = [10, 11, 12], v = 21 in Matlab in one of two ways:
22
>> [ sqrt(u*u), norm(u)]
then n = 3 and
ans =
uv = 1020+(11)(21)+12(22) = 167.
19.1050
19.1050
We can perform this product in Matlab by
>> u*w
??? Error using ==> *
Inner matrix dimensions must agree.
12.2
an error results because w is not a column vector. Recall from page 6 that transposing (with )
turns column vectors into row vectors and vice
versa.
In Matlab, the product is computed with the Exercise 12.2 Enter the vectors
operator .* and, using the vectors u, v, w, z
U = [6, 2, 4], V = [3, 2, 3, 0],
defined on page 9,
3
3
>> u.*w
4
2
ans =
W =
2 , Z = 2
20 -11 36
6
7
>> u.*v
ans =
into Matlab. Which of the products
200 231 -264
U*V, V*W, U*V, V*W, W*Z, U.*V
>> v.*z, u.*v
U*V, V*W, W*Z, U.*W, W.*Z, V.*W
ans =
is legal? State whether the legal products are
140 -126 -110
row or column vectors and give the values of
ans =
the legal results.
200 231 -264
Perhaps the most common use of the Hadamard 12.3 Elementwise Division (./)
product is in the evaluation of mathematical
In Matlab, the operator ./ is defined to give
expressions so that they may be plotted.
element by element division of one vector by
Example 12.1 Tabulate the function y = x sin xanotherit is therefore only defined for vectors
for x = 0, 0.25, . . . , 1.
of the same size and type.
The display is clearer with column vectors so
we first define a vector of x-values: (see Transposing: 8.4)
>> x = (0:0.25:1);
To evaluate y we have to multiply each element
of the vector x by the corresponding element of
the vector sin x:
x
0
0.2500
0.5000
0.7500
1.0000
sin x
0
0.7071
1.0000
0.7071
0.0000
=
=
=
=
=
=
x sin x
0
0.1768
0.5000
0.5303
0.0000
0.5000
4/9
1/2
>> 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
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
>> A = [5 7 9; 1 -3 -7]
A =
5
7
9
1
-3
-7
>> B = [0, 1; 3, -2; 4, 2]
B =
0
1
3
-2
4
2
>> C = A*B
C =
57
9
-37
-7
>> D = B*A
D =
1
-3
-7
13
27
41
22
22
22
>> E = B*A
E =
57
-37
9
-7
(m n) times (n p) (m p).
Check that you understand what is meant by
working out the following examples by hand
and comparing with the Matlab answers.
>> 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
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
Ax = b
2
2
n2
or, componentwise, as
3
3
n3
B=
..
..
..
.
.
.
a1,1 x1 + a1,2 x2 + a1,n xn = b1
n + 1 n 1 1
a2,1 x1 + a2,2 x2 + a2,n xn = b2
n n
..
.
We define three column vectors, one for each
an,1 x1 + an,2 x2 + an,n xn = bn
diagonal of nonzeros and then assemble the
matrix using spdiags (short for sparse diago- When A is non-singular and square (n n),
nals). The vectors are named l (lower diago- meaning that the number of independent equanal), d (diagonal) and u (upper diagonal). They tions is equal to the number of unknowns, the
23
2 + 2i
1
0
1+i
1
where A is the inverse of A. Thus, the solu-
1
2 2i 1 ,
A=
b= 0
tion vector x can, in principle, be calculated by
0
1
2
1i
taking the inverse of the coefficient matrix A
and multiplying it on the right with the right- Exercise 16.3 Find information on the mahand-side vector b.
trix inversion command inv using each of the
This approach based on the matrix inverse, thoughmethods listed in Section 2 for obtaining help.
formally correct, is at best inefficient for prac- What kind of matrices are the inv command
tical applications (where the number of equa- applicable to?
tions may be extremely large) but may also give Obviously problems may occur if the inverted
rise to large numerical errors unless appropri- matrix is nearly singular. Suggest a command
ate techniques are used. These issues are dis- that can be used to give an indication on whether
cussed in most courses and texts on numerical the matrix is nearly singular or not. [Hint: see
methods. Various stable and efficient solution the topics referred to by help inv.]
techniques have been developed for solving linear equations and the most appropriate in any
situation will depend on the properties of the 16.1 Overdetermined systems
coefficient matrix A. For instance, on whether An overdetermined system of linear equations is
or not it is symmetric, or positive definite or a one with more equations (m) than unknowns
if it has a particular structure (sparse or full). (n), i.e., the coefficient matrix has more rows
Matlab is equipped with many of these special than columns (m > n). Overdetermined systechniques in its routine library and many are tems frequently appear in mathematical modinvoked automatically.
elling when the parameters of a model are deThe standard Matlab routine for solving sys- termined by fitting to experimental data. Fortems of linear equations is invoked by calling mally the system looks the same as for square
the matrix left-division routine,
systems but the coefficient matrix is rectangular and so it is not possible to compute an in>> x = A \ b
verse. In these cases a solution can be found
where \ is the matrix left-division operator by requiring that the magnitude of the residual
known as backslash (see help backslash).
vector r, defined by
Exercise 16.1 Enter the symmetric coefficient
r = Ax b,
matrix and righthandside vector b given by
b= 0
A = 1 2 1 ,
the Euclidean length (or normsee Section 12.1)
1
0 1 2
which corresponds to the sum of squares of the
and solve the system of equations Ax = b using components of the residual. This approach leads
the three alternative methods:
to the least squares solution of the overdeter1
1
i) x = A b, (the inverse A may be com- mined system. Hence the least squares solution
is defined as the vector x that minimizes
puted in Matlab using inv(A).)
rT r.
ii) x = A \ b,
iii) xT AT = bT leading to xT = b / A which It may be shown that the required solution satmakes use of the slash or right divi- isfies the socalled normal equations
sion operator /. The required solution
is then the transpose of the row vector xT.
Cx = d, where C = AT A and d = AT b.
24
r3
= x3 k1 + x23 k2 F3
r4
= x4 k1 + x24 k2 F4
x1 x21
F1
Example 16.1 A spring is a mechanical ele x2 x22
F2
F3
A = x3 x3 and b =
The ability to process text in numerical processing is useful for the input and output of
data to the screen or to files. In order to manage text, a new datatype of character is introduced. A piece of text is then simply a string
(vector) or array of characters.
Example 17.1 The assignment,
>> t1 = A
assigns the value A to the 1-by-1 character array t1. The assignment,
17
>> t2 = BCDE
t2 =
BCDE
>> size(t2)
ans =
1
4
;...
>> N = 5; h = 1/N;
>> [The value of N is ,int2str(N),... The last of these commands produces the dashed
, h = ,num2str(h)]
horizontal line.
ans =
The value of N is 5, h = 0.2
18
Loops
11
19
5.4
6]
=
=
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
>> end
>> clf; plot(S,.,[20 100],[1,1]*pi^2/6,-)
>> axis([20 100 1.5 1.7])
>> [ (98:100) S(98:100)]
ans =
98.0000
1.6364
n = 3, 4, 5, . . . .
( 5 1)/2 = 0.6180 . . ..
27
99.0000
100.0000
1.6365
1.6366
true = 1,
false = 0
If at some point in a calculation a scalar x, say,
has been assigned a value, we may make certain
where a column vector S was created to hold the
logical tests on it:
answers. The first sum was computed directly
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 =
3.1416
where cumsum calculates the cumulative sum of
>> x ~= 3, x ~= pi
entries in a vector.
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
20
Logicals
5.0000
1.0000
-2.0000
-5.0000
>> x > 3 &
ans =
0
0
>> x > 3 |
ans =
0
0
3.1416
-3.0000
x < 4
5.0000
-1.0000
1
0
0
0
x == -3
1
1
1
0
>> 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
12 + 22 + + n2
>> 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.
20.1
While Loops
There are some occasions when we want to repeat a section of Matlab code until some logical We may do this by making a guess x1 = /4,
condition is satisfied, but we cannot tell in ad- say, then computing the sequence of values
vance how many times we have to go around
xn = cos xn1 ,
n = 2, 3, 4, . . .
the loop. This we can do with a while...end
and continuing until the difference, d, between
construct.
two successive values |xn xn1 | is small enough.
29
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
30
if logical test 1
Commands to be executed if test 1
is true
elseif logical test 2
Commands to be executed if test 2
is true but test 1 is false
..
.
end
21
21.1
>> x = pi/4*(1:3);
A=[sin(x),sin(2*x),sin(3*x)]/sqrt(2)
>> A =
0.5000
0.7071
0.5000
0.7071
0.0000
-0.7071
0.5000
-0.7071
0.5000
0
0.0555
-0.2220
-0.2220
0
0
0
-0.2220
0.0555
Repeating these commands will lead to different answers. Example 22.2 gives an illustration
of the use of random numbers.
0
0.0555
-0.2220
21.3
>> x = -1:.05:1;
These functions act in a similar way to sum. If >> y = sin(3*pi*x).*exp(-x.^2);
x is a vector, then max(x) returns the largest >> plot(x,y,:)
element in x
>> k = find(y > 0.2)
k =
>> x = [1.3 -2.4 0 2.3]
Columns 1 through 12
x =
9 10 11 12 13 22 23 24 25 26 27 36
1.3000
-2.4000
0
2.3000
Columns 13 through 15
>> max(x), max(abs(x))
37 38 39
ans =
>> hold on, plot(x(k),y(k),o)
2.3000
>> km = find( x>0.5 & y<0)
ans =
km =
2.4000
32
33
34
>> [m, j] = max(x)
>> plot(x(km),y(km),-)
m =
2.3000
j =
4
When we ask for two outputs, the first gives us
the maximum entry and the second the index
of the maximum element.
For a matrix, A, max(A) returns a row vector containing the maximum element from each
column. Thus, to find the largest element in A,
we use max(max(A)).
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.
21.6
>> A = [ -2 3 4 4; 0 5 -1 6; 6 8 0 1]
A =
-2
3
4
4
0
5
-1
6
32
6
8
0
>> k = find(A==0)
k =
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
2. The first line of the file must have the
format:
= find(A <= 0)
1
2
8
9
>> A(n)
ans =
-2
0
-1
0
For our example, the output (A) is a function of the three variables (inputs) a, b
and c so the first line should read
function [A] = area(a,b,c)
3. Document the function. That is, describe
briefly the purpose of the function and
how it can be used. These lines should be
preceded by % which signify that they are
comment lines that will be ignored when
the function is evaluated.
The command
function [A,s] = area(a,b,c)
>> help area
will produce the leading comments from the where there are two output variables.
This function can be called in several different
file:
ways:
Compute the area of a triangle whose
sides have length a, b and c.
1. No outputs assigned
Inputs:
a,b,c: Lengths of sides
>> area(10,15,20)
Output:
ans =
A: area of triangle
72.6184
Usage:
Area = area(2,3,4);
gives only the area (first of the output
Written by dfg, Oct 14, 1996.
variables from the file) assigned to ans;
the
second output is ignored.
To evaluate the area of a triangle with side of
length 10, 15, 20:
fn = fn1 + fn2 ,
n = 3, 4, 5, . . . .
Exercise 22.1 Explain the output obtained from (See Example 18.1.) The function has:
the command
Input: Non-negative integer n
area(4,5,10)
Output: fn
Devise a test to warn the user of this type of
situation.
Time
5.8052 105
2.5534 105
1.4972 101
5.4041 105
What is immediately obvious from these timings is that Method 3 is significantly slower
than the others. Moreover, the time increases
dramatically as n is increased and is totally impractical. Methods 1, 2, and 4 execute very
rapidly and the times increase quite slowly as
n is increased. When times are averaged over
many hundreds of runs it becomes clear that
Method 3: File: Fib3.m
This version makes use of an idea called recur- Method 2 is the most efficient followed by Method 1.
sive programmingthe function makes calls
to itself.
23 Plotting Surfaces
function f = Fib3(n)
% Returns the nth number in the
% Fibonacci sequence.
if n==1
f = 0;
y = 1:0.5:3;
Exercise 23.1 Repeat the previous example replacing mesh by surf and then by surfl. Consult the
4.0000 help pages to find out more about these functions.
4.0000
Example 23.2 Plot the surface defined by the func4.0000
tion
2
2
4.0000
f = xye2(x +y )
4.0000
on the domain 2 x 2, 2 y 2. Find the
values and locations of the maxima and minima of
1.0000 the function.
1.5000
2.0000 >> [X,Y] = meshgrid(-2:.1:2,-2:.2:2);
2.5000 >> f = -X.*Y.*exp(-2*(X.^2+Y.^2));
3.0000 >> figure (1)
>> mesh(X,Y,f), xlabel(x), ylabel(y), grid
If we think of the ith point along from the left >> figure (2), contour(X,Y,f)
and the jth point up from the bottom of the grid) >> xlabel(x), ylabel(y), grid, hold on
37
24
http://www.maths.dundee.ac.uk/software/matlab.shtml
Those that are unformatted are in a satisfactory
form for the Windows version on Matlab (version
6.1) but not on Version 5.3 under Unix.
38
100
200
300
400
500
2256
4564
3653
6798
6432
respectively
1. open a file for reading (this is designated by
the string r). The variable fid is assigned
a unique integer which identifies the file used
(a file identifier). We use this number in all
subsequent references to the file.
>> t = data(1:2:length(data));
>> press = data(2:2:length(data));
The pressure signal can be plotted in a lin-lin
diagram,
>> plot(t, press);
The result is shown in Figure 12.
24.1
Formatted Files
ple 24.1
24.2
Unformatted Files
Exercise 24.2 Study the available information and Unformatted or binary data files are used when
help on fscanf and fprintf commands. What is small-sized files are required. In order to interpret
the meaning of the format string, %3d\n?
an unformatted data file the data precision must
be specified. The precision is specified as a string,
Example 24.1 Suppose a sound pressure measure- e.g., float32, controlling the number of bits read
ment system produces a record with 512 time pres- for each value and the interpretation of those bits
sure readings stored on a file sound.dat. Each as character, integer or floating point values. Prereading is listed on a separate line according to a cision float32, for instance, specifies each value
data format specified by the string, %8.6f %8.6f. in the data to be stored as a floating point number
in 32 memory bits.
39
Example 24.2 Suppose a system for vibration measurement stores measured acceleration values as floating point numbers using 32 memory bits. The data
is stored on file vib.dat. The following commands
illustrate how the data may be read into Matlab for
analysis.
Step 1: Assign a file identifier, fid, to the string specifying the file name.
>> fid = fopen(vib.dat,rb);
The string rb specifies that binary numbers are to be read from the file.
Step 2 Read all data stored on file vib.dat into a
vector vib.
>> vib = fread(fid, float32);
>> fclose(fid);
>> size(vib)
ans =
131072
The size(vib) command determines the size,
i.e., the number of rows and columns of the
vibration data vector.
In order to plot the vibration signal with a
correct time scale, the sampling frequency
(the number of instrument readings taken
per second) used by the measurement system
must be known. In this case it is known to
be 24000 Hz so that there is a time interval
of 1/24000 seconds between two samples.
Step 3: Create a column vector containing the correct time scale.
>> dt = 1/24000;
>> t = dt*(1:length(vib));
Step 4: Plot the vibration signal in a lin-lin diagram
>>
>>
>>
>>
25
plot(t,vib);
title(Vibration signal);
xlabel(Time,[s]);
ylabel(Acceleration, [m/s^2]);
File: specplot.m
GUI for plotting a user selected frequency spectrum
in four alternative plot formats, lin-lin,
lin-log, log-lin and log-log.
Author: U Carlsson, 2001-08-22
40
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.
Exercise 25.1 Five different sound recordings are
stored on binary data files, sound1.bin, sound2.bin,
. . . , sound5.bin. The storage precision is float32
and the sounds are recorded with sample frequency
12000 Hz.
Write a graphic user interface that, opens an interface window and
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.
41
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.
LINPACK reciprocal condition
estimator.
rank
Number of linearly independent
rows or columns.
det
Determinant.
trace
Sum of diagonal elements.
null
Null space.
orth
Orthogonalization.
rref
Reduced row echelon form.
Linear equations.
\ and /
Linear equation solution; use
help slash.
chol
Cholesky factorization.
lu
Factors from Gaussian elimination.
inv
Matrix inverse.
qr
Orthogonal- triangular decomposition.
qrdelete Delete a column from the QR factorization.
qrinsert Insert a column in the QR factorization.
nnls
Nonnegative least- squares.
pinv
Pseudoinverse.
lscov
Least squares in the presence of
known covariance.
Eigenvalues and singular values.
eig
Eigenvalues and eigenvectors.
poly
Characteristic polynomial.
polyeig
Polynomial eigenvalue problem.
hess
Hessenberg form.
qz
Generalized eigenvalues.
rsf2csf
Real block diagonal form to complex diagonal form.
cdf2rdf
Complex diagonal form to real
block diagonal form.
schur
Schur decomposition.
balance
Diagonal scaling to improve
eigenvalue accuracy.
svd
Singular value decomposition.
Matrix functions.
expm
Matrix exponential.
expm1
M- file implementation of expm.
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
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
44
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
45
46