Найближчі позитивні відповіді на ваше запитання, які я міг би знайти, - це рідкісні діагональні збурення (див. Нижче).
Зважаючи на це, я не знаю жодного алгоритму для загального випадку, хоча є узагальнення методики, яку ви згадали для скалярних зрушень з матриць SPD на всі квадратні матриці:
Враховуючи будь-яку квадратну матрицю , існує розклад Шура A = U T U H , де U є єдиним, а T - верхнім трикутним, а A + σ I = U ( T + σ I ) U H забезпечує розкладання Шура AАA = UТUНUТA + σЯ= U( Т+ σЯ) UН . Таким чином, ваша ідея попереднього обчислення поширюється на всі квадратні матриці за допомогою алгоритму:A + σЯ
- Обчисліть щонайбільше O ([ U, Т] = s c h u r ( A ) роботи.О ( н.)3)
- Розв’яжіть кожен через x : = U ( T + σ I ) - 1 U H b в O ( n( A + σЯ) x = bx : = U( Т+ σЯ)- 1UНб (середня інверсія - це просто заміна назад).О ( н.)2)
Цей рядок міркувань зводиться до підходу, який ви згадали, коли є SPD, оскільки розкладання Шура зводиться до EVD для нормальних матриць, а EVD збігається з SVD для ермітових позитивних певних матриць.А
Відповідь на оновлення:
Поки я не маю доказів, яких не маю, я відмовляюся стверджувати, що відповідь - «ні». Однак я можу дати деяку думку про те, чому це важко, а також інший підзаголовок, де відповідь - так.
Основна складність полягає в тому, що, хоча оновлення є діагональним, воно все ще є загальним повним рангом, тому основний інструмент оновлення оберненої, формула Шермана-Моррісона-Вудбері , схоже, не допомагає. Хоча випадок скалярного зсуву також є повноцінним, це надзвичайно особливий випадок, оскільки він спілкується з кожною матрицею, як ви вже згадували.
З урахуванням сказаного, якщо кожен був розрідженим, тобто кожен з них мав O ( 1 ) ненулі, то формула Шермана-Моррісона-Вудбері виводить рішення O ( n 2 ) з кожною парою { D , b } . Наприклад, з одиничним ненульовим позначкою на j- му діагональному вході, так що D = δ e j e H j :DO (1)О ( н.)2){ D , b }jD = δеjеНj
[ А- 1+ δеjеНj]- 1= А- 1- δА- 1еjеНjА- 11 + δ( еНjА- 1еj),
де - jеjj й стандартний базовий вектор .
Ще одне оновлення: я мушу зазначити, що я спробував попередній кондиціонер який @GeoffOxberry запропонував на кількох випадкових матрицях SPD 1000 × 1000 за допомогою PCG, і, можливо, не дивно, здається, це значно зменшить кількість ітерацій, коли | | Д | | 2 / | | А | | 2 невелика, але не тоді, коли вона дорівнює O ( 1 ) або більше.А- 11000 × 1000| | Д | |2/ | | А | |2O (1)