我有两个问题。我必须计算两个方程:
X = A - inv(B) * Y * inv(B)
和
X = Y + A' * inv(B) * A
其中,A、B 和 Y 是已知的 p*p 矩阵(p 可以小或大,视情况而定)。矩阵非常密集,没有任何结构(当然 B 是非奇异的)。
是否可以在不反转矩阵 B 的情况下求解这些方程中的 X?我必须计算这些方程 n 次,n 是数百或数千,并且所有矩阵都会随着时间而变化。
非常感谢。
如果您可以用以下术语表达对矩阵 B 的更新:
Bnew = B + u*s*v
inv(B)
那么您可以使用 Sherman-Morrison-Woodbury 公式明确表示更新:
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)
一次,然后在它发生变化时更新它而无需额外的反转。
最好不要计算完整的逆,只是在 y 和 (ynew - y) 或 a 和 (anew - a) 上进行简单的“矩阵除法”,具体取决于问题中“n”相对于“p”的大小.
Memo-ize inv(B),即只在 B 变化时反转,并保持反转。
如果对 B 的更改很小,则可能您可以使用增量近似值。