2

这是我需要做的-

我有这个等式-

轴 = y

其中 A 是一个有理 m*n 矩阵 (m<=n),x 和 y 是正确大小的向量。我知道A和y,我不知道x等于什么。我也知道在 Ax 正好等于 y 的地方没有 x。我想找到向量 x' 使得 Ax' 尽可能接近 y。这意味着 (Ax' - y) 尽可能接近 (0,0,0,...0)。

我知道我需要使用 lstsq 函数: http ://www.scipy.org/doc/numpy_api_docs/numpy.linalg.linalg.html#lstsq

或 svd 函数: http ://www.scipy.org/doc/numpy_api_docs/numpy.linalg.linalg.html#svd

我根本看不懂文档。有人可以告诉我如何使用这些功能来解决我的问题。

非常感谢!!!

4

3 回答 3

2

更新的文档可能会更有帮助......看起来像你想要的

numpy.linalg.lstsq(A, y)
于 2009-05-16T13:33:44.700 回答
0

SVD 适用于 m < n 的情况,因为您实际上没有足够的自由度。

lstsq 的文档看起来不是很有帮助。我相信这是最小二乘拟合,对于 m > n 的情况。

如果 m < n,您将需要SVD

于 2009-05-16T13:34:35.790 回答
0

矩阵 A 的 SVD 为您提供正交矩阵 U 和 V 以及对角矩阵 Σ,使得

A = U Σ V T

其中 U U T = I ; V V T =

因此,如果

x A = y

然后

x U Σ V T = y

x U Σ V T V = y V

x U Σ = y V

U T x Σ = y V

x Σ = U y V

x = Σ -1 U T y V

x = V T Σ -1 U T y

所以给定A 的SVD你可以得到x


尽管对于一般矩阵AB != BA,对于向量x来说x U == U T x是正确的。

例如,考虑x = ( x, y ), U = ( a, b ; c, d ):

x U = ( x, y ) ( a, b ; c, d )

= ( xa+yc, xb+yd )

= ( ax+cy, bx+dy )

= (a, c; b, d) (x; y)

= U T x

当您查看 x U 中的值是x和 U的列的点积,以及U T x中的值 是x和 U T 的行以及行的关系,这是相当明显的和换位的列

于 2009-05-16T13:37:08.153 回答