You are on page 1of 9

Computation and Simulation MatLab Tutorial

Ref. Page Issue Date

: : : :

GE303-43-1 1 1 04-11-2003

MatLab is an abbreviation for Matrix Laboratory. It allows you do matrix calculations as if they were scalars. MatLab is also useful for visualising data (2D and 3D plots) and it is fully programmable. MatLab is the core software package which allows you to do general maths calculations. There are numerous (hundreds) MatLab toolboxes which extend the functionality of MatLab for specific tasks such as Simulink which is for simulating dynamic systems, the signal processing toolbox which is a collection of digital signal processing algorithms, financial toolbox which provides tools for the modelling and analysis of financial (stock market) data etc.

1 STARTING MATLAB

When you start MatLab, several windows open. The command window, where you type commands, is the important one. After you start MatLab, you should navigate to a folder you want to work in (your working directory). Using Windows Explorer, create a folder on your X drive called MatLab Tutorial. Change to x:\MatLab Tutorial : cd(x:\MatLab Tutorial)

Note the single quotes. In MatLab, a character string is enclosed in single quotes. If you are unsure of your working directory : pwd ans = X:\MatLab Tutorial

2 GETTING HELP

MatLab has two main sources of help. You can view the software manuals using the help menu. These are full electronic copies of the manuals for MatLab and all installed toolboxes. This is a good place to start to get an overview of a particular topic. The other form of help is the help command which is best when you know the name of the MatLab command (or function) but cant remember exactly how it works. Typing help by itself gives a list of all the help topics. You can then get help on any of these topics by typing help topicName, e.g. to get help on the if statement : help if IF IF statement condition. The general form of the IF statement is IF expression statements ELSEIF expression statements ELSE statements END The statements are executed if the real part of the expression has all non-zero elements. The ELSE and ELSEIF parts are optional. Zero or more ELSEIF parts can be used as well as nested IF's. The expression is usually of the form expr rop expr where rop is ==, <, >, <=, >=, or ~=. Example if I == J A(I,J) = 2; elseif abs(I-J) == 1 A(I,J) = -1; else A(I,J) = 0; 82075096.doc Sean Doherty

Computation and Simulation MatLab Tutorial


end See also RELOP, ELSE, ELSEIF, END, FOR, WHILE, SWITCH.

Ref. Page Issue Date

: : : :

GE303-43-1 2 1 04-11-2003

Note how it also gives you a list of related commands (and/or functions) See also

3 VECTORS AND MATRICES


11 Suppose we want to create the matrix X = 21 31 12 22 32 13 23 33 14 24 34

method 1 (use a new line (i.e. a <CR> at end of each row)


X = [11 12 13 14 21 22 23 24 31 32 33 34] X = 11 21 31 12 22 32 13 23 33 14 24 34

method 2 (separate each row with a semi-colon)


X = [11 12 13 14; 21 22 23 24; 31 32 33 34] X = 11 21 31 12 22 32 13 23 33 14 24 34

When creating a vector, we can form a row vector : a = [-1 2 -3 4] a = -1 2 -3 4

or a column vector : b = [-1; 2; -3; 4] b = -1 2 -3 4

Whenever you type a command, you can suppress MatLab displaying the result of the command by terminating the command with a semicolon : b = [-1; 2; -3; 4];

b is formed in the same way, but the result is not displayed because of the semicolon at the end of the line. When you work in MatLab, the variables (scalars, vectors or matrices) you create, either directly or as a result of a calculation are stored in the workspace. To display a list of the workspace variables : whos Name X 82075096.doc Size 3x4 Bytes 96 Class double array Sean Doherty

Computation and Simulation MatLab Tutorial


a b 1x4 4x1 32 32 double array double array

Ref. Page Issue Date

: : : :

GE303-43-1 3 1 04-11-2003

Grand total is 20 elements using 160 bytes

So, we have 3 variables, X which has 3 rows and 4 columns, a which has 1 row and 4 columns (a row vector) and b which has 4 rows and 1 column (a column vector). To display any workspace variable, just type its name (without terminating semicolon!) : a a = -1 2 -3 4

3.1 Elements of a matrix


new variable z : z = X(2,3) z =

Suppose we want to extract from the matrix X the element on the 2nd row and 3rd column and assign it to a

So, in general to refer to the element on the ith row and jth column of a matrix X, we use X(i,j). To refer to all of the ith row, we use X(i,:), or all of the jth column is X(:,j) : r1 = X(1,:) r1 = 11 12 13 14

23

c2 = X(:,2) c2 = 12 22 32

We can use the X(i,j) notation to refer to ANY sub matrix of X because i and j can be vectors : X1 = X(:,[1 3 4]) X1 = 11 21 31 13 23 33 14 24 34

This assigns to X1 all (: by itself means all) rows of X and columns 1, 2 and 4.
X2 = X([2 3],:) X2 = 21 31 22 32 23 33 24 34

(rows 2 and 3, all columns)


X3 = X([2 3],[2 3]) X3 = 22 32 23 33

(rows 2 and 3, columns 2 and 3)


82075096.doc Sean Doherty

Computation and Simulation MatLab Tutorial

Ref. Page Issue Date

: : : :

GE303-43-1 4 1 04-11-2003

We can extend the colon notation to specify a sequence, e.g. create a vector v which STARTs at 1, with INCREMENTs of 2 and STOPs at 10 : v = 1:2:10 v = 1 3 5 7 9

If you omit the INCREMENT, it defaults to 1 : v = 1:10 v = 1 2 3 4 5 6 7 8 9 10

We can use this vector notation when referring to a sub matrix : x4 = X(1:2:3, 2:4) x4 = 12 32 13 33 14 34

(rows 1 and 3 (i.e. start at 1, increment by 2, stop at 3), columns 2,3,4 (i.e. start at 1, stop at 3 default increment of 1 is used).

4 SAVING WORKSPACE VARIABLES


Type whos now to display the different variables.
save fileName save fileName save fileName

saves ALL workspace variables to fileName.mat X1 saves the variable X1 to fileName.mat X1 X2 X3 saves the variables X1 X2 and X3 to fileName.mat

NB. If you use the same filename, the contents of the previous file will be overwritten without warning. The save command uses a special file format. If you want to save your variables in ASCII format (e.g. to subsequently import the data into Excel) :save fileName X1 ASCII DOUBLE TABS

saves the variable X1 to fileName.mat in ASCII format as

double precision numbers with tab spacing. type help save for other options). To load a previously saved file :load fileName

Sometimes you want to delete some of the variables in the workspace :clear

clears ALL workspace variables clears variables x1 and x2 from the workspace.

clear x1 x2

Exercise 1 1) Clear all variables from your workspace.

