449,144 Members | 1,286 Online Need help? Post your question and get tips & solutions from a community of 449,144 IT Pros & Developers. It's quick & easy.

# SVD question

 P: n/a 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! Mar 18 '06 #1
4 Replies

 P: n/a sm**********@gmail.com wrote: Hi! I have been trying to figure this out, and need help... How do I compute an orthogonal complement of a matrix using SVD? 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. Is there a python lib function or code that does this? numpy has SVD. http://numeric.scipy.org -- Robert Kern ro*********@gmail.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 Mar 18 '06 #2

 P: n/a 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 :) Mar 18 '06 #3

 P: n/a sm**********@gmail.com wrote: 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. 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 : A Out: array([[ 0., 1.], [ 1., 1.], [ 2., 1.], [ 3., 1.]]) In : m, n = A.shape In : u, s, vh = numpy.linalg.svd(A) In : dot(transpose(u[:, n:]), A) Out: array([[ 0.00000000e+00, -1.11022302e-16], [ -1.42247325e-16, -5.65519853e-16]]) In : ortho_complement = u[:, n:] In : ortho_complement Out: array([[-0.38578674, -0.38880405], [ 0.22458489, 0.80595386], [ 0.70819044, -0.44549557], [-0.54698859, 0.02834576]]) -- Robert Kern ro*********@gmail.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 Mar 18 '06 #4

 P: n/a 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 Mar 18 '06 #5

### This discussion thread is closed

Replies have been disabled for this discussion. 