逆行列の計算を必要とする最適化アルゴリズムを実行しています。このアルゴリズムの目的は、行列 A から負の値を取り除き、新しい行列 B を取得することです。基本的に、同じサイズの既知の正方行列 B と C から始めます。
まず、次の行列 A を計算します。
A = B^-1 * C
またはMatlabで:
A = B\C;
私がこれを使用するのは、MatlabB\C
が よりも正確であると私に言ったからですinv(B)*C
。
次に、A の負の値が 2 で除算され、行の長さが 1 になるように A が正規化されます。この新しい A を使用して、新しい B を次のように計算します。
(1/N) * A * C' = B^-1
ここで、N は単なる倍率 (A の列数) です。この新しい B は最初のステップで再び使用され、これらの反復は A のネガがなくなるまで続きます。
私の問題は、2 番目の方程式から B を計算し、それを正規化する必要があることです。
invB = (1/N)*A*C'; B = inv(invB);
を使用して B を計算してきましたがinv(B^-1)
、数回繰り返した後、B^-1
「特異点に近いか、スケーリングが悪い」というメッセージが表示されるようになりました。
このアルゴリズムは、実際には小さなマトリックス (約 70x70) で機能しますが、約 500x500 になると、これらのメッセージが表示され始めます。
を計算するより良い方法はありますinv(B^-1)
か?