Matrix Manipulations
Parts
We can pull parts of matrices by specifying a row, list of rows
and all row, and a column, list of columns or all the columns.
Try these:
M = magic(5);
M(2,2)
M(1,[2 3])
M(:,3)
M(1:2,4:5)
The colon can be used to specify a range (1:5) of rows or columns
or all (:) the rows or columns.
Arithmetic
MATLAB performs matrix addition, subtraction, multiplication and
multiplication by a scalar using the usual format: +, -, * and *.
If the dimensions don't allow the operation, then there will be an
error message. Try these:
A = rand(3); B = rand(3,4); C = rand(3); D = rand(4);
A*B
B*A
A*C
C*A
A+C
A+B
3*A
C-A
You can also do powers of matrices using ^, e.g. D^2 = D*D, D^3 = D*D*D.
Try
D^10
Functions
MATLAB also allows functions that act on matrices. Some act on
the matrix as a matrix, others as a collection of individual elements.
For example
sum(A) sums each column of A,
max(A) finds the maximum of each column of A, while
abs(A) takes the absolute value of each element of A,
and
cos(A) computes the cosine of each element of A.
Scripts and Functions
Programming in MATLAB is pretty straight-forward as all you
do is put the commands you want to use together in a file.
There are two types of programs that MATLAB uses:
Scripts and Functions.
Both are called "M-Files" because the file name is
whatever.m
To create a M-File, go under the
File menu and choose New M-File.
This will bring up a new window which you can type in. You might
want to move/resize windows so you can see the M-file editor,
the Command Window and your web brouser all at once.
First Script
A script is just a list of MATLAB commands and when it runs, it acts
just like you had typed the commands. You can control the way
it acts either by changing values before you run it, or have it
ask for values, like in this example:
% SCRIPT 1 myname.m by Dr. Collins for GSS:Math
name = input('Enter your name: ','s');
N = input('How many times do you want to see it? ');
for i = 1:N
disp(name)
end
Either type this in, or copy and paste it into the M-file editor window
and save as "myname.m". To run it, go into the Command window
and type
myname
Second Script
Create a new script that does the following:
- Read in a number from the user (call it N)
- Create a N x N matrix (call it A), with entries
A(i,j) = i/j
- Display A and the sum of the columns of A
Save the result as "mymatrix.m" and run it. If you get an
error message, try to figure out what's wrong and fix it.
If you have trouble, try to think about what commands you would
type to get the result.
If you get really lost, I've put a version of this at the end of this file.
First Function
The main two differences between a script and a function are that
- all the calculations and variables in a function are only available
in the function; while in the script they are available in the main
part of MATLAB. This is called the scope of the variables.
- because of the scope, functions start with a line telling which
variables will be passed in and which will be passed out of the
function
A function starts with a line like
function output = nameoffunction(input)
You can have several inputs and several outputs, but we'll start with
one of each. Here's a function that takes as input a value for the
size of a matrix and produces a matrix of that size so that
A(i,j) = i + j:
function M = myfun(N)
% function to compute N x N matrix with entries M(i,j) = i + j
for i = 1:N
for j = 1:N
M(i,j) = i + j;
end
end
Type or copy & paste this into the M-file editor and save it as "myfun.m". The
file and the name of the function should be the same.
To test it, type
myfun(4) in the command window.
Challenges
Here are some additional program ideas you might try. You can
do all the changes in the "myfun.m" M-file.
- Create a more complicated formula for the elements of A.
For example, make A(i,j) = 0 if i<2 or j>4.
- Have the function return A and the sum of the columns of A.
- Pass the function two values N and M. Make the matrix be
N x M.
- Re-write "mymatrix.m" so that it calls "myfun.m" to create
the matrix.
SCRIPT 2 mymatrix.m
% SCRIPT 2 mymatrix.m by Dr. Collins for GSS:Math
N = input('Enter the size of the matrix: ');
for i = 1:N
for j = 1:N
A(i,j) = i/j;
end
end
disp(A)
disp(sum(A))
Mail: