Jawaban positif terdekat untuk pertanyaan Anda yang dapat saya temukan adalah untuk gangguan diagonal yang jarang (lihat di bawah).
Dengan itu, saya tidak tahu algoritma apa pun untuk kasus umum, meskipun ada generalisasi teknik yang Anda sebutkan untuk perubahan skalar dari matriks SPD ke semua matriks persegi:
Dengan adanya matriks kuadrat , terdapat dekomposisi Schur A = U T U H , di mana U adalah kesatuan dan T adalah segitiga atas, dan A + σ I = U ( T + σ I ) U H memberikan dekomposisi Schur dari A + σ saya . Jadi, ide perhitungan Anda meluas ke semua matriks kuadrat melalui algoritma:AA=UTUHUTA+σI=U(T+σI)UHA+σI
- Hitung dalam paling banyak O ( n 3 ) bekerja.[U,T]=schur(A)O(n3)
- Selesaikan masing-masing melalui x : = U ( T + σ I ) - 1 U H b dalam pekerjaan O ( n 2 ) (inversi tengah hanyalah substitusi kembali).(A+σI)x=bx:=U(T+σI)−1UHbO(n2)
Garis penalaran ini mengurangi ke pendekatan yang Anda sebutkan ketika adalah SPD karena dekomposisi Schur dikurangi menjadi EVD untuk matriks normal, dan EVD bertepatan dengan SVD untuk matriks pasti-positif Hermitian.A
Tanggapan untuk memperbarui:
Sampai saya punya bukti, yang tidak saya miliki, saya menolak untuk mengklaim bahwa jawabannya adalah "tidak". Namun, saya dapat memberikan beberapa wawasan mengapa itu sulit, serta subkotak lain di mana jawabannya adalah ya.
Kesulitan mendasar adalah bahwa, meskipun pembaruan diagonal, itu masih dalam peringkat penuh secara umum, jadi alat utama untuk memperbarui invers, rumus Sherman-Morrison-Woodbury , tampaknya tidak membantu. Meskipun case shift skalar juga peringkat penuh, ini adalah kasus yang sangat istimewa karena ia berpindah dengan setiap matriks, seperti yang Anda sebutkan.
Dengan mengatakan bahwa, jika masing-masing jarang, yaitu, masing-masing memiliki O ( 1 ) nonzeros, maka rumus Sherman-Morrison-Woodbury menghasilkan O ( n 2 ) diselesaikan dengan masing-masing pasangan { D , b } . Misalnya, dengan satu nol di entri j diagonal j , sehingga 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),
di mana adalah vektor basis standar ke- j .ejj
Pembaruan lain: Saya harus menyebutkan bahwa saya mencoba preconditioner yang disarankan @GeoffOxberry pada beberapa matriks SPD 1000 × 1000 acak menggunakan PCG dan, mungkin tidak mengherankan, tampaknya sangat mengurangi jumlah iterasi ketika | | D | | 2 / | | A | | 2 kecil, tetapi tidak ketika O ( 1 ) atau lebih besar.A−11000×1000||D||2/||A||2O(1)