So in this matlab tutorial we're going
to talk about some basic linear algebra
in matlab. The first thing I want to
talk about is how to solve linear
equations. So in general these are in the
form of A(X) + B where a is A matrix, X
is a vector of the variables you want to
solve for, and B is a vector of constants.
So if you remember from linear algebra a
system of linear equations is when you have
more than one variable and the same
number of linear equations. So, in this
example I'm looking at right here the
variables are X, Y, and Z and because there
are three of them I have three different
equations. So one way of writing the
problem is just writing the equations
out explicitly like this, or you can
write it out in matrix form. So, in this
example A = [3 2 -1; 2 -2 4;
-1 0.5 -1];
OK, so that's A, b = [1 -2 -2]; ok. So,
when you're working with equations like
this you might be tempted to do just
simple algebra, so you could say
x = inv(a)*b
because mathematically that works. So, I
can do that
oh and right I have to make b a column
matrix, so a*b.
Sorry, I used the wrong b so inv(A)*b
so I get 1 -2 -2 which
is the answer given on wikipedia. So
sometimes when you try to do something
like this
matlab will give you a warning this is a
very inefficient way of calculating this
answer.
It's matlab already contains algorithms
to solve this problem. So if you remember
from before when we were talking about
operations we were talking about the
division operations and how there's a
forward slash division and a backslash
division. So, this is the use case where
you want to use the backslash division. I
mean if you kind of think about it if
these were scalars you know x would be
b/a, but since they're matrices we write
the answer like this so A\b.
So, it's kind of like A is
underneath the b, right, and so if I do
that you can see that I get the same
answer as when I did inv(a)*b.
So that's how you solve systems of
linear equations in matlab, So now
we're going to talk about some other
linear algebra concepts that you can do
in matlab. One of them is taking the
determinant of a matrix,, and so that is
just a simple function called det, ok.
So remember A = [3 2 -1; 2 -2 4;
-1 0.5 -1]; from the last
example we can also compute the
eigenvalues of a matrix. So, iaeig and
now you know when we compute the
eigenvalues we usually want the
corresponding eigenvectors. So one
interesting thing about matlab that
differs from other languages is that
what is returned by the function is not
set in stone, its dynamic. So if we look
at the documentation for the eig function
we see that if there is one output
parameter it returns this little e, and
the matlab documentation says e
contains the eigenvalues of the matrix a.
But, say I want the eigenvectors also so
you can see these different function
signatures. So if I assign the returned
values of eig to two different variables I
can get back let's read here a
diagonal matrix D of eigenvalues in a
matrix V whose columns are the
corresponding right eigenvectors. So the
eigenvalues are going to be returned in
a matrix called d, and the eigenvectors
are going to be a columns of the matrix
V. So let's try that. [V,D] = eig(A) so
we get a diagonal matrix D which has the
same eigenvalues as before, and then the
eigenvectors are all in V.
So let's just confirm that the
definition of eigenvalues and
eigenvectors holds, so A*V should
equal V*D
right, and so here's another thing
interesting about MATLAB is that if we
want to check if two things are equal we
can generally use the == as
we do in regular programming. So 1 == 1
is 1 which means true, 1 == 0
is false.
So if we do A*V == B*D
we get false which is surprising
because they should be equal
given that that's the definition of
eigenvalues and eigenvectors, but we have
to remember that there is always in
programming some round off error. So if
we subtract A*V - V*D we
should get back a very small number,
alright. So, we do that we see
1x10^14 which is indeed very
small, so for all intents and purposes
they are still equal even though equals
equals returns false. Now so that brings
us to the next thing I want to talk
about which is so we have this matrix A
times V minus V times D which kind of
represents all the differences in those
two matrices, and so we want to ensure
that all the values are small.
Now there are nine different values in
this matrix so it's kind of hard to tell
how big or small it is collectively. So
one thing we want to do sometimes when
we have vectors or matrices is we want
to calculate the distance from the
origin, and so we can do that with
vectors with matrices we call that the
norm, and so typically all the elements
so in a euclidean space for example
it's all the elements
squared, added together, and then you take
the square root. So in matlab there's a
function called norm that does this.
So let's just see what that gives us. So
it gives us one very small numbers, so
5x10^-15 which we again
can use to confirm that it's very close
to zero, so A*V is very close to
equal to V*D, and if you remember
from your math courses there are
different kinds of norms. So I talked
about the Euclidean norm which is a
norm 2, we can actually do a p norm
which is so instead of taking the square
and summing them all together and taking
the square root we do every element to
the power of p, sum them all together
and take the p of root, and
that's just the second argument of norm.
So if i put a 2 there i should get the
same answer because p equals 2 by
default. So you can't use P =3
you can only use P = 1 to
infinity or fro, and so one would be
the Manhattan distance.