Dismiss Notice
Join Physics Forums Today!
The friendliest, high quality science and math community on the planet! Everyone who loves science is here!

Any matlab gurus here?

  1. Aug 29, 2005 #1
    Ok, this should be a simple problem, but its not working out for me.

    I need to use matlab to show that the columns of a 3x3 matrix are orthonormal. I called each of the columns separate vectors, because I thought it would be easier. So now I have 3 3x1 vectors. I want to multiply them together to show they are orthogonal.
    But matlab keeps returning an error. Saying that internal dimensions must match or something. Anyone know why this is happening?

    Also, is there an easy way to show that the vectors are normal? I dont know of any commands to show this.

    Thanks guys.
     
  2. jcsd
  3. Aug 29, 2005 #2

    TD

    User Avatar
    Homework Helper

    Matrix calculates everything with matrices. When you have 2 vectors with dimensions 1x4 (e.g. X and Y) and you want to multiply them, you cannot do X*Y since that would be multiplying a (1x4) with a (1x4) and that's impossible. You can use the dot-operator so that Matlab multiplies them element-by-element rather then seeing it as a matrix multiplication.

    Instead of doing x*y, try x.*y
     
  4. Aug 29, 2005 #3

    SGT

    User Avatar

    To prove that the vectors are orthogonal, their scalar product must be zero. Calling your vectors [tex] V_1, V_2, V_3[/tex], you must find the products:
    [tex]V_1 * V_2^'[/tex], [tex]V_2 * V_3^'[/tex] and [tex]V_3 * V_1^'[/tex].
     
  5. Aug 29, 2005 #4
    Talking about matlab, how do you intergrate area or distance from a point to another with a function?
     
  6. Aug 29, 2005 #5

    SGT

    User Avatar

    If you mean the area below a function, you can use the functions:
    quad Use adaptive Simpson quadrature
    quadl Use adaptive Lobatto quadrature
     
  7. Aug 29, 2005 #6

    uart

    User Avatar
    Science Advisor

    Think about this Morry, if you pre-multiple the matrix by it's transpose (M'*M), what does the occurance of zeros in the off diagonal positions tell you?
     
  8. Aug 29, 2005 #7
    This would show that its orthog wouldnt it? I have to show that the vectors are orthonormal aswell though.

    Thanks a lot for your help guys. I knew there was a little trick I had to do. Cheers.
     
  9. Aug 29, 2005 #8

    SGT

    User Avatar

    In order for the vectors to form an orthonormal basis, they must be orthogonal and unit.
    A unit vector has modulus 1.
    |V| = V'*V
     
  10. Aug 29, 2005 #9
    Thanks SGT. Doing V'*V gives me 1s on the diagonal.

    How would I actually go about orthog. diagonalising this matrix? If I was doing this by hand, I would just divide by its modulus, but I cant find the moduli of these vectors using matlab.

    I have multiplied the 3x1 vectors to try and get them to equal 0, but they are not equalling 0.

    Thanks guys.
     
  11. Aug 30, 2005 #10

    SGT

    User Avatar

    If [tex]P[/tex] is an orthogonal matrix and [tex]B = P^{-1}AP = P'AP[/tex], then [tex]B[/tex] is said orthogonally similar to [tex]A[/tex].
    If [tex]A[/tex] is real and symetric, it is orthogonally similar to a diagonal matrix whose diagonal elements are the eigenvalues of [tex]A[/tex].
    In Matlab the command [tex][V,D] = eig(A)[/tex] returns two matrices. [tex]D[/tex] is a diagonal matrix containing the eigenvalues of [tex]A[/tex] and is orthogonally similar to [tex]A[/tex]. [tex]V[/tex] is a matrix containing in its columns the eigenvectors of [tex]A[/tex].
    We have [tex]D = V^{-1}AV = V'AV[/tex]
     
  12. Aug 31, 2005 #11
    Thanks again SGT.

    I am still unsure about how to show that my eigenvectors are orthonormal? I tried multiplying them like you mentioned, but they come out as numbers, not zero. Also, is there a command that finds the modulus of the vectors?
     
  13. Aug 31, 2005 #12

    SGT

    User Avatar

    The eigenvectors are not necessarilly orthonormal. All it is required is that they are linearly independent in order to form a basis.
    To my knowledge there is no single command to calculate the modulus of a vector, but the command V´*V is so simple that I think any other command would be longer to type.
     
  14. Aug 31, 2005 #13
    v'v or vv' depending on if you used columns or vectors. or i believe there is a norm function. use the condition v'v or vv' < 1+e where e is a sufficiently small threshold

    orthonormal system:
    vi'vi < 1+e
    abs(vi'vj)< 0+e
     
  15. Sep 1, 2005 #14
    Cheers everyone, I finally got the q out. I think I was being a bit of a dumbarse. :)
     
Know someone interested in this topic? Share this thread via Reddit, Google+, Twitter, or Facebook

Have something to add?