Ближайшие положительные ответы на ваш вопрос, которые я смог найти, - для разреженных диагональных возмущений (см. Ниже).
С учетом вышесказанного я не знаю ни одного алгоритма для общего случая, хотя есть обобщение упомянутой вами техники для скалярных сдвигов от SPD-матриц ко всем квадратным матрицам:
Для любой квадратной матрицы существует разложение Шура A = U T U H , где U унитарное, T верхняя треугольная, а A + σ I = U ( T + σ I ) U H обеспечивает разложение Шура A + σ I . Таким образом, ваша идея предварительного вычисления распространяется на все квадратные матрицы с помощью алгоритма:AA=UTUHUTA+σI=U(T+σI)UHA+σI
- Вычислить не более чем за O ( n 3 ) .[U,T]=schur(A)O(n3)
- Решите каждую через x : = U ( T + σ I ) - 1 U H b в O ( n 2 ) произведении (средняя инверсия - просто обратная замена).(A+σI)x=bx:=U(T+σI)−1UHbO(n2)
Эта линия рассуждений сводится к тому подходу, который вы упомянули, когда является SPD, поскольку разложение Шура сводится к EVD для нормальных матриц, и EVD совпадает с SVD для эрмитовых положительно определенных матриц.A
Ответ на обновление:
Пока у меня нет доказательств, которых у меня нет, я отказываюсь утверждать, что ответ «нет». Тем не менее, я могу дать некоторое представление о том, почему это трудно, а также другой пример, где ответ - да.
Существенная трудность заключается в том, что, хотя обновление является диагональным, оно по-прежнему имеет полный ранг, поэтому основной инструмент обновления обратного, формула Шермана-Моррисона-Вудбери , похоже, не помогает. Несмотря на то, что случай скалярного сдвига также является полным рангом, это чрезвычайно особый случай, поскольку, как вы упоминали, он коммутирует с каждой матрицей.
С учетом вышесказанного , если каждый был разреженным, т. Е. Каждый из них имел O ( 1 ) ненулей, то формула Шермана-Моррисона-Вудбери дает решение O ( n 2 ) с каждой парой { D , b } . Например, с одним ненулевым значением в j- й диагональной записи, так что D = δ e j e H j :DO(1)O(n2){D,b}jD=δejeHj
[A−1+δejeHj]−1=A−1−δA−1ejeHjA−11+δ(eHjA−1ej),
где - это j- й стандартный базисный вектор .ejj
Еще одно обновление: я должен упомянуть, что я попробовал предварительное условие которое @GeoffOxberry предложило на нескольких случайных матрицах SPD 1000 × 1000 с использованием PCG, и, возможно, неудивительно, что, по-видимому, значительно сокращается число итераций, когда | | D | | 2 / | | A | | 2 мало, но не тогда, когда оно равно O ( 1 ) или больше.A−11000×1000||D||2/||A||2O(1)