From charlesreid1

Revision as of 18:57, 13 April 2011 by Admin (talk | contribs)

Notes on Matlab based on two CHEN 1703 lectures I gave in Fall 2009.

Matrices

Basics

See Introduction to Matlab

Special matrices/vectors

Name (matrix type) Matlab syntax Result
Ones
>> ones(3,2);
$ \left[ \begin{array}{cc} 1 & 1 \\ 1 & 1 \\ 1 & 1 \end{array} \right] $
Zeros
>> zeros(3,1);
$ \left[ \begin{array}{cc} 0 \\ 0 \\ 0 \end{array} \right] $
Eye (identity)
>> eye(3);
$ \left[ \begin{array}{ccc} 1 & 0 & 0 \\ 0 & 1 & 0 \\ 0 & 0 & 1 \end{array} \right] $
Rand (random numbers)
>> rand(3,2);
$ \left[ \begin{array}{cc} 0.21955 & 0.27560\\ 0.42385 & 0.62212\\ 0.53343 & 0.69182 \end{array} \right] $
Meshgrid
>> [x,y] = meshgrid(1:4,1:4);
$ x = \left[ \begin{array}{cccc} 1& 2& 3& 4\\ 1& 2& 3& 4\\ 1& 2& 3& 4\\ 1& 2& 3& 4 \end{array} \right] $

$ y = \left[ \begin{array}{cccc} 1& 1& 1& 1\\ 2& 2& 2& 2\\ 3& 3& 3& 3\\ 4& 4& 4& 4 \end{array} \right] $

Magic (magic square matrix)

(The sum of each row and column is equal to the same value)

>> magic(4);
$ \left[ \begin{array}{cccc} 16& 2& 3& 13\\ 5& 11& 10& 8\\ 9& 7& 6& 12\\ 4& 14& 15& 1 \end{array} \right] $
Linspace
>> linspace(A,B,N)
$ \left[ A + \left( \frac{i}{N-1} \right) B \right] \qquad i=0, \dots, N-1 $
Logspace
>> logspace(A,B,N)
$ \left[ 10^{A} + 10^{ \left( \frac{i}{N-1} \right) B } \right] \qquad i=0, \dots, N-1 $

Functions

Function name Matlab syntax/output
det Returns the determinant of a matrix:
>> A=magic(4)
A =

   16    2    3   13
    5   11   10    8
    9    7    6   12
    4   14   15    1

>> det(A)
ans = -1.4495e-12
find
flipud
fliplr
length
max
min
repmat This function creates a new matrix consisting of several copies of an existing matrix.
>> A = magic(3)
A =

   8   1   6
   3   5   7
   4   9   2

>> repmat(A,2,2)
ans =

   8   1   6   8   1   6
   3   5   7   3   5   7
   4   9   2   4   9   2
   8   1   6   8   1   6
   3   5   7   3   5   7
   4   9   2   4   9   2
size
sort

Matrix operators

Addition, subtraction

Addition/subtraction can be done with vectors or matrices as with numbers:

>> A=ones(2,3)
A =

   1   1   1
   1   1   1

>> B=ones(2,3)
B =

   1   1   1
   1   1   1

>> C = A + B
C =

   2   2   2
   2   2   2

>> C = A - B
C =

   0   0   0
   0   0   0

Multiplication, division

Multiplication of matrices requires that the inner dimensions must match - i.e. $ (M \times N) \times (N \times P) $. If this criteria is met, then two matrices can be multiplied using normal multiplication syntax.

>> A
A =

   0.85645   0.86793   0.39228
   0.22329   0.82611   0.40042
   0.79097   0.45921   0.30861

>> B
B =

   0.976938   0.200895   0.239939
   0.300156   0.205414   0.963250
   0.396226   0.425022   0.041877

>> C = A*B
C =

   1.25264   0.51707   1.05796
   0.62476   0.38474   0.86609
   1.03284   0.38440   0.64504

Division of matrices is defined as $ A/B = A B^{-1} $. The same criteria applies, the dimensions of $ A $ must match the dimensions of $ B^{-1} $. If they do, then division can be done using normal division syntax.

>> A = rand(3,3)
A =

   0.85645   0.86793   0.39228
   0.22329   0.82611   0.40042
   0.79097   0.45921   0.30861

