1

私には2つの問題があります。2つの方程式を計算する必要があります。

X = A-inv(B)* Y * inv(B)

X = Y + A'* inv(B)* A

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

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

どうもありがとうございます。

4

2 に答える 2

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)の単純な「行列除算」だけで、完全な逆行列を計算しない方が望ましい場合があります。 。

于 2011-06-17T00:27:35.950 に答える
0

inv(B)をメモします。つまり、Bが変更されたときにのみ反転し、その逆を維持します。

Bへの変更が小さい場合は、デルタ近似を使用できる可能性があります。

于 2009-06-18T15:47:17.027 に答える