Algoritma Lanczos adalah algoritma iteratif adaptasi dari metode daya (power method) untuk menemukan nilai dan vektor eigen yang "paling berguna" (umumnya yang tertinggi/terendah) dari sebuah matriks Hermite berukuran , dengan tidak perlu jauh lebih kecil dari . Algoritma ini dirancang oleh Cornelius Lanczos pada tahun 1950.[1] Meskipun secara prinsip metode ini efisien dalam aspek komputasi, metode yang dirancang pada awalnya tidak berguna karena sifatnya yang tidak stabil secara numerik.

Pada tahun 1970, Ojalvo dan Newman menunjukkan cara membuat metode ini stabil secara numerik, dan mengaplikasikannya untuk menemukan mode getaran dari sebuah struktur teknik berukuran besar.[2] Hal ini dicapai dengan menggunakan sebuah teknik untuk 'memurnikan' vektor-vektor Lanczos (misal dengan mengortogonalkan secara berulang setiap vektor yang baru ditemukan dengan semua vektor yang sudah ditemukan)[2] sampai ke suatu akurasi yang diinginkan. Jika teknik tidak diterapkan, metode akan menghasilkan vektor-vektor yang sangat 'terkontaminasi' oleh vektor-vektor yang berasosiasi dengan frekuensi alami yang rendah.

Dalam karyanya, Ojalvo dan Newman juga mengusulkan cara memilih vektor awal (starting vector; misalnya dengan menggunakan pembangkit bilangan acak), dan mengusulkan metode menentukan nilai secara empiris (sebaiknya dipilih kurang lebih 1.5 kali dari banyak nilai eigen akurat yang diinginkan). Kontribusi lain diberikan oleh Paige, yang juga memberikan analisis galat untuk metode ini.[3][4] Pada tahun 1988, Ojalvo memberikan sejarah yang lebih akurat dari algoritma ini, dan sebuah uji galat nilai eigen yang efisien.[5]

Algoritma sunting

Algoritma ini memerlukan sebuah matriks Hermite   berukuran  , dan secara opsional sebuah bilangan   yang menyatakan banyak iterasi yang diinginkan. Jika nilai   tidak ditentukan, umumnya diambil  . Sebenarnya, algoritma tidak memerlukan akses ke matriks secara eksplisit, melainkan sebuah fungsi   yang menghasilkan produk perkalian matriks dengan vektor. Fungsi ini dipanggil paling banyak   kali. Pada proses iterasi, algoritma rentan terhadap ketidakstabilan numerik. Ketika dieksekusi dalam aritmatika non-eksak (non-exact arithmetic), pertimbangan-pertimbangan tambahan harus diambil untuk memastikan validitas hasil (dijelaskan di bagian selanjutnya). Di akhir iterasi, algoritma akan menghasilkan sebuah matriks ortonormal   berukuran   dan sebuah matriks simetrik real tridiagonal   berukuran  . Dalam kasus  , maka   akan berupa matriks uniter, dan matriks  .

Pada prinsipnya ada empat cara untuk menulis prosedur iterasi. Paige dan karya-karya lainnya menunjukkan bahwa urutan operasi berikut adalah yang paling stabil secara numerik.[6][7]:

  1. Anggap   sebagai sebarang vektor dengan norma Euklidean  
  2. Langkah awal iterasi yang disingkat:
    1. Tetapkan  .
    2. Tetapkan  .
    3. Tetapkan  
  3. Untuk nilai  , lakukan:
    1. Tetapkan   (juga sebuah norma Euklidean).
    2. Jika  , tetapkan nilai  . Namun jika  , pilih   sebagai sebarang vektor bernorma Euclidean   yang ortogonal dengan semua vektor  .
    3. Tetapkan  .
    4. Tetapkan  .
    5. Tetapkan  .
  4. Bentuk matriks   dengan menyusun   sebagai kolom-kolomnya; dan bentuk matriks
     

Catatan:   untuk  .

Dalam praktiknya vektor awal   dapat dianggap sebagai argumen input tambahan dari prosedur; sedangkan   dan indikator-indikator galat numerik dapat diikutsertakan sebagai tambahan kondisi penghentian iterasi.

Tanpa menghitung perkalian matriks-vektor, setiap iterasi melakukan   operasi aritmetika. Perkalian matriks-vektor sendiri dapat dilakukan dalam   operasi aritmetika, dengan   menyatakan rata-rata jumlah elemen bukan nol dalam sebuah baris. Dengan demikian, algoritma Lanczos memiliki total kompleksitas sebesar  , atau   dalam kasus  ; hal ini membuatnya bisa sangat cepat untuk matriks rongga. Skema-skema untuk meningkatkan stabilitas numerik biasanya dibandingkan dengan kinerja tinggi ini.

