1

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

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)那么您可以使用 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”的大小.

于 2011-06-17T00:27:35.950 回答
0

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

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

于 2009-06-18T15:47:17.027 回答