Saya memiliki matriks persegi simetris nyata padat. Dimensinya sekitar 1000x1000. Saya perlu menghitung komponen utama pertama dan bertanya-tanya apa algoritma terbaik untuk melakukan ini.
Tampaknya MATLAB menggunakan algoritma Arnoldi / Lanczos (untuk eigs
). Tetapi dari membaca tentang mereka saya tidak yakin apakah mereka memiliki kelebihan dibandingkan dengan iterasi daya sederhana , karena matriks saya tidak jarang dan saya hanya tertarik pada vektor eigen pertama.
Adakah rekomendasi apa algoritma tercepat dalam hal ini?
linear-algebra
algorithms
eigensystem
Mika Fischer
sumber
sumber
Jawaban:
Metode tercepat kemungkinan akan tergantung pada spektrum dan normalitas matriks Anda, tetapi dalam semua kasus, algoritma Krylov harus benar-benar lebih baik daripada iterasi daya. GW Stewart memiliki diskusi yang bagus tentang masalah ini di Bab 4, Bagian 3 dari Matriks Algoritma, Volume II: Sistem Eigens :
sumber
Iterasi daya adalah yang paling sederhana, tetapi seperti yang disebutkan di atas kemungkinan akan konvergen sangat lambat jika matriksnya sangat tidak normal. Anda mendapatkan fenomena "punuk" di mana urutan tampak berbeda untuk banyak iterasi sebelum perilaku asimptotik muncul.
Karena matriks Anda simetris, Anda dapat mempertimbangkan iterasi RQI, yang dalam kasus simetris menghasilkan konvergensi kubik: http://en.wikipedia.org/wiki/Rayleigh_quotient_iteration .
Apa yang membuat iterasi Arnoldi atau Lanczos sangat bagus (setidaknya menurut saya, tapi saya tidak meneliti aljabar linear numerik) adalah mereka sangat fleksibel. Biasanya mungkin untuk mengontrol nilai eigen mana yang mereka berikan kepada Anda, dan berapa banyak yang Anda dapatkan. Ini terutama benar dalam kasus simetris (dan bahkan lebih baik jika matriks Anda pasti). Untuk masalah simetris, mereka sangat kuat. Sebagai kotak hitam, mereka bekerja dengan baik, tetapi mereka juga sangat mudah menerima informasi masalah baru, seperti kemampuan untuk memecahkan sistem yang melibatkan matriks.
sumber