Vektor   disebut dengan vektor Lanczos. Vektor   tidak digunakan setelah nilai   dihitung, dan vektor   tidak digunakan setelah   dihitung. Hal ini memungkinkan untuk menggunakan penyimpanan yang sama untuk ketiga vektor tersebut. Begitu juga jika kita hanya ingin mencari matriks tridiagonal  , proses iterasi tidak memerlukan   setelah menghitung  ; meskipun beberapa skema untuk meningkatkan stabilitas numerik akan membutuhkan vektor ini nantinya. Terkadang vektor-vektor Lanczos yang berikutnya dihitung ulang dari   jika diperlukan.

Aplikasi untuk masalah eigen sunting

Algoritma Lanczos paling sering digunakan dalam konteks menemukan nilai eigen dan vektor eigen dari sebuah matriks. Namun berbeda dengandiagonalisasi matriks yang menghasilkan vektor-vektor eigen dan nilai-nilai eigen terlihat jelas dari pemeriksaan, tridiagonalisasi yang dilakukan algoritma Lanczos memerlukan langkah-langkah tambahan yang nontrivial bahkan untuk menghitung satu nilai atau vektor eigen. Meskipun demikian, menerapkan algoritma Lanczos sering kali merupakan langkah signifikan yang dalam menghitung dekomposisi eigen. Jika   adalah nilai eigen dari   dan   adalah vektor eigen dari   (sehingga  ), maka   adalah vektor eigen yang bersesuaian dari  ; karena

 
Hal ini mengartikan algoritma Lanczos mengubah masalah dekomposisi eigen matriks   menjadi masalah dekomposisi eigen matriks  .

Terdapat sejumlah algoritma khusus untuk memroses matriks tridiagonal, sering kali dengan kompleksitas komputasi yang lebih baik daripada algoritma yang umum. Misalkan   adalah matriks simetris tridiagonal berukuran  . Beberapa algoritma tersebut diantaranya:

  • Rekursi kontinu (continuant recursion) memungkinkan komputasi polinomial karakteristik dengan   operasi, dan mengevaluasinya pada sebuah titik dalam   operasi.
  • Algoritma nilai eigen bagi-dan-taklukkan (divide-and-conquer) dapat digunakan untuk menghitung seluruh dekomposisi eigen dari   dalam   operasi.
  • Metode Multipole Cepat[8] (Fast Multipole method) yang dapat menghitung semua nilai eigen hanya dengan   operasi.

Beberapa algoritma dekomposisi eigen yang umum, terutama algoritma QR, diketahui konvergen lebih cepat pada kasus matriks tridiagonal daripada pada matriks yang umum. Kompleksitas asimtotik QR untuk matriks tridiagonal adalah  , sama seperti untuk algoritma bagi-dan-taklukkan (meskipun faktor konstantanya mungkin berbeda). Mengingat semua vektor eigen memiliki   total elemen, algoritma[butuh klarifikasi] ini optimal secara asimtotik. Bahkan untuk algoritma yang tingkat konvergensinya tidak terpengaruh oleh transformasi uniter (seperti metode daya dan iterasi invers), dapat menikmati manfaat kinerja ketika diterapkan ke matriks tridiagonal   daripada matriks asli  . Karena struktur   yang sangat rongga dengan semua elemen bukan nol dalam posisi yang dapat diprediksi, hal ini memungkinkan penyimpanan yang ringkas dengan kinerja yang sangat baik jika dibandingkan dengan menggunakan tembolok (caching). Selain itu,   berupa matriks real dengan semua vektor eigen dan nilai eigen berupa real, sedangkan matriks   secara umum mungkin memiliki elemen kompleks dan vektor eigen; penggunaan aritmetika real cukup untuk mencari vektor eigen dan nilai eigen dari  .

Jika   sangat besar, nilai   dapat dikurangi sehingga matriks   yang dihasilkan masih memiliki ukuran yang dapat dikelola. Pengurangan ini masih memungkinkan untuk menemukan nilai eigen dan vektor eigen yang ekstrem dari  . Dalam keadaan  , algoritma Lanczos dapat dianggap sebagai skema kompresi lossy untuk matriks Hermite, yang mengutamakan meyimpanan nilai-nilai eigen ekstrem.

