This document provides a brief introduction to MATLAB, outlining basic features of use in COMP 205. MATLAB has extensive on-line help available through the following commands, which may be typed after the ``>>'' prompt:
The extent to which you use MATLAB beyond these requirements is up to you. For those who would like to explore the full potential of MATLAB, its ``programming language'' permits one to largely avoid languages such as C, Pascal or FORTRAN, for example. One warning, however. You may discover built-in numerical functions that you think implement a portion of one or more of your assignments. You should use these functions only for checking your answers. Please check with me before assignment due dates if you need this rule clarified for special MATLAB functions.
We have a limited number of MATLAB licenses available, so please respect the needs of other users and exit from MATLAB rather than leaving it idle for extended periods of time. To save the current state of a MATLAB session and initialize a subsequent MATLAB session with the same variables, use the commands save and load. Directory commands pwd and cd are used to display and change the current working directory.
While reading the remainder of this document you are strongly encouraged start MATLAB and experiment with the different features described. Be sure to explore some of the MATLAB Expo demos too!
To recall or edit previous command lines MATLAB provides command line editing
using Emacs-style keystrokes. Using the ‚ and Ø keys you
can cycle through previous commands. The ¨ and Æ keys
move the cursor left and right along the current
command line. In its default mode MATLAB
inserts characters before the cursor. Cntrl-T toggles the
command line editor between the insert and over-write modes.
The delete key eliminates the character lying under the cursor.
Once all necessary corrections (if any) have been made to the
command line, it can be entered by hitting <rtn> with the cursor in any
position. For more information consult the cedit help page by
entering
>> help cedit.
To terminate a MATLAB session
enter the command
>> exit
or
>> quit. Please quit when not using MATLAB to free up licenses.
MATLAB statements typically take one of two forms:
variable = expression or
expression
All variable (and function) names consist of a letter followed by any number of numbers, letters and underscores. MATLAB is case sensitive and only the first 19 characters of any name are significant.
Expressions are composed from operators, function calls and variable names. A carriage return normally signifies the end of a statement, causing MATLAB to interpret the command and print its result. If the last character of a statement is a ; (semicolon), however, display of the result is suppressed. This feature may be especially useful when the result of a computation is a large matrix. Finally, several statements separated by commas may be placed on a single line.
When an expression is not explicitly assigned to a variable with the assignment operator ( = ), MATLAB automatically stores the result in the special variable ans.
During a MATLAB session you may forget the names of variables stored in your workspace. The command who lists the name of all your variables. If you want to know their size as well, use the command whos. By default MATLAB stores all variables until the session is terminated. To remove a variable from the workspace use the command clear var_name. WARNING: clear with no arguments removes all variables from the workspace.
At any time you can interrupt the computation of a MATLAB statement with Cntrl-C.
The easiest way to enter a matrix into MATLAB is to provide an explicit list of elements enclosed in square brackets [ ]. MATLAB uses the following conventions:
For example, entering the assignment statement
>> A = [1 2 4.5; 8/2.0 6 5]
results in the output
A = 1.0000 2.0000 4.5000 4.0000 6.0000 5.0000The 2×3 matrix is saved in variable A for future reference. If you want to see the contents of this or any other variable, simply enter its name as a command. To reference individual elements enclose their subscripts in parentheses after the variable name in the usual fashion.
ans = 5
It is important to realize that MATLAB distinguishes between row and column
vectors. [1 2 3] is a row vector, while [1; 2; 3] is a column
vector. Column vectors can also be created by applying
MATLAB's transpose operator
' (prime) to a row vector. For example
>> [1 2 3]'
produces
ans = 1 2 3The transpose operator may be applied to matrices of any dimension.
4 | -189 | .032 |
-2.21e-23 | 0.972E18 | 0.000001 |
To build expressions, MATLAB provides the usual arithmetic operators.
+ | addition | - | subtraction | * | multiplication |
/ | right division | \ | left division | ^ | power |
MATLAB uses IEEE 754 double precision floating point
arithmetic to perform its computations. Although MATLAB stores the full
precision of all computations, by default it displays results in a 5 digit
fixed point format. The output format can be changed using the
format command. The following example prints the result of entering the
vector [5/7.3 7.7432e-7] under different format settings.
format short
0.6849 0.0000
format short e
6.8493e-01 7.7432e-07
format long
0.68493150684932 0.00000077432000
format long e
6.849315068493150e-01 7.743200000000001e-07
You can learn more about the format command by entering help format.
The remainder of the examples in this guide assume that the ``short e''
format has been chosen.
ans = 7.0711e-01pi is an example of a function that does not require parameters and simply returns a commonly used constant.
ans = 3.1416Other functions are available in libraries of M-files grouped into toolboxes. Section briefly describes how to create your own functions.
So far we have only seen functions that return a single matrix, but some
functions return two or more matrices. To save these matrices, we surround
the output variables by brackets [ ] and separate them by commas.
For example,
>> [V,D] = eig(A)
returns the eigenvectors and eigenvalues of A in matrices V and D.
Several additional MATLAB functions are described in the remainder of this guide. For extensive lists of MATLAB functions consult the MATLAB helpdesk or explore the list of topics provided by entering the command help with no arguments. The MATLAB demos provide examples of the use of many interesting functions.
The operators + and - permit the addition and subtraction of matrices,
and are defined whenever the matrices have the same dimension.
For example, the following is a valid expression.
>> [1 2 3; 4 5 6] + [3 2 1; 1 1 1];
The exception to this rule is the addition (subtraction) of a scalar to
(from) a matrix. In this
case the scalar is added to or subtracted from each
element of the matrix individually.
>> [1 2 3] + 1
ans = 2 3 4
The multiplication of two matrices, denoted by A*B, is defined whenever
the inner dimensions of the operands A and B are equal. For example,
if
C=[1 2 3; 4 5 6], D=[1 1 1; 2 2 2], x=[1 1 1]'
then C*x, x'*x (an inner product), x*x' (an outer product)
and C*D' are defined, but C*D is not.
(Give these examples a try and be sure you understand how MATLAB interprets
them.) In the special case when one of the operands is a
scalar, each element of the matrix is multiplied by the scalar.
It is now time to explain the reason for MATLAB's two division operators. If A is a square nonsingular matrix then A\B and B/A formally correspond to the left and right multiplication of B by A-1. (Note: MATLAB does not actually compute the inverse of A when evaluating these expressions.) These expressions are used to solve the following types of systems of equations.
Whenever B has as many rows as A, left division is defined. If A is a square nonsingular matrix and b is a vector with as many rows, MATLAB evaluates the expression x = A\b (the solution to Ax = b) by factoring A with Gaussian elimination and then solving two triangular systems to compute x. When A is not square, MATLAB factors A using Householder orthogonalization and the factors are used to solve the under-determined or over-determined system of equations in the least squares sense. This can lead to surprising results if the wrong slash is used or if the dimensions of your matrices are wrong.
Finally, the expression A^p raises A to the pth power. This operation is only defined if A is square and p is an scalar. For example, A^2 is equivalent to A*A, although MATLAB does not always compute powers with simple matrix multiplication.
The operator .* denotes array multiplication and is defined whenever
the two operands have the same dimensions. For example
>> A=[1 2 3; 4 5 6] ; B = [2 2 2; 3 3 5]; C=A.*B
results in
C = 2 4 6 12 15 30Similarly, A.\B and A./B provide the left and right element-by-element division. Raising each element of a matrix to the same power is accomplished by the .^ operator.
Most standard MATLAB functions operate on a matrix element-by-element. For
example
>> cos(C)
ans = -4.1615e-01 -6.5364e-01 9.6017e-01 8.4385e-01 -7.5969e-01 1.5425e-01If you create your own functions (See Section .) you should keep in mind that MATLAB assumes that a matrix (or a vector) can be passed to it.
Vectors are easily generated with MATLAB's colon
``:'' notation.
For example, the expression 1:5 creates the following row vector.
1 2 3 4 5
You can also create a vector using an increment other than one.
For example, 1:2:7 results in the vector
1 3 5 7
The increment may be negative and need not be an integer.
It is very easy to create a table using the colon notation.
Experiment with the commands
>> x=(0:pi/4:pi)'; y=cos(x); AA=[x y]
for a demonstration of this technique.
MATLAB permits users to easily manipulate the rows, columns, submatrices
and individual elements of a matrix. The subscripts of matrices can be vectors
themselves.
If x and v are vectors then x(v) is equivalent
to the vector [x(v(1)), x(v(2)), º] . Subscripting a matrix with
vectors extracts a submatrix from it. For example,
suppose A is an 8×8 matrix. A(1:4, 5:8) is the 4×3
submatrix extracted from the first 4 rows and last 3 columns of the matrix.
When the colon operator is used by itself, it denotes all of the rows or
columns of a matrix. Using the result of the table above
>> AA(:,1)
produces the first column of matrix AA.
ans = 0 7.8540e-01 1.5708e+00 2.3562e+00 3.1416e+00
Users are able to tailor MATLAB by creating their own functions and scripts of MATLAB commands and functions. Both scripts and functions are ordinary ASCII text files external to MATLAB. The name of each file must end in ``.m'' and must be found on MATLAB's search path. (It is easiest to start MATLAB from the directory containing your M-files. See also the command path.) By default while an M-file is executing its statements are not displayed. This default behavior can be changed using the echo command.
A script may contain any sequence of MATLAB statements, including references to other M-files. It is invoked like any other command without arguments and acts on the variables of the workspace globally. Each command in the file is executed as though you had typed it into MATLAB. Most of the demos provided by MATLAB are simply scripts.
The first line of a function M-file starts with the word function and declares the name of the function and its input and output parameters. All input parameters and variables defined within the file are local to the function. Figure provides a simple example from the MATLAB User's Guide.
|
If we type this function into a file called mymean.m, then we can call mymean
like any other MATLAB function.
>> mymean(1:99)
ans = 50The parameter supplied to mymean is passed by value (not reference) to the local variable x. The variables m,n,y are also local to mymean and do not exist after it returns. An M-file function does not alter the value of variables in the workspace unless explicit global declarations are made.
Let's start by plotting sin between 0 and pi
using plot. First we must create
two vectors containing the x and the y coordinates to the points we will use
to create our plot.
>> x=0:pi/100:2*pi;
>> y=sin(x);
To create our plot of sin we enter the following statement.
>> plot(x,y,'-')
The minus sign in single quotes tells MATLAB we want a solid line.
Other line types (and colors) can be specified in this fashion.
Enter help plot for more information.
MATLAB permits the addition of another plot to the same graph by entering the
command
>> hold on
Let's also plot the value of sin at
0,pi/4,pi/2,º,2*pi on our graph, but this
time instead of a solid line we will just mark each point with a plus sign.
>> plot(0:pi/4:2*pi,sin(0:pi/4:2*pi),'+')
Perhaps we also want to add a title and axis labels to the graph.
>> title('Our sine plot from 0 to pi')
>> xlabel('x')
>> ylabel('sin(x)')
Text can also be added to a plot at user specified coordinates with the
commands text and gtext.
Your final graph should look something like Figure .
When you are finished with the graph enter the command
>> hold off
so that subsequent graphics do not include the current plot.
The MATLAB command fplot is similar to plot but accepts the name
of a function in single quotes and an abscissa range. It adaptively
samples the function at enough points to give a representative graph
and then plots the results.
As an example let's plot sin again.
>> fplot('sin', [0,2*pi])
To create a hardcopy of the current figure we use the MATLAB command
print. For example, to create an PostScript version of
our figure enter the following command.
>> print file_name.ps -dps
The resulting file can be printed on
any PostScript printer using the Unix command lpr or previewed using
ghostview. To create encapsulated PostScript suitable for
inclusion into documents substitute -deps for
-dps and file_name.eps for file_name.ps.
Directory commands
pwd and cd are used to display and change the current working
directory.
We may create data outside MATLAB and want to import it for plotting. This is accomplished by placing the data pairs (or triples) into an ASCII file with each pair (or triple) of data points on a separate line separated by blanks. (In other words, each vector of data to be imported is placed in a separate column of the file.) Be sure that numbers in scientific notation are compatible with MATLAB's format. (See Section 5.)
To import the data enter the following command.
>> load file_name
Variable file_name is now a matrix containing your data. To check
if it was properly imported, simply enter file_name. To extract
the vectors of data from the columns of the matrix use the colon notation
as previously discussed.
For example, MATLAB provides many additional functions and a programming language, including looping constructs, conditional statements, relational operators and logical operators. If you learn some of these you can do all the programming for COMP 205 in MATLAB. Note: if you intend to create complex MATLAB functions check out the description of MATLAB's debugger.
Although we will not get into them, MATLAB has various toolboxes for image processing, simulation, etc. MATLAB also has an API that allows it to call functions written in C/C++ or FORTRAN, and has an engine that allows functions written in C/C++ to call MATLAB to carry out computations.