我有两个问题。我必须计算两个方程式:
X = A - inv(B)* Y * inv(B)
和
X = Y + A'* inv(B)* A
其中,A,B和Y是已知的p * p矩阵(p可以小或大,取决于情况)。矩阵非常密集,没有任何结构(当然B除非是单数)。
是否可以在不反转矩阵B的情况下求解这些方程中的X?我必须计算这些方程n次,n为数百或数千,并且所有矩阵随时间变化。
非常感谢。
答案 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的更改很小,可能您可以使用增量近似。