Kombinasi kinerja yang baik untuk matriks rongga dan kemampuan untuk menghitung beberapa (tanpa menghitung semua) nilai eigen adalah alasan utama untuk memilih menggunakan algoritma Lanczos.

Aplikasi sunting

Algoritma Lanczos sangat menarik karena perkalian dengan   adalah satu-satunya operasi linier berskala besar. Karena mesin pengambilan teks jangka berbobot hanya menerapkan operasi ini, algoritma Lanczos dapat diterapkan secara efisien ke dokumen teks (lihat Pengindeksan Semantik Laten). Vektor eigen juga penting untuk metode peringkat skala besar seperti Algoritma HITS yang dikembangkan oleh Jon Kleinberg, atau PageRank yang digunakan oleh Google.

Algoritma Lanczos juga digunakan dalam Fisika Materi Terkondensasi sebagai metode untuk menyelesaikan Hamiltonians dari sistem elektron berkorelasi kuat,[9] serta dalam kode model cangkang pada fisika nuklir.[10]

Implementasi sunting

Perpustakaan NAG berisi beberapa rutinitas[11] untuk solusi sistem linear skala besar dan masalah eigen yang menggunakan algoritma Lanczos.

MATLAB dan GNU Octave hadir dengan ARPACK bawaan. Baik matriks yang tersimpan dan implisit dapat dianalisis melalui fungsi eigs() (Matlab/Octave).

Implementasi Matlab dari algoritma Lanczos (masalah presisi catatan) tersedia sebagai bagian dari Gaussian Belief Propagation Matlab Package. The GraphLab[12] perpustakaan pemfilteran kolaboratif menggabungkan implementasi paralel skala besar dari algoritma Lanczos (dalam C ++) untuk multicore.

PRIMME perpustakaan juga menerapkan algoritma seperti Lanczos.

Referensi sunting

  1. ^ Lanczos, C. (1950). "An iteration method for the solution of the eigenvalue problem of linear differential and integral operators" (PDF). J. Res. Nat’l Bur. Std. 45: 255–282. 
  2. ^ a b Ojalvo, I. U.; Newman, M. (1970). "Vibration modes of large structures by an automatic matrix-reduction method". AIAA Journal. 8 (7): 1234–1239. Bibcode:1970AIAAJ...8.1234N. doi:10.2514/3.5878. 
  3. ^ Paige, C. C. (1971). The computation of eigenvalues and eigenvectors of very large sparse matrices (Tesis Ph.D. thesis). U. of London. OCLC 654214109. 
  4. ^ Paige, C. C. (1972). "Computational Variants of the Lanczos Method for the Eigenproblem". J. Inst. Maths Applics. 10 (3): 373–381. doi:10.1093/imamat/10.3.373. 
  5. ^ Ojalvo, I. U. (1988). "Origins and advantages of Lanczos vectors for large dynamic systems". Proc. 6th Modal Analysis Conference (IMAC), Kissimmee, FL. hlm. 489–494. 
  6. ^ Cullum; Willoughby. Lanczos Algorithms for Large Symmetric Eigenvalue Computations. 1. ISBN 0-8176-3058-9. 
  7. ^ Yousef Saad (1992-06-22). Numerical Methods for Large Eigenvalue Problems. ISBN 0-470-21820-7. 
  8. ^ Coakley, Ed S.; Rokhlin, Vladimir (2013). "A fast divide-and-conquer algorithm for computing the spectra of real symmetric tridiagonal matrices". Applied and Computational Harmonic Analysis. 34 (3): 379–414. doi:10.1016/j.acha.2012.06.003 . 
  9. ^ Chen, HY; Atkinson, W.A.; Wortis, R. (July 2011). "Disorder-induced zero-bias anomaly in the Anderson-Hubbard model: Numerical and analytical calculations". Physical Review B. 84 (4): 045113. arXiv:1012.1031 . Bibcode:2011PhRvB..84d5113C. doi:10.1103/PhysRevB.84.045113. 
  10. ^ Shimizu, Noritaka (21 October 2013). "Nuclear shell-model code for massive parallel computation, "KSHELL"". arΧiv:1310.5431 [nucl-th]. 
  11. ^ The Numerical Algorithms Group. "Keyword Index: Lanczos". NAG Library Manual, Mark 23. Diakses tanggal 2012-02-09. 
  12. ^ GraphLab Diarsipkan 2011-03-14 di Wayback Machine.

Bacaan lebih lanjut sunting