MATLAB Tutorial

The M-file that goes along with this tutorial is located here

Three printable versions of this file are located here: Microsoft Word, Adobe PDF, Postscript

Basic Screen

You'll notice the three main windows are "Workspace", "Command History", and "Command Window".

The Workspace window is a list of everything used currently in your workspace.  In this case it contains three matrices or arrays of size 1 X 80000.  You'll learn more about what can appear here later.

The Command History window shows the list of commands that you've executed already.

The Command Window window is probably the one that you'll spend the most time looking at (which is why it's the biggest).  It shows results, commands, errors, etc...  Basically, everything you'd want to know about what's currently going on.

The next part of the tutorial comes directly from the script file above.  Please use that if available to follow along, this is simply a more printable version of the tutorial.

 
Assignments
Here are a few basic assignment statements think of an assignment as a variable.

a = 25;
b = 42*12;
c = 50
d = 36*12 + 120

Note that when the semicolon is present that Matlab doesn't display the results on the screen, otherwise is does display the results after the command is executed.

Important commands
clear command
The clear command is very important, it simply clears a variable from the workspace.

clear a;
clear b
clear c
clear all;

"clear all" clears EVERYTHING from the Matlab Workspace.  It is recommended that you always put "clear all" as the first line of your M-file so that you don't have anything in your workspace that may cause problems with your script.

help command
The help command is another critical command to know. If you don't know what a particular command does you can always type "help <command>" and it will display what the command does and how to use it.

help clear;
help help;

lookfor command
The lookfor command is for that time when you don't know what the name of the command you're looking for is. Type "lookfor <keyword>" and it will search the first line of the comments for each command and return matches. Note, it sometime can take awhile.

lookfor fourier;

Vectors
Vectors form the basis of everything in Matlab. Becoming familiar with this concept is a must when working with Matlab. Think of a vector as a 1 X N matrix. Since Matlab is a numerical solver it requires that input to Matlab be completely numerical (not algebraic).

a = [1 2 3]
b = [4 5 6]

a
b

a*b
This command returned an error didn't it? This is because Matlab tried to multiply a 1 X 3 vector times a 1 X 3 vector. Since vectors are really just 1 X N matrices this obviously creates a problem. You need to first decide what you desire from the result. Do you want the two to be multiplied like two matrices or do you want the corresponding elements of each matrix multiplied individually?

The tick mark ' (same key as double quote) is used to imply the transpose of a matrix. Note, the transpose is different from the inverse which is the inv(<variable>) command. So if you desired to multiply a*b like two matrices then you need to transpose the second (or first) matrix.
a*b'
a'*b
b'*a
b*a'
remember matrix multiplication is noncommutative so var1*var2 is not necessarily equal to var2*var1.

If instead you wanted to have each corresponding element of a and b multiplied to form another 1 X 3 matrix (in this case) then you need to use Matlabs "dot notation". The dot notation assumes that you are running the command element by element.

a.*b
a./b

Notice how this command multiplied (or divided) 1*4, then 2*5, then 3*6? Often times you will forget to put the period in your equations, but it will usually give you an error (but not always!).

Polynomials
Polynomials in Matlab are represented in the same manner as vectors (a 1 X N matrix). For instance if we used a from above to form a polynomial meaning:

f = a(1)*x^2 + a(2)*x + a(3) Notice the use of the notation a(<num>), this allows you to return a value of vector with location <num>, also Matlab indices ALWAYS start with 1. All we need to do is use a as we've already defined it:

a

To find the value of a at a certain "x" we need to use the polyval command.

polyval(a,6)

To find the roots of the equation we can use the roots command.

roots(a)

In this case the roots are imaginary (1 +- sqrt(2)*j), again notice the use of the sqrt command, it takes the square-root of it's argument. Also note that both i and j are pre-defined as sqrt(-1).

Matrices
Matrices are handled in much the same way as a vector is handled, really they are the same thing if you think of a vector as a 1 X N matrix.

Matrix definition:
a = [5 9 2; 2 13 9; 12 8 20]
b = [10; 20; 30]

Notice how the semicolon separates rows of a matrix. The same theory as above regarding their multiplication follows here. This time a*b works (a is a 3 X 3 matrix and b is a 3 X 1 matrix).

a*b

In this case the commands:

a.*b
b.*a

yield errors. This is because there is not the same number of elements to do an element by element multiplication. You still can transpose a and multiply it by b.

a'*b