>> B = rand(3,3)
B =

   0.976938   0.200895   0.239939
   0.300156   0.205414   0.963250
   0.396226   0.425022   0.041877

>> 

>> C = A/B
C =

   0.015664   0.321640   1.879233
  -0.763591   0.516569   2.054946
   0.435077   0.177713   0.788906

>> C = A*inv(B)
C =

   0.015664   0.321640   1.879233
  -0.763591   0.516569   2.054946
   0.435077   0.177713   0.788906

Colon operator

The colon operator can be used to create a vector, similar to linspace:

>> 1:10
ans =

    1    2    3    4    5    6    7    8    9   10

The interval between elements can also be specified by using two colons:

>> (1:0.5:10)'
ans =

     1.0000
     1.5000
     2.0000
     2.5000
     3.0000
     3.5000
     4.0000
     4.5000
     5.0000
     5.5000
     6.0000
     6.5000
     7.0000
     7.5000
     8.0000
     8.5000
     9.0000
     9.5000
    10.0000

>> (1:0.8:10)'
ans =

     1.0000
     1.8000
     2.6000
     3.4000
     4.2000
     5.0000
     5.8000
     6.6000
     7.4000
     8.2000
     9.0000
     9.8000

The vectors with intervals of 1 can be used to access elements of a vector or a matrix. To access indices M through N, the syntax M:N can be used:

>> A = magic(4)
A =

   16    2    3   13
    5   11   10    8
    9    7    6   12
    4   14   15    1

>> A(1:2,1:2)
ans =

   16    2
    5   11

The colon operator by itself can also indicate an index ranging the entire length of the vector or matrix:

>> A(1,:)
ans =

   16    2    3   13

Component-wise operators

Component-wise multiplication and division can also be done. For two vectors $ a_{i}, b_{j} $ or two matrices $ A_{i,j}, B_{m,n} $ and some arbitrary operator $ \lozenge $, the component-wise vector operation is defined as

$ \begin{array}{rcl} c_{k} &=& a_{k} \, \lozenge \, b_{k} \end{array} $

and the component-wise matrix operation is defined as

$ \begin{array}{rcl} C_{p,q} &=& A_{p,q} \, \lozenge \, B_{p,q} \end{array} $

This component-wise operation can be done in Matlab by putting a dot in front of the operator: $ .\lozenge $

>> A
A =

   0.85645   0.86793   0.39228
   0.22329   0.82611   0.40042
   0.79097   0.45921   0.30861

>> B
B =

   0.976938   0.200895   0.239939
   0.300156   0.205414   0.963250
   0.396226   0.425022   0.041877

>> C = A.*B
C =

   0.836694   0.174363   0.094122
   0.067023   0.169693   0.385709
   0.313402   0.195175   0.012924

>> C = A./B
C =

   0.87666   4.32032   1.63489
   0.74392   4.02167   0.41570
   1.99626   1.08044   7.36944

However, if a component-wise operator operates on two vectors or matrices, the vectors or matrices must be the same size. Otherwise, the operator will not work.

This can also be done with exponential operators:

>> A=rand(4,1)*10
A =

   5.91734
   0.22397
   8.80927
   6.08892

>> A.^2
ans =

   35.014866
    0.050161
   77.603268
   37.074953

Functions

If a vector or matrix is fed to a built-in Matlab function such as sin() or exp(), the function operates component-wise on the vector or matrix. For example:

>> x = ( 0:pi/4:2*pi )'
x =

   0.00000
   0.78540
   1.57080
   2.35619
   3.14159
   3.92699
   4.71239
   5.49779
   6.28319

>> sin(x)
ans =

   0.00000
   0.70711
   1.00000
   0.70711
   0.00000
  -0.70711
  -1.00000
  -0.70711
  -0.00000

Combined with the colon operator or linspace function, this provides a very easy way to evaluate a function at many points.

Meshgrid can also be used to evaluate a function of two variables, in a form that is convenient to plot:

>> [x,y] = meshgrid(0:pi/4:2*pi, 0:pi/4:2*pi);
>> z = x .* sin( x - y );

This results in a set of 3 matrices that are particularly convenient to plot using surf or contourf (more on these plotting functions below).

>> surf(x,y,z)



See also