Linear Algebra in MATLAB
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 1×10^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 5×10^-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.