Maths For Engineers and Scientists 4: Matlab: 1.1 What Is It?
Maths For Engineers and Scientists 4: Matlab: 1.1 What Is It?
Maths For Engineers and Scientists 4: Matlab: 1.1 What Is It?
Contents
1 Introduction to Matlab 1
1.1 What is it? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1
1.2 On-line help . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2
1.3 Using the Editor to create a new file . . . . . . . . . . . . . . . . . . . . . . . . . 2
1.4 Matrix eigenvalues and eigenvectors . . . . . . . . . . . . . . . . . . . . . . . . . . 3
1.5 Functions, for loops, if–then–else . . . . . . . . . . . . . . . . . . . . . . . . . 4
1.6 Graphs and strings . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6
1.7 M-files . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6
1.8 Laplace and inverse Laplace transforms . . . . . . . . . . . . . . . . . . . . . . . . 9
1.9 The Matlab ODE solvers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9
2 Problem sets 11
2.1 Problem set 1 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11
2.2 Problem set 2 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13
2.3 Problem set 3 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15
2.4 Problem set 4 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16
2.5 Problem set 5 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17
1 Introduction to Matlab
These notes mostly refer to Matlab under Windows on the University’s desktop PC system.
The Univeristy has a comprehensive license for Matlab and you can download your own copy.
If you e-mail the IT Helpdesk ithelp@hw.ac.uk, they will send you installation and activation
instructions.
The following notes provide a quick summary of Matlab to allow a quick start. The booklet
An Introduction to Matlab by David F. Griffiths (downloadable through Vision) provides a
broader introduction to Matlab.
These toolboxes include financial modelling, image enhancement, systems control, simulation
and optimisation.
avec =
1 2 3
You might need to change the Matlab working directory to match the directory you
stored the file in.
• To test it out a different way, go back to the Matlab Command Window prompt » and
type myprog to see if you get the same output. You should get the same output.
• If it doesn’t work then go back and carefully follow the itemised steps above again. It is
very important that you learn how to save files before you create anything complicated.
Matrices
Matlab deals mainly with one type of object — rectangular matrices, whose entries can either
be numbers (real or complex), or text string characters. Matrices with only one row or column
can be treated as vectors, and 1 × 1 matrices as scalars. (See Sections 5, 8 and 15 of An
Introduction to Matlab.)
Type the lines
x = [-2, 4, -8]
y = [3, 5, 7]
z = [1; 2; 3]
a = 5
A = [-1 0; 3 1]
F18XD Matlab 3
to create two 1 × 3 (row) vectors (x and y), a column vector (z), a scalar (a) and a 2 × 2 matrix
(A). Note that unlike some programming languages the case of variable names does matter in
Matlab , so that a and A represent different quantities. Matrices are usually entered in for
loops (An Introduction to Matlab Section 18) or using colon notation. Note that ending a
line with a semicolon ; stops the answer being displayed. Try it out.
Individual matrix entries can be referenced by indices in brackets: e.g. typing
x(2)
x(1,2)
A(2,2)
results in 4, 4 (the first two commands refer to the same element of x), and 1. Note that a
matrix or vector will only accept positive integers as indices, so that B(12,197) is OK, whilst
B(0,1), B(2,-3), or B(1.3,1) are not.
Matrix operations
Most of matrix operations are listed in Section 15 of An Introduction to Matlab. Note that
many of these can be made to work entry-wise by typing a dot . before the operation — e.g.
A*A is the matrix A2 , whilst A.*A is the matrix with (i, j) entry equal to A(i, j)2 . Confirm this
in Matlab with the 2 × 2 matrix A below:
>> A = [-1 0 ; 3 1]
A =
-1 0
3 1
>> A*A
ans =
1 0
0 1
>> A.*A
ans =
1 0
9 1
Av = λv.
There will be much more about these in the course. Meantime we just have a look to see how
to compute them in Matlab.
F18XD Matlab 4
>> A = [-1 0 ; 3 1]
A =
-1 0
3 1
>> d=eig(A)
d =
1
-1
>> A = [-1 0 ; 3 1]
A =
-1 0
3 1
>> [V,D]=eig(A)
V =
0 0.5547
1.0000 -0.8321
D =
1 0
0 -1
The columns of matrix V are eigenvectors of matrix A and the diagonal matrix D contains the
corresponding eigenvalues such that A*V = V*D.
exp(x)
sy = sqrt(y)
abs(A)
floor(sy)
ceil(sy)
max(x)
sum20 = 0
for i = 1:20
sum20 = sum20 + i
end
(the indentation isn’t necessary but makes the code clearer). This code:
• for each integer i between 1 and 20 performs the command sum20 = sum20 + i.
The command i = 1:20 is an example of colon notation. It means “all the integers between
1 and 20, starting with 1 and ending with 20”. If a, b and c are numbers, then a:b:c means “all
the numbers a, a+b, a+2b, . . . ending at or just before c”. The syntax is first:increment:last.
If you don’t include an increment (e.g. i=1:20 above), then it is assumed to equal 1.
Type in the following lines to get a better idea of what is going on.
1:2:10
5:-7:-30
14.32:-0.2:8.5
1:20
1.24:9.1
Why does the last example give a vector whose last element is 8.24 and not 9.1?
An Introduction to Matlab Sections 18 and 20 deal with for loops and related things in detail.
if . . . else statement
The if statement allows the execution of different commands depending on the value of some
logical test.
a = 3;
b = 2;
if (a<b)
j = -1;
else
j = 0;
end
v = zeros(1,10);
for i = 1:10
if (i < 2)
v(i) = 1;
elseif (i > 1 && i <= 5)
v(i) = 2;
else
v(i) = 3;
end
end
t = [0:0.01:2*pi];
v = sin(t);
plot(t,v)
Section 13 of An Introduction to Matlab describes how to make multi-plots, 3D plots and how
to change the axes scaling and line styles. Axis labels and a title are essential to tell people
what is being plotted, and can be added using the xlabel, ylabel and title commands; e.g.
try out the command ylabel(’sin t’)
Text strings
The argument of the above ylabel command is an example of a text string — i.e. a collection
of characters surrounded by single quotes. Another example is
st = ’my name is Frankenstein’
Note that both quotes are the same. Commands like disp, input and error use text strings.
Another useful command is num2str, which converts a number into a string. As an example of
how to use it and a slightly more complicated string expression, type
title([’plot of sin t up to ’, num2str(2*pi)])
to label your graph.
Note that in the above example using title, the string has more than one element. If more than
one string element is used (typical when mixing words and numbers), then the string elements
to be joined together must be enclosed in square brackets and separated by commas.
1.7 M-files
Matlab can be used in two main ways. You can either type instructions directly at the prompt
or make up a file or files containing the instructions you want Matlab to execute and feed this
file (called an M-file) to Matlab. An M-file is a computer program written in Matlab’s own
F18XD Matlab 7
language. Typing commands at the prompt is fine if you want to execute single commands, but
errors usually creep into the typing of longer expressions and sequences of operations and it is a
pain having to retype things used over and over again. In general, you should use M-files, and
the mechanism for creating them is described in Section 1.3 above.
There are two different kinds of M-files, script files and function files, which act in slightly
different ways. Script M-files act as a shorthand for a sequence of Matlab commands and are
a bit easier to use than function M-files. We discuss both types of M-files below, and Sections
10 and 22 of An Introduction to Matlab also describe them in detail.
Typing the name S20 at the Matlab prompt will execute the M-file and should result in the
line
Note that if you miss the semicolon from the line sum20 = sum20 + i then you will get a whole
lot of unwanted output.
The semicolon ; suppresses the output.
Create the file and try it out (make sure that you have learnt how to Save files first). Typing
doc S20 will print out the lines at the top of the file that start with a % (the comment lines),
up to the first line that doesn’t start with a %. This is a very useful way of letting yourself (and
anyone else who uses your Matlab programs) know what a particular file does. It is good style
to always start an M-file with a comment line. Matlab ignores any commands that follow a %,
and so comments can be inserted in the body of the program after a %.
F18XD Matlab 8
function v = mkvec(x)
%MKVEC Construct the vector [1, x, x^2, x^3] from x
% mkvec(x) returns the vector [1, x, x^2, x^3]
It contains an input argument (x), the 4–component vector output argument v and a function
statement (the first line). Write and save the file and then type mkvec(2) at the command line.
You should get the result
ans =
1 2 4 8
You can use the M-file to create named vectors — for example if you type w = mkvec(6) then
you obtain
w =
1 6 36 216
instead.
Function M-files can have more than one input argument — e.g. the file mkvec2.m below:
function v = mkvec2(x,n)
%MKVEC2 Construct the vector [1, x, x^2, ..., x^n] from x and n
% mkvec2(x,n) returns the vector [1, x, x^2, ..., x^n]
for k = 0:n
v(k+1) = x^k;
end
and more than one output argument — e.g. the file mkvec3.m below:
for k = 0:n
v(k+1) = x^k;
end
len = length(v);
You can also use dot operations to avoid loops in the previous example, e.g. as in the file
mkvec3a.m below:
F18XD Matlab 9
k = 0:n;
v = x.^k;
len = length(v);
See Section 22 of An Introduction to Matlab for more details.
ans = 1/s^2
To compute an inverse Laplace transform of function F (s) = 1/s2 we type
>> syms s;
>> F = 1/s^2;
>> ilaplace(F)
ans = t
It is also possible to use the package Maple to compute Laplace and inverse Laplace transforms.
Maple is also avaialble on a comprehensive campus license. However, let us stick to Matlab
here.
i.e.
dx
= F (t, x).
dt
There are several built-in ODE solvers from which we can chose, e.g., ode45, ode23, ode113,
ode15s, ode23s, ode23tb (each solver has its advantages and disadvantages).
F18XD Matlab 10
function main
% Use ODE45 to solve
% dx_dt(1) = -1*x(1)-1*x(2)
% dx_dt(2) = 1*x(1) -2*x(2)
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% rhs function x’=F(t,x)
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
function [dx_dt]= F(t,x)
M = [-1,-1; 1,-2];
dx_dt = M*x;
return
F18XD Matlab 11
2 Problem sets
2.1 Problem set 1
1. (a) What is the semi-colon for?
(b) Generate the row vector x = (0.6, 0.7, . . . , 1.4, 1.5) using 2 colons and three numbers.
(c) Find the transpose of the vector x in (b).
(d) If A and B are n × n matrices, what is the difference between A ∗ B and A. ∗ B? Try
it out for some 2 × 2 matrices that you choose yourself.
2. Use the colon notation to generate the vector x = (0.6, 0.7, . . . , 4.4, 4.5).
Use length and sum and see Section 21.2 of An Introduction to Matlab.
(a) Find the vector s whose jth element is the sine of the jth element of x.
(b) Plot vector s against x using the line style “stars” and put appropriate labels on the
graph.
5. What effect do the commands format short e, format long e and format compact have
on Matlab output ? Try it out by typing pi after the various format commands. (See
help format).
6. Create
7. (a) Use the editor to create a function M-file called anysump.m which takes as input the
positive integer N , and as output the result p of the summation
N
X
p= j −2 .
j=1
(b) Compute from the Matlab command window, the value of the sum for N = 5, 10, 15, 20.
10. Write a function M-file that takes as input the positive integer n and number r, and
outputs the sum
Xn
kr .
k=1
11. Plot an (x, y) graph for x ∈ [−5, 5] when y = sin(x) + 1 − x. Use the information from the
graph to help the built-in function fzero find the root of the equation sin(x) + 1 − x = 0.
F18XD Matlab 13
2. (a) Write a function M-file using for loops to define the N × N tridiagonal matrix A and
vector b given by
β γ 0 ... 0
. sin(1)
α β γ .
. sin(2)
A= 0
. . . . . . , b=
···
,
. . . 0
.. sin(N −1)
. α β γ sin(N )
0 ··· 0 α β
which will work for any integer N ≥ 3. Make sure that b is a column vector. The
matrix A is called tridiagonal because all its entries are zero apart from those on or
immediately next to the diagonal.
(b) For α = 1, β = 4, γ = −1, find the solution x of Ax = b in the case N = 4, and
find the 42nd element of the solution x in the case N = 199. (Use the backslash \
command.)
(c) Use the command eig to find the eigenvalues and eigenvectors of the matrix A with
N = 5, α = γ = 1, β = 2.
3. So far we have seen two ways of solving Ax = b for x where A is an N × N matrix and b
an N vector:
We would like to test which method takes the least cpu time.
(a) Write an function M-file where the input is the size N and the output is the time
(cputime) in seconds it takes by each of the two methods to compute the solution of
Ax = b for randomly chosen A and b (rand).
(b) Then write a second M-file for depicting the two resulting times for N = 100, 150, 200, . . . , 800.
Label the graph appropriately.
4. Newton’s method for finding a solution of the equation f (x) = 0 is the following iteration.
Step 1 Make a guess at the solution (call it x1 ),
Step 2 calculate the sequence of values x2 , x3 , . . . from
f (xk )
xk+1 = xk − for k = 1, 2, 3 . . . ,
f 0 (xk )
F18XD Matlab 14
Step 3 stop when |xk+1 − xk | < TOL, where TOL is a small number supplied by the user
or if we reach k = 100 without finding a solution.
(a) Write a function M-file with input: TOL, initial guess x1 and output: the Newton
method approximation of the solution of cos(x) = x, and the number of steps taken
to get there. It will make life easier for you if you write the M-file in such a way that
the equation to be solved can be changed easily.
(b) Type format long e to show numbers to full precision before the next part.
(c) Find the root of cos(x) = x using the built-in function fzero first of all, then apply
your Newton function to the equation cos(x) = x with TOL= 10−6 and try two
different starting guesses x1 = 1.4 (which works) and x1 = −1.4 (which doesn’t).
Does you solution agree with that from fzero? Now try a wider range of starting
guesses −2 ≤ x1 ≤ 2. Is there a pattern in which starting guesses work and which do
not? (for, if, break).
F18XD Matlab 15
f (x + h) − f (x) f (x + h) − f (x − h)
(F) : f 0 (x) ≈ , (C) : f 0 (x) ≈ .
h 2h
The labels F and C stand for “forward” and “central” respectively. The number h is usually
relatively small, and the approximations should, in theory, get better as h decreases.
(a) Write a function M-file that takes as input x and h, and outputs the forward and
central approximate derivatives of f (x) = sin−1 (x).
(b) Set x = 1/2 and plot the modulus of the error in the results against h for h =
10−10 , 10−9 , . . . , 10−2 . Which gives better results and why do they stop getting better
as h decreases? Use the loglog function to plot, and label the graph appropriately.
F18XD Matlab 16
2. Use Matlab (or Maple) to find inverse Laplace transforms of the functions from the
Tutorial exercises.
3. Solve the LCR circuit example problem from the Lecture notes using the Matlab built-in
ODE solvers and compare the computed solution to the exact solution from the lecture
notes.
4. Use the Matlab build-in ODE solver to solve the following system of ODEs for t ∈ (0, 5)
dx1
= x1 + 2x2 ,
dt
dx2
= 2x1 − 2x2 ,
dt
x1 (0) = 2 x2 (0) = 1, ,
Compare the computed solution with the exact solution from Section 3.5 of the Lecture
notes.
5. Use the Matlab build-in ODE solver to solve the following system of ODEs for t ∈ (0, 5)
dx1
= −4x2 + δ(t − 3) ,
dt
dx2
= x1 ,
dt
x1 (0) = 0 x2 (0) = 1, ,
where δ(t) is the Delta function (Hint: replace the delta function by an approximation
δ̃(t) = 1/ε for t ∈ (0, ε) for a sufficiently small , e.g. = 0.01). Compute for different
values of and compare the computed solution with the exact solution (cf., Lecture notes
Figure 3.2)
cos (2t) t < 3,
x2 (t) =
cos (2t) + 0.5 sin (2t − 6) t ≥ 3.
F18XD Matlab 17
Zb N
X
I≡ f (x) dx ≈ h f (xj ) ≡ IN
a j=1
where the width of the strips is h = (b − a)/N and the mid points of the strips are
xj = a + h(j − 21 ). The error in the approximation IN is roughly one third of the difference
between IN/2 and IN .
R2
(a) Write an M-file to approximate the integral 1 sin(x3 ) dx with N = 8, 16, 32, . . . , 1024
strips.
(b) Tabulate the result to full precision and make an estimate of the error in the results.
2. One of the best known examples in dynamical systems and chaos theory is the Logistic
Map. It is defined by xk+1 = λxk (1 − xk ) for k = 1, 2, . . . with starting value x1 ∈ (0, 1).
The constant 0 < λ ≤ 4 controls the type of behaviour observed.
(a) Write a function M-file with inputs λ (controlling parameter), N (number of steps)
and x1 (starting value), and output the vector (x1 , x2 , . . . , xN ).
(b) Use this to plot xk vs k for various values of λ and x1 in four horizontal strips on the
same figure. (subplot).
(c) Try the case λ = 3.7, N = 100 with x1 = 0.7, 0.7 + 10−9 , 0.7 + 10−6 , 0.7 + 10−3 and
comment on how many steps it takes the results to deviate from the x1 = 0.7 case.
(d) Try the case x1 = 0.7, N = 500 with λ = 3.3, 3.5, 3.739, 3.835 and comment on the
pattern the solution settles into. (It might help to list the last 10 numbers in the
sequence in each case.)
yn+1 = yn + hf (yn , tn )
(a) Write an M-function with inputs the parameter h and length of the interval l, and
output the two vectors t and y obtained by applying Euler’s method to the initial
value problem
dy
= (1 − t)y, y(0) = 1.
dt
(for end).
2
(b) The exact solution of this ODE can actually be found analytically, y(t) = et−t /2 .
Plot a graph comparing the exact and the approximate solutions for 0 ≤ t ≤ 5. Use
a blue filled line for the exact solution and a green dashed line for the approximated
one. Label the graph appropriately. (plot).
(c) Use one of the built-in Matlab ODE solvers (e.g., ode15s) to solve the above ODE
and compare the resulting solution to the one obtained by the Euler’s method and
to the exact solution.