Effectively repetitively solve the system (A + B) x = c with A = const and B diagonal

For an iterative numerical procedure, I need to solve this linear equation for x several times (about 1 time 6). During the iteration, only B and c change. A is a constant eight-diagonal matrix, and B is the diagonal. A and B are approximately 16000x16000 in size. I am currently using the Matlab back-scrolling procedure as follows:

x = (A+B) \ c;

However, I believe that there should be a better way to approach this. I found the Sherman-Morrison formula, but I'm not sure if the implementation will lead to acceleration. Have any of you dealt with this situation and can give advice here?

Thanks and best regards, Valentin

+4
source share
1 answer

You should be able to use the result from an article entitled "Inverse Sum of Matrix Sums" by Kenneth S. Miller. He gives this relation (assuming that H has rank one and that both G and G + H are invertible, obviously) as a lemma at the beginning of the article:

inverse(G+H) = inverse(G) - 1/(1+g) inverse(G) * H * inverse(G)where g=trace(inverse(G) * H).

If you have pre-calculated inverse(G)before the loop, the extra calculations inside the loop should be quite limited. Note, however, that I did not implement this to see if this really gives significant acceleration.

+2
source

All Articles