SVD untuk menemukan nilai eigen terbesar dari matriks 50x50 - apakah saya membuang banyak waktu?

13

Saya punya program yang menghitung nilai eigen terbesar dari banyak matriks simetris 50x50 nyata dengan melakukan dekomposisi nilai singular pada semuanya. SVD adalah hambatan dalam program ini.

Apakah ada algoritma yang jauh lebih cepat dalam menemukan nilai eigen terbesar, atau akan mengoptimalkan bagian ini tidak memberikan banyak pengembalian investasi?

Anna
sumber
Bisakah Anda memberikan lebih banyak informasi tentang matriks Anda, misalnya jika ada yang diketahui tentang struktur mereka, kisaran nilai eigen mereka atau kesamaan mereka satu sama lain?
Pedro
Ini adalah matriks kovarians ( ). Pengujian menunjukkan bahwa semua kecuali 5 atau lebih nilai eigen terbesar mendekati nol, dan bahwa nilai eigen terbesar setidaknya ~ 20% lebih besar dari yang terbesar kedua. Karena ada banyak nilai eigen mendekati nol, kurasa kisarannya tidak penting? Itu bisa diubah ke kisaran apa pun. Skala yang saya gunakan saat ini memberi saya kisaran 150 ~ 200. XXT
Anna
Juga, matriks tidak terlalu erat, sehingga masalah SVD terkondisi dengan baik.
Anna
Karena simetris dan positif (semi) pasti, Anda dapat menggunakan faktorisasi Cholesky alih-alih SVD. Faktorisasi Cholesky membutuhkan lebih sedikit jepit untuk menghitung dari SVD tetapi menjadi metode yang tepat masih membutuhkan O ( n 3 ) jepit. XXTO(n3)
Ken
@Anna: Sudahkah Anda mencoba salah satu dari banyak pendekatan yang diusulkan di sini? Saya akan sangat ingin tahu apa yang paling berhasil dalam praktik untuk Anda ...
Pedro

Jawaban:

12

Bergantung pada presisi yang Anda butuhkan untuk nilai eigen terbesar, Anda bisa mencoba menggunakan Power Iteration .

Untuk contoh spesifik Anda, saya akan sejauh tidak membentuk secara eksplisit, tetapi menghitung x X ( X T x ) di setiap iterasi. Komputasi A akan membutuhkan operasi O ( n 3 ) sedangkan produk vektor-matriks hanya membutuhkanA=XXTxX(XTx)AO(n3) .O(n2)

Tingkat konvergensi tergantung pada pemisahan antara dua nilai eigen terbesar, jadi ini mungkin bukan solusi yang baik dalam semua kasus,

Pedro
sumber
1
Jika nilai eigen terbesar adalah 20% lebih besar dari yang berikutnya, iterasi daya harus menyatu dengan sangat cepat (semua nilai eigen lainnya teredam oleh faktor 5/6 di setiap iterasi, sehingga Anda mendapatkan satu digit untuk setiap iterasi 13.
Wolfgang Bangerth
2
Metode ruang bagian Krylov benar-benar lebih baik daripada metode daya, karena mengandung vektor dari iterasi daya dengan jumlah iterasi yang sama.
Jack Poulson
1
@ JackPoulson: Ya, tapi setiap iterasi lebih mahal untuk dihitung ... Apakah benar-benar layak untuk masalah kecil seperti itu?
Pedro
@Pedro: tentu saja, matvec memerlukan kerja kuadratik dan eigensolve hasil pembagian Rayleigh dan ekspansi selanjutnya sepele dibandingkan.
Jack Poulson
1
Biaya kode? Karena @JackPoulson membahas masalah ini, B. Parlett et al (1982) ("Tentang Memperkirakan Nilai Eigen Terbesar dengan Algoritma Lanczos") membandingkan metode daya, metode daya + akselerasi Aitken, dan aplikasi Lanczos yang menargetkan nilai eigen terbesar dari nilai sebenarnya. pos simetris (atau Hermitian). def. matriks. Mereka menyimpulkan metode Lanczos lebih efisien jika bahkan akurasi sederhana (dari nilai eigen pertama relatif terhadap yang kedua) diperlukan, dan lebih baik dalam menghindari kesalahpahaman.
hardmath
5

Jika hanya 5 nilai eigen yang sangat signifikan, algoritma Lanczsos dengan sebagai perkalian matriks-vektor harus memberikan konvergensi linier cepat setelah 5 langkah awal, maka nilai eigen terbesar yang cukup akurat dengan sedikit iterasi.X(XTx)

Arnold Neumaier
sumber
Apakah Anda (@ArnoldNeumaier) memikirkan sesuatu seperti ini , yang disederhanakan ( )? Sangat menarik bahwa ia memberikan perkiraan yang berbeda dari Lanczos jika vektor ketiga dipertahankan, di atas subruang Krylov yang sama. B=T=I
hardmath
Tidak; Saya maksudkan algoritma Lanczsos standar tetapi terburu-buru menulis CG. Sekarang dikoreksi.
Arnold Neumaier
4

Untuk matriks semi-pasti positif seperti mungkin perlu upaya untuk mempercepat konvergensi dengan pergeseran spektrum . Yaitu, skalar μ yang cocok dipilih dan metode daya diterapkan pada A - μ I alih-alih AA=XXTμAμIA .

Beberapa iterasi metode daya dasar harus memberi Anda perkiraan kasar dari nilai eigen terbesar λ 1 . Dengan asumsi nilai eigen dominan memiliki multiplisitas 1 dan semua yang lainnya berada dalam [ 0 , 5||Ax||/||x||λ1, laluA-5[0,56λ1]akan memiliki nilai eigen terbesar7A512λ1Idan sisanya di[-5712λ1.[512λ1,512λ1]

Dengan kata lain Anda akan meningkatkan dominasi nilai eigen terbesar dari 20% di atas terbesar berikutnya menjadi 40% di atas nilai eigen terbesar berikutnya (nilai absolut dari suatu). Konvergensi geometrik dari metode daya akan mempercepat sesuai. Setelah nilai eigen terbesar dari ditemukan keakuratan yang cukup, λ 1 diperkirakan dengan menambahkan kembali shift μ yang telah diambil.AμIλ1μ

AμI(AμI)x=X(XTx)μxO(n2)

hardmath
sumber
Hal ini tampaknya membutuhkan gagasan yang baik tentang besarnya nilai eigen terbesar kedua. Bagaimana Anda memperkirakannya dalam kasus seperti itu?
Pedro
λ1|λ2|/|λ1||λ2|/|λ1|λ2λ1Jika diinginkan. Saya menyarankan manfaat apa yang akan Anda lihat dalam kasus seperti yang dijelaskan Anna dalam komentarnya di bawah Pertanyaan.
hardmath