Apa cara paling efisien untuk menghitung vektor eigen dari matriks padat yang sesuai dengan nilai eigen besarnya terbesar?

10

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?

Mika Fischer
sumber
1
Di komputer saya, pada matriks simetris 1000 X 1000 yang dihasilkan secara acak, fungsi "eigen" di R membutuhkan waktu sekitar satu detik untuk menghitung semua nilai eigen dan vektor, membulatkan ke atas. Jarak tempuh Anda mungkin beragam, tetapi saya ragu pilihan algoritme Anda membuat perbedaan pada timing seperti itu.
Ya, tentu saja itu benar. Saya tidak terlalu peduli membuat program saya berjalan lebih cepat. Saya hanya ingin tahu apakah teknik yang lebih rumit tersebut juga dianggap unggul dalam kasus penggunaan ini (padat, hanya vektor eigen pertama), atau apakah ada teknik berbeda untuk matriks padat.
Apakah maksud Anda vektor eigen yang sesuai dengan nilai eigen terbesar atau terkecil? Sepertinya Anda menginginkan yang pertama.
Jack Poulson
Ya, vektor eigen berkaitan dengan nilai eigen dengan besarnya terbesar.
Mika Fischer

Jawaban:

12

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 :

Metode kekuasaan didasarkan pada pengamatan bahwa jika memiliki eigenpair dominan kemudian di bawah pembatasan ringan pada u vektor A k u menghasilkan perkiraan semakin akurat dengan vektor eigen dominan. Namun, pada setiap langkah metode daya hanya mempertimbangkan satu vektor A k u , yang berjumlah membuang informasi yang terkandung dalam vektor yang dihasilkan sebelumnya. Ternyata informasi ini berharga ... "SEBUAHkamuSEBUAHkkamuSEBUAHkkamu

100×100saya0,95sayasaya=0

Jack Poulson
sumber
Hmm, saya akan berpikir MRRR sekarang menjadi metode standar ketika seseorang hanya ingin beberapa vektor eigen ...
JM
kHAI(kn2+k2n+k3)kn
Saya melihat; entah bagaimana saya mendapat kesan bahwa Anda perlu melakukan tridiagonisasi terlebih dahulu sebelum melakukan Krylov. Terima kasih!
JM
Lanczos sebenarnya secara bertahap membangun kata matriks tridiagonal.
Jack Poulson
5

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.

Reid.Atcheson
sumber