views:

648

answers:

3

This is what I need to do-

I have this equation-

Ax = y

Where A is a rational m*n matrix (m<=n), and x and y are vectors of the right size. I know A and y, I don't know what x is equal to. I also know that there is no x where Ax equals exactly y. I want to find the vector x' such that Ax' is as close as possible to y. Meaning that (Ax' - y) is as close as possible to (0,0,0,...0).

I know that I need to use either the lstsq function: http://www.scipy.org/doc/numpy_api_docs/numpy.linalg.linalg.html#lstsq

or the svd function: http://www.scipy.org/doc/numpy_api_docs/numpy.linalg.linalg.html#svd

I don't understand the documentation at all. Can someone please show me how to use these functions to solve my problem.

Thanks a lot!!!

+1  A: 

The updated documentation may be a bit more helpful... looks like you want

numpy.linalg.lstsq(A, y)
David Zaslavsky
Yeah, it looks like x = numpy.linalg.lstsq(A, y) will solve your problem (and based on the return values it appears to solve the least-squares problem by using the SVD). Beware that for m <= n, you are likely to suffer from overfitting, that is, you have enough degrees of freedom to fit y exactly, but only because your model is too flexible and is fitting the noise in addition to the underlying signal.
las3rjock
A: 

SVD is for the case of m < n, because you don't really have enough degrees of freedom.

The docs for lstsq don't look very helpful. I believe that's least square fitting, for the case where m > n.

If m < n, you'll want SVD.

duffymo
For a discussion of the SVD from a computing perspective, take a look at section 2.6 of the numerical recipes book (http://www.nrbook.com/a/bookcpdf.php)
TwentyMiles
A: 
Pete Kirkham
In general matrix multiplication is not commutative, so in general xA != Ax.
las3rjock