3

私はwikiの公式に従います:

http://en.wikipedia.org/wiki/Pseudo_inverse

疑似逆数を計算しますが、正しい結果を受け取ることができません。theta例:方程式を見つけたい: Y=R*theta、私はmatlabに書いています:

R = -[1/sqrt(2) 1 1/sqrt(2) 0;0 1/sqrt(2) 1 1/sqrt(2);-1/sqrt(2) 0 1/sqrt(2) 1];
% R is 3x4 matrix

Y = [0; -1/sqrt(2);-1]; %Y is 3x1 matrix

B1 = pinv(R);
theta1 = B1*Y;
result1 = R*theta1 - Y

B2 = R'*inv(R*R');
theta2 = B2*Y;
result2 = R*theta2 - Y

これが結果です。

   result1 =
   1.0e-15 *
   -0.1110
   -0.2220
   -0.2220
Warning: Matrix is close to singular or badly scaled.
Results may be inaccurate. RCOND =  1.904842e-17. 
> In pseudoinverse at 14 
result2 =
    0.1036
   -0.1768
   -0.3536

明らかに、 theta2 は間違った答えですが、その方法と理由はわかりません。私は多くの本を読み、wikiと同じ公式を教えてくれます。手で疑似逆を行うのを手伝ってくれる人はいますか? ありがとう !

4

3 に答える 3

4

代数は、疑似逆行列を使用してそのような方程式を解くことができることを示していますが、代数は有限精度の計算を考慮していません。

実際、行列乗算法を使用した疑似逆行列の計算は、数値的に不安定であるため、適切ではありません。\次のように、行列の除算に演算子を使用します。

theta = R \ Y;

代数的には、行列の除算は疑似逆行列による乗算と同じです。しかし、MATLAB の実装ははるかに安定しています。

安定した方法を含む詳細については、次を参照してください。

于 2013-05-24T19:01:22.323 に答える
1

ベンがすでに言ったように、逆行列は数値的に不安定です。行列の実際の反転が必要でない限り、この関数invはお勧めしません。たとえば、このリンクを参照してください。の誤用invは、数値線形代数の新入生が最もよく犯す間違いです。

invほとんどの線形代数計算では、数値的に安定したアルゴリズムを使用して回避できます。たとえば、線形ソルバーには LU 分解、通常の最小二乗法には QR または SVD 法があります。

于 2013-05-24T21:00:35.390 に答える