As respostas positivas mais próximas à sua pergunta que eu pude encontrar são as perturbações diagonais esparsas (veja abaixo).
Com isso dito, não conheço nenhum algoritmo para o caso geral, embora exista uma generalização da técnica mencionada para as mudanças escalares das matrizes SPD para todas as matrizes quadradas:
Dada qualquer matriz quadrada , existe uma decomposição de Schur A = U T U H , onde U é unitário e T é triangular superior, e A + σ I = U ( T + σ I ) U H fornece uma decomposição de Schur de A + σ eu . Assim, sua ideia de pré-computação se estende a todas as matrizes quadradas através do algoritmo:AA=UTUHUTA+σI=U(T+σI)UHA+σI
- Calcular , em, no máximo, O ( n 3 ) de trabalho.[U,T]=schur(A)O(n3)
- Resolva cada via x : = U ( T + σ I ) - 1 U H b em O ( n 2 ) trabalho (a inversão do meio é simplesmente a substituição de volta).(A+σI)x=bx:=U(T+σI)−1UHbO(n2)
Essa linha de raciocínio se reduz à abordagem que você mencionou quando é SPD, pois a decomposição de Schur se reduz a um EVD para matrizes normais, e o EVD coincide com o SVD para matrizes definidas positivas de Hermitian.A
Resposta à atualização:
Até que eu tenha uma prova, o que não tenho, recuso-me a afirmar que a resposta é "não". No entanto, posso dar algumas idéias sobre por que é difícil, bem como outro subcaso em que a resposta é sim.
A dificuldade essencial é que, mesmo que a atualização seja diagonal, ela ainda esteja em geral na classificação completa; portanto, a principal ferramenta para atualizar um inverso, a fórmula de Sherman-Morrison-Woodbury , não parece ajudar. Embora o caso de mudança escalar também seja de classificação completa, é um caso extremamente especial, pois se alterna com todas as matrizes, como você mencionou.
Com isso dito, se cada era escasso, ou seja, cada um deles tinha O ( 1 ) nonzeros, a fórmula de Sherman-Morrison-Woodbury produz uma solução de O ( n 2 ) com cada par { D , b } . Por exemplo, com um único diferente de zero na j- ésima entrada diagonal, de modo que 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),
onde é o j- ésimo vetor de base padrão .ejj
Outra atualização: devo mencionar que tentei o pré-condicionador que o @GeoffOxberry sugeriu em algumas matrizes SPD 1000 × 1000 aleatórias usando PCG e, talvez não surpreendentemente, pareça reduzir bastante o número de iterações quando | | D | | 2 / | | Um | | 2 é pequeno, mas não quando é O ( 1 ) ou superior.A−11000×1000||D||2/||A||2O(1)