可能的计算方法X = A - inv(B)* Y * inv(B)和X = Y + A'* inv(B)* A

时间:2009-05-27 07:35:24

标签: matrix inversion

我有两个问题。我必须计算两个方程式:

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

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

其中,A,B和Y是已知的p * p矩阵(p可以小或大,取决于情况)。矩阵非常密集,没有任何结构(当然B除非是单数)。

是否可以在不反转矩阵B的情况下求解这些方程中的X?我必须计算这些方程n次,n为数百或数千,并且所有矩阵随时间变化。

非常感谢。

2 个答案:

答案 0 :(得分:1)

如果您可以通过以下条款表达对矩阵B的更新:

Bnew = B + u*s*v

然后您可以使用Sherman-Morrison-Woodbury公式明确表达对inv(B)的更新:

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

如果你和v是向量(分别是列和行)并且s是标量,那么这个表达式简化了:

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

您只需计算inv(B)一次,然后在更改时更新,无需其他反转。

最好不要计算y和(ynew-y)或a和(anew-a)上的完全逆,只是简单的“矩阵划分”,这取决于“n”相对于“p”的大小在你的问题。

答案 1 :(得分:0)

Memo-ize inv(B),即只在它改变时反转B,并保持反转。

如果对B的更改很小,可能您可以使用增量近似。