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

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

x = (A+B) \ c;

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

谢谢和最诚挚的问候,
瓦伦丁

最佳答案 你应该能够使用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).

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

点赞