SVD question

Collapse
This topic is closed.
X
X
 
  • Time
  • Show
Clear All
new posts
  • smritibhagat@gmail.com

    #1

    SVD question

    Hi!
    I have been trying to figure this out, and need help...
    How do I compute an orthogonal complement of a matrix using SVD?
    Is there a python lib function or code that does this?
    Thanks!

  • Robert Kern

    #2
    Re: SVD question

    smritibhagat@gm ail.com wrote:[color=blue]
    > Hi!
    > I have been trying to figure this out, and need help...
    > How do I compute an orthogonal complement of a matrix using SVD?[/color]

    On the chance that this is homework, I will only point out that Golub and van
    Loan's book _Matrix Computations_ is essential reading if you are doing, well,
    matrix computations.
    [color=blue]
    > Is there a python lib function or code that does this?[/color]

    numpy has SVD.



    --
    Robert Kern
    robert.kern@gma il.com

    "I have come to believe that the whole world is an enigma, a harmless enigma
    that is made terrible by our own mad attempt to interpret it as though it had
    an underlying truth."
    -- Umberto Eco

    Comment

    • smritibhagat@gmail.com

      #3
      Re: SVD question

      Hi Robert!
      Oh! Its not a homework problem...
      I read the Golub book, it tells me what an orthogonal complement is,
      however, I cannot understand how I can code it.
      I know about svd from numpy's mlab, but I what I want to know is how
      can I compute an orthogonal complement, using SVD or otherwise.
      Thanks for the prompt reply :)

      Comment

      • Robert Kern

        #4
        Re: SVD question

        smritibhagat@gm ail.com wrote:[color=blue]
        > Hi Robert!
        > Oh! Its not a homework problem...
        > I read the Golub book, it tells me what an orthogonal complement is,
        > however, I cannot understand how I can code it.
        > I know about svd from numpy's mlab, but I what I want to know is how
        > can I compute an orthogonal complement, using SVD or otherwise.[/color]

        Assuming A is an array with the vectors as columns and has shape (m, n), then
        the null space of A (= the orthogonal complement of the vectors assuming that
        the set of vectors is linearly independent):

        In [231]: A
        Out[231]:
        array([[ 0., 1.],
        [ 1., 1.],
        [ 2., 1.],
        [ 3., 1.]])

        In [232]: m, n = A.shape

        In [233]: u, s, vh = numpy.linalg.sv d(A)

        In [234]: dot(transpose(u[:, n:]), A)
        Out[234]:
        array([[ 0.00000000e+00, -1.11022302e-16],
        [ -1.42247325e-16, -5.65519853e-16]])

        In [235]: ortho_complemen t = u[:, n:]

        In [236]: ortho_complemen t
        Out[236]:
        array([[-0.38578674, -0.38880405],
        [ 0.22458489, 0.80595386],
        [ 0.70819044, -0.44549557],
        [-0.54698859, 0.02834576]])

        --
        Robert Kern
        robert.kern@gma il.com

        "I have come to believe that the whole world is an enigma, a harmless enigma
        that is made terrible by our own mad attempt to interpret it as though it had
        an underlying truth."
        -- Umberto Eco

        Comment

        • smritibhagat@gmail.com

          #5
          Re: SVD question

          Thanks Robert!
          I was using mlab's svd function, which returns an mxn matrix for u, and
          hence was unable to see how to compute the orthogonal complement!
          I realize that numpy's svd gives the mxm matrix!
          Thanks again.
          -Smriti

          Comment

          Working...