82075096.doc

Sean Doherty

Computation and Simulation MatLab Tutorial


1.1 2.1 2) Create a matrix h = 3.1 4.1 1.2 2.2 3.2 4.2 1.3 2.3 3.3 4.3 1.4 2.4 3.4 4.4 1.5 2.5 3.5 4.5 1.6 2.6 3.6 4.6

Ref. Page Issue Date

: : : :

GE303-43-1 5 1 04-11-2003

Can you spot how you can form this matrix without manually typing each element ? Hint gives the first row. 3) What size is this matrix? Confirm the size using command. Type s
= size(h) whos.

[1.1:0.1:1.6]

To find the size of a variable, you can use the size

4) Form the following submatricies :1.1 h1 = 2.1 1.2 2.2 1.1 h2 = 2.1 1.5 2.5 1.2 h3 = 2.2 3.2 1.4 2.4 3.4 1.6 2.6 3.6 1.6 h4 = 2.6 3.6 1.5 2,5 3.5 1.4 2.4 3.4 1.3 2.3 3.3

h4 = [ 3.1

3.2

3.3

3.4 ]

1.5 2.5 h5 = 3.5 4.5

1.1 2.2 h6 = 3.3 4.4

5) Confirm the size of your workspace variables using whos. 6) Save h h5 and h6 to a file called submatrix1 7) clear all variables from your workspace 8) load the file submatrix1 9) Confirm the size of your workspace variables using whos.

5 MATRIX CALCULATIONS
ones) : a = zeros(2,4) a = 0 0 0 0 0 0 0 0