But not the other way around, why?

a*b'     %error

Systems of equations can also be solved by Matlab using matrices. Remember back to using matrices to solve systems of equations, in this case we can solve this system by noting:

 [a]*[x] = [b] => so [x] = inv([a])*[b] where:
 

             a11 a12 a13 .... a1n                 x1                 b1
             a21 a22 a23 .... a2n                 x2                 b2
 [a] =     a31 a32 a33 .... a3n      [x] =    x3      [b] =    b3
             .       .       .         .                    .                    .
             .       .       .         .                    .                    .
             an1 an2 an3 .... ann                 xn                 bn
 

x = inv(a)*b

This brings up the special functions available by Matlab for use with matrices. The zeros command generates a matrix of zeros (N X M) The ones command generates a matrix of ones (N X M) The eye command generates an identity matrix (which can be non-square)

Colon notation
The colon in Matlab has a special significance. It is used to specify a sequence of numbers.

a = 1:5

a

The above command returns a which is the vector [1 2 3 4 5]. This can be useful if you want to show the value of a function at many points.

clear a,b
a = [1 3 2 5]
b = 1:10
polyval(a,b)

In the above example b would increment by 1 each time, instead you may want it to increase by .01.

t = 0:pi/20:2*pi

Matlab returned a lot of information didn't it? Again, remember the semicolon will suppress that if you don't want to see it.

t = 0:pi/20:2*pi;
 

Plotting
This is useful if you want a pretty accurate continuous-time graph

x = sin(t);
y = cos(t);

figure(1);
plot(x);
figure(2);
plot(t,y);
figure(3);
plot(x,y);

Above two useful commands were used, figure and plot. The plot command opens a new windows (called a figure) and displays the data points you supplied. Note, it assumes you wish to connect the points together. Also, the plot command can take either one or two arguments. For one argument it assumes you want the data plotted against it's index (1,2,3....N). If you supply two arguments then the data is plotted one against the other. You can see this by looking at figures one and two and comparing their x-axis.
 

The figure command allows you to switch windows to plot to. In this example if you were to

plot(x);

you'll notice your window that has a circle now changes to display a sine wave, hence replacing the circle drawn previously.

Let's say you wanted to plot sine and cosine on the same windows. There are two ways to accomplish this:

figure(1);
plot(t,x,t,y);

    or

figure(2);
plot(t,x);
hold on;
plot(t,y);
hold off;

The only difference is a color issue, but you can fix that as well by doing the following. Please type help plot for more information.

figure(2);
plot(t,x);
hold on;
plot(t,y,'g');
hold off;

The hold command "holds" the contents of the current figure, while you plot more information on top of it. Simply typing "hold" changes the state of hold (from on to off) but I prefer to be explicit about it so there are no mistakes.

If you wish to use infomation in discrete-time using the stem command can be useful. It is very similar to plot except it doesn't connect the dots.

figure(1);
stem(x);

3D Graphing
This is one of the most impressive features of Matlab (in my opinion). meshgrid is a cool command used to transform vectors into 3 dimensions. Don't worry how this works now, it's really a lot like making t above suitable for 3D.

[x,y] = meshgrid(-2:.1:2, -2:.1:2);
z = x.*exp(-x.^2 - y.^2);
mesh(z);

The [x,y] above is important as in this case meshgrid returns two vectors (notice the comma in the command). This means the first vector returned by meshgrid gets assigned to x and the second to y. If you simply put:

x = meshgrid(-2:.1:2, -2:.1:2);

Only the first item returned by meshgrid would be assigned, which isn't going to work for 3D. Notice that Matlab doesn't return an error it simply ignores the second vector returned. Sometimes you can ignore items returned from commands (or functions), but this often means you don't know how the command is supposed to work. To be safe type help <command> to ensure you are using it properly.

Next the above sequence used the exp command, which you might be familiar with from your calculator, it's simply the e^ function.

Finally we used the mesh command to display the information in a window (quite a fancy graph ehh?). It's much like the plot command for three dimensions.

Now for a little more advanced topics.


Fourier Transform
fft command
The fft command actually returns the Discrete Fourier Transform of the given vector.

clear all;
Start by creating the Gaussian function in the interval from -1 to 1 sampled every 0.0001 units.

x=-4:0.0001:4;

    or alternatively

x=linspace(-4,4, 80000);
 

Define a function

y=exp(-x.^2);

