行列の逆行列の計算を必要とする最適化アルゴリズムを実行しています。アルゴリズムの目的は、行列Aから負の値を取り除き、新しい行列Bを得ることです。基本的には、同じサイズの既知の正方行列BとCから始めます。Matlabで逆行列を計算する
A = B^-1 * C
か、MATLABで
:A = B\C;
Iはに等しい行列Aを計算することによって開始します
Matlabが私にB\C
がより正確であると言ったので私はこれを使用します。
Aにおける負の値は、次に、2で除算し、Aは、それが行は、この新しいAを使用して1の長さを有していますように、私は新しいBを計算する正規化されている。
(1/N )* A * C '= B^-1
ここで、Nはスケーリング係数(Aの列数)です。この新しいBは、最初のステップで再び使用され、Aのネガがなくなるまでこれらの繰り返しが続きます。
私の問題は、2番目の方程式からBを計算して正規化することです。
invB = (1/N)*A*C'; B = inv(invB);
私はinv(B^-1)
を使用してBを計算してきたが、数回の反復の後、私はB^-1
があるというメッセージを取得開始「単数または悪いスケールに近いです。」
このアルゴリズムは実際にはより小さい行列(約70x70)で動作しますが、約500x500になるとこれらのメッセージが表示され始めます。
inv(B^-1)
を計算する方法はありますか?
がそれに役立つのか? – Darhuuk
'B = eye(N)\ invB'を使うと、私はもはやその方程式の誤差を得ることはできませんが、' A = B \ C'が計算されるたびにエラーが表示されます... – user1259832