Two useful MatLab functions for creating matrices are zeros (form matrix of zeros) and ones (form matrix of

b = ones(2,3) b = 1 1 1 1 1 1

Can we add a and b ? No! To add two matrices, they must have the same size and MatLab will tell you so if you try to add them : c = a+b ??? Error using ==> + Matrix dimensions must agree.

Provided, the dimensions of the matrices are compatible, matrix algebra is easy in MatLab. Lets illustrate through an exercise.
82075096.doc Sean Doherty

Computation and Simulation MatLab Tutorial

Ref. Page Issue Date

: : : :

GE303-43-1 6 1 04-11-2003

Exercise 2. 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. Clear your workspace Create a matrix of ones, called a, with 7 rows and 3 columns. Multiply a by 2 to create a matrix of twos, called b, with 7 rows and 3 columns. Form the sum c = a + b Form the sum d = a - b Form the product e = a * b. Whats wrong here? Form the transpose of b using bt = b Inspect the sizes of your workspace variables using whos. Which matrices in your workspace are compatible for multiplication? Form the products abt = a*bt and bta = bt*a Form the vector v = (1 2 3 4)
T Form the product v1 = vTv and v2 = vvT. NB. vv = n

v(i)
i =1

6 GRAPHING
Try the following : t=0:0.25:7; y = sin(t); plot(t,y)

sin is a MatLab function. You can copy and paste MatLab plots into MS Word. In the MatLab figure, use Copy Figure. In Word, you might find that using Paste Special, Paste Picture works better. Also, it is easier to position the plot in word if you insert a textbox (Insert/textbox) and paste (or paste special) into the textbox. To plot multiple curves : t=0:0.25:7; y1=sin(t); y2=cos(t); y3=y1+y2; plot(t,y1,t,y2,t,y3)

You can specify line types and colours : plot(t,y1,r-,t,y2,g:,t,y3,k-.)

where r gives red, g green and k black and -, :, -. produce different line types. Type help plot for details You can adjust the properties/appearance of a plot using the Tools menu :Tools/ Axes Properties : set title, labels, axes limits etc. Tools/ Line Properties : adjust widths, colours and style of a selected line Tools Text Properties : -adjust Text Property of ANY selected text (e.g. the labels of the X axis) Other functions which you might find useful for graphing (use help for further information)
figure

:- you can have multiple figure windows, each one containing a plot

:- you can have multiple plots on a single figure. Try subplot( 3,2,1) legend :- insert a legend hold :- normally, if you issue a plot command, it deletes any existing plot from the figure window before
subplot

plotting. Typing hold


82075096.doc

on

prevents this (i.e. you can add a graph to an existing plot). hold

off

toggles hold
Sean Doherty

Computation and Simulation MatLab Tutorial

Ref. Page Issue Date

: : : :

GE303-43-1 7 1 04-11-2003

7 SCRIPTS AND M-FUNCTIONS

You can automate Matlab by typing commands into a scriptfile. In the MatLab command window, select File/New/M-file. You can put any sequence of commands into a scriptfile and save it as, for example test (MatLab will automatically add the extension .m, saving the scriptfile as test.m). Now, if you type test at the command line, each of the commands in the scriptfile are executed in sequence - this will give exactly the same result as typing each command in the command window. Lets illustrate by using the (simplified) script code from lecture 2 which is to graph :If not already open, open the MatLab Editor using File/New/Mfile We want to plot the mathematical function f(x) = x 3 + x 2 3x 3 = 0 over the range [2, 1.8] Generate the x vector (Im using a step size of 0.1 you could use a smaller step size if you want)
x = -2:0.1:1.8;

Calculate the values of y at x using the above equation


y = x.^3 + x.^2 - 3*x - 3;

(^ means to the power of. x^3 is x*x*x


plot(x,y)

x.^3 means raise each element of x to the power of 3)

Define a vector which contains the roots of f(x) you are given these values
r = [-3^0.5 3^0.5 -1];

Switch hold ON otherwise plot will get rid of existing graph


hold on

Plot these 3 points using black (i.e. k) circles (i.e. o)


plot(r,[0 0 0], ok');

Now use Tools/ Axes/Line/text Properties to :1. Insert a x label x 2. Insert a ylabel y 3. Insert a plot title 'Sample function for root finding : f(x) = x^3 + x^2 - 3x 3 4. Switch grid on 5. Change the axes limits to x [-3 3] and y [-6 2]

When you execute a script file, it is exactly the same as typing each line at the command prompt. This means that all variables created in the scriptfile are in the workspace. Often, you dont want this but you want to create a m-function which you pass a list of arguments and it returns one or more values all calculations done in the m-function are local to the m-function you cannot see these in the workspace. You can a list of the MatLab programming language constructs by typing help lang. Lets create a m-function which when passed an x value, returns the value of f(x) = x 3 + x 2 3x 3 = 0 . In the MatLab editor, open a new page and type the following :
function [y] = f1(x) y = x.^3 + x.^2 - 3*x - 3;

Now save this as f1. Matlab will automatically add the .m extension
82075096.doc Sean Doherty

Computation and Simulation MatLab Tutorial

Ref. Page Issue Date

: : : :

GE303-43-1 8 1 04-11-2003

To call this m-function at the command prompt, for example to find the value of f(9), and assign to a variable z, we type : z=f1(9) z = 780

Note, that f1.m will also work for vectors : z=f1(-1:.5:1) z = 0 -1.3750 -3.0000 -4.1250 -4.0000

Of course, MatLab m-functions can have multiple arguments and multiple return values, e.g.
function [a,b,c] = nuim(x,y)

defines a m-function with 2 arguments (referred to as x, y in the m-function) and returns 3 values (referred to as a,b,c in the m-function). The variables a,b,c,x,y and any other variables in the m-function are local to the m-function they are not seen in the workspace. How do we call a m-function within another m-function? We have two options. Suppose we want to call f1.m within a new m-function called f2.m. Within f2.m we can simply type
(1) z=f1(9);

This is equivalent to
(2) z = feval(f1,9);

feval is a MatLab function which, in the above case, calls the m-function called f1 (note the quotes f1 is a string) and passes f1 the argument 9. With (1), the name of the m-function being called in f2.m (i.e. f1) is hard coded in f2.m, so, if we want to change the name of the f1 m-function, we have to edit the f2.m file. With (2) we can pass the name of the m-function as an argument to f2.m i.e.
function [a, b, c ] = f2(x,y,,fun) % Note that fun is a string : z = feval(fun,9); :

Then at the command prompt we can pass the name of the f1 m-function to f2.m :[f, g, h, .] = f2(d, e, , f1);

82075096.doc

Sean Doherty

Computation and Simulation MatLab Tutorial

Ref. Page Issue Date

: : : :

GE303-43-1 9 1 04-11-2003

82075096.doc

Sean Doherty