Check your results by plotting y(x)
figure(1);
plot(x,y);
axis([-4,4,0.0,1.0]);
xlabel('x-coordinate');
ylabel('y(x)');
title('y=exp(-x^2)');

F=fft(y);
F=F/max(F);

Now let's try to plot this to see what we get:
figure(2);
plot(F);

That plot doesn't look right, does it? The problem here is that the Fourier Transform produces a complex function of the spatial frequency. Thus the vector F contains complex numbers instead of just real numbers (to see the contents of the vector F, just type F). When you plot a complex vector in MATLAB, it tries to plot the real part against the imaginary part, which is not what we want to do. Instead, what we should do is use the abs function (or real function to get the real part of F) to plot the magnitude of the Fourier Transform |F(y)| as follows:

figure(3);
plot(abs(F));

That looks better, but it's still not quite what we would expect. We see a function that's been split down the middle and then the left and right halves of the plot swapped. You see, when MATLAB computes the FFT, it actually outputs the positive frequency components first and then outputs the negative frequency components. We can correct this by using the fftshift function, which will put the negative frequencies before the positive frequencies. To do this type:

figure(4);
plot(fftshift(abs(F)));
axis([39980,40020,0.0,1.1]);

Voila! We just showed that the Fourier transform of a gaussian is a gaussian function. Let's not forget to label the axes and give the plot a title

xlabel( 'Spatial frequency');
ylabel('|F|');
title('Fourier Transform of a Gaussian');

You can also use the ifft command in much the same way to perform the Inverse Discrete Fourier Transform.

Statistical example
Let's try using another command provided by Matlab called the randn command. It returns gaussian random numbers (rand returns uniformly distributed random numbers).

clear all;
x = randn(1,1000);
hist(x,100);

figure(2);
t=-4:.1:4;
y = exp(-t.^2);
plot(t,y);

Both graphs are pretty similar. Try increasing the number of random numbers inside of randn to 10000, 100000, 1000000. This hist command is similar to plot except it prints a histogram using N bins. In this case the number of bins is 100. You can try changing the number of bins to something smaller or larger if you like.

Programming
Possibly one of the most useful parts of Matlab is that it allows for many C-like functions. This means that in fact you can write a "program" in Matlab.

if, elseif, else structure

The if statement works much like you'd expect. It follows standard logical operations. Valid logical operations are: == (equality), < (less than), > (greater than), <= (less than or equal), >= (greater than or equal), or ~= (not equal).

clear all;
x = randn(1,1);
y = randn(1,1);

    if x > 0
        z = 0;
    elseif y > 0
        z = 1;
    else
        z = 2;
    end

The above example uses two random numbers x and y to determine the outcome of the if block. z will equal zero if x > 0, z will equal 1 if x < 0 and y > 0, otherwise z will equal 2.

for structure
Again, the for structure works in much the same way that you'd expect.

clear all;
num_iter = 20;
    for i = 1:num_iter
        if i == 1;
            x(i) = 0;
        elseif i == 2;
            x(i) = 1;
        else
            x(i) = x(i-1) + x(i-2);
        end
    end

x

The above section uses the for loop to return a Fibonacci sequence.

while structure
The while loop also works the same way that you'd expect it to.
 

clear all;
count = 0;
    while count < 10
        count = count + 1;
    end

count

Remember, many things can be done using Matlabs assignments instead of using explicit if,for,while loops. If this is an option in your case your code will run much quicker with the built-in Matlab functions.

Example:

a = 1:10;
b = 1:10;

    for i = 1:10
        c(i) = a(i) * b(i);
    end

c

Which can obviously be computed in the following ways:
 

clear c;
c = (1:10).^2;

clear c;
c = a.*b;

Always be on the lookout for ways to do things like the above example when you find yourself using loops.

Other References

http://www.glue.umd.edu/~nsw/ench250/matlab.htm

http://www-ccs.ucsd.edu/matlab/

http://www.math.utah.edu/lab/ms/matlab/matlab.html

http://www.math.ufl.edu/help/matlab-tutorial/matlab-tutorial.html

http://www.engin.umich.edu/group/ctm/basic/basic.html

http://www.mines.utah.edu/gg_computer_seminar/matlab/matlab.html

http://users.ece.gatech.edu/~bonnie/book/TUTORIAL/tutorial.html

http://www.owlnet.rice.edu/~ceng303/Matlab/MatCont.html

Copyright ©2005 Eta Kappa Nu. All Right Reserved.