2

これは私がする必要があることです-

私はこの方程式を持っています-

Ax = y

ここで、A は有理 m*n 行列 (m<=n) であり、x と y は適切なサイズのベクトルです。A と y は知っていますが、x が何に等しいかはわかりません。また、Ax が正確に y に等しい x は存在しないことも知っています。Ax' が y にできるだけ近くなるように、ベクトル x' を見つけたいと考えています。(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ΣVT _ _ _

ここで、 U U T = I ; V V T = I

したがって、

x A = y

それから

xUΣVT = y _ _ _ _

xUΣVTV = y V _ _ _ _ _

xUΣ = yV _ _ _

UTxΣ = yV _ _ _ _

= Uy V _ _

x = Σ - 1UTy V _ _

x = VTΣ - 1UTy _ _ _ _

したがって、 AのSVDが与えられると、 xを得ることができます。


一般的な行列AB!= BA場合でも、ベクトルxの場合はx U == UTxです

たとえば、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とUTの行の内積であり、行の関係を見ると、かなり明白です。および転置中の列

于 2009-05-16T13:37:08.153 に答える