2009-05-27 16 views
1

私は2つの問題があります。 INV(B)* Y *のINV(B)X = A - inv(B)* Y * inv(B)とX = Y + A '* inv(B)* Aを計算する方法はありますか?

X = Y + A」*のINV(B)*

-

X = A:私は2つの方程式を計算する必要が

ここで、A、BおよびYは既知のp * p行列です(pは小さくても大きくてもかまいません)。行列はどんな構造もなく非常に密である(もちろんBは非特異的であることを除く)。

行列Bを反転することなく、これらの方程式でXを解くことは可能ですか?私はこれらの方程式をn回計算する必要があり、nは数百または数千であり、すべての行列は時間とともに変化する。

ありがとうございました。

+0

私の代数は良いかもしれませんが、一般的なケースはありません。より多くの文脈を与えるなら(何にXが必要ですか?AとBの間に関係がありますか?)、それにはまだ何かがあるかもしれません。 – bayer

+0

数学に関連するがプログラミングに関連していない。そこに数学Q&Aのサイトがたくさんあります、ごめんなさい:( –

答えて

0

メモize inv(B)、つまり変更があったときにBを反転し、その逆を保持します。

Bの変更が小さい場合は、おそらくデルタ近似を使用できます。

1

次の用語で、あなたの行列Bに、あなたの更新を表現することができる場合:

Bnew = B + u*s*v 

、あなたが明示的にシャーマン・モリソン・ウッドベリーの式を用いinv(B)にアップデートを表現することができます。

inv(B + u*s*v) = inv(B) - inv(B)*u*inv(s + v*inv(B)*u)*v*inv(B) 

uとvがそれぞれベクトル(列と行)で、sがスカラーの場合、この式は簡単になります。

inv(B + u*s*v) = inv(B) - inv(B)*u*v*inv(B)/(s + v*inv(B)*u) 

inv(B)を一度計算してから、それが追加の反転なしで変更されたときに更新するだけで済みます。

"p"に対して "n"の大きさに応じて、yと(ynew - y)またはaと(anew - a)の完全な逆数、単純な "行列分割" "あなたの問題です。

関連する問題