有效地重复解决系统(A + B)x = c,A = const,B是对角线

时间:2015-02-15 15:24:33

标签: matlab backslash linear inverse

对于迭代数值例程,我需要重复(约1e6次)求解x的这个线性方程。在迭代过程中只有B和c发生变化。 A是恒定的八边形矩阵,B是对角线。 A和B的大小约为16000x16000。目前我正在使用Matlab的反斜杠例程:

x = (A+B) \ c;

但我觉得应该有更好的方法来解决这个问题。我找到了谢尔曼 - 莫里森的公式,但我不确定实施是否会导致加速。你有没有处理过这种情况,可以在这里给出建议吗?

谢谢和最诚挚的问候, 的Valentin

1 个答案:

答案 0 :(得分:2)

你应该能够使用Kenneth S. Miller所谓的“矩阵和的倒数”paper的结果。他给出了这种关系(假设H具有等级1,并且G和G + H都是可逆的,显然)作为本文开头的引理:

inverse(G+H) = inverse(G) - 1/(1+g) inverse(G) * H * inverse(G),其中g=trace(inverse(G) * H)

如果在循环之前预先计算inverse(G),则循环内的额外计算应该相当有限。但请注意,我没有实现这一点,看它是否真的给出了显着的加速。