Algoritma Lanczos

**Algoritma Lanczos** adalah algoritma iteratif adaptasi dari metode daya (*power method*) untuk menemukan m nilai dan vektor eigen yang "paling berguna" (umumnya yang tertinggi/terendah) dari sebuah matriks Hermite berukuran n \times n, dengan m tidak perlu jauh lebih kecil dari n. Algoritma ini dirancang oleh Cornelius Lanczos pada tahun 1950. 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. 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) 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  m  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. Pada tahun 1988, Ojalvo memberikan sejarah yang lebih akurat dari algoritma ini, dan sebuah uji galat nilai eigen yang efisien.

## Algoritma
Algoritma ini memerlukan sebuah matriks Hermite  A  berukuran  n \times n , dan secara opsional sebuah bilangan  m  yang menyatakan banyak iterasi yang diinginkan. Jika nilai  m  tidak ditentukan, umumnya diambil  m=n . Sebenarnya, algoritma tidak memerlukan akses ke matriks secara eksplisit, melainkan sebuah fungsi v \mapsto A v yang menghasilkan produk perkalian matriks dengan vektor. Fungsi ini dipanggil paling banyak  m  kali. Pada proses iterasi, algoritma rentan terhadap ketidakstabilan numerik. Ketika dieksekusi dalam aritmetika 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  V  berukuran  n \times m  dan sebuah matriks simetrik real tridiagonal T = V^* A V berukuran  m \times m . Dalam kasus  m = n , maka  V  akan berupa matriks uniter, dan matriks  A = V T V^* .

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.:

# Anggap v_1 \in \mathbb{C}^n sebagai sebarang vektor dengan norma Euklidean  1 
# Langkah awal iterasi yang disingkat:
## Tetapkan  w_1' = A v_1 .
## Tetapkan  \alpha_1 =  w_1'^* v_1 .
## Tetapkan  w_1 = w_1' - \alpha_1 v_1 
# Untuk nilai  j=2,\dots,m , lakukan:
## Tetapkan  \beta_j = \| w_{j-1} \|  (juga sebuah norma Euklidean).
## Jika  \beta_j \neq 0 , tetapkan nilai   v_j = w_{j-1} / \beta_j . Namun jika  \beta_j = 0 , pilih  v_j  sebagai sebarang vektor bernorma Euclidean  1  yang ortogonal dengan semua vektor  v_1,\dots,v_{j-1} .
## Tetapkan  w_j' = A v_j .
## Tetapkan  \alpha_j = w_j'^* v_j .
## Tetapkan  w_j = w_j' - \alpha_j v_j   - \beta_j v_{j-1} .
# Bentuk matriks  V  dengan menyusun  v_1,\dots,v_m  sebagai kolom-kolomnya; dan bentuk matriksT = \begin{pmatrix}
\alpha_1 & \beta_2  &          &             &              & 0 \\
\beta_2  & \alpha_2 & \beta_3  &             &              & \\
         & \beta_3  & \alpha_3 & \ddots      &              & \\
         &          & \ddots   & \ddots      & \beta_{m-1}  & \\
         &          &          & \beta_{m-1} & \alpha_{m-1} & \beta_m \\
0        &          &          &             & \beta_m      & \alpha_m \\
\end{pmatrix}

**Catatan:**  A v_j = w_j' = \beta_{j+1} v_{j+1} + \alpha_j v_j + \beta_j v_{j-1}  untuk  1 .

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

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

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

## Aplikasi untuk masalah eigen
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 \lambda adalah nilai eigen dari  A  dan x adalah vektor eigen dari  T  (sehingga  T x = \lambda x ), maka  y = V x  adalah vektor eigen yang bersesuaian dari A; karena  A y = A V x = V T V^* V x = V T I x = V T x = V (\lambda x) = \lambda V x = \lambda y.Hal ini mengartikan algoritma Lanczos mengubah masalah dekomposisi eigen matriks  A  menjadi masalah dekomposisi eigen matriks  T .

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

* Rekursi kontinu (*continuant recursion*) memungkinkan komputasi polinomial karakteristik dengan O(m^2) operasi, dan mengevaluasinya pada sebuah titik dalam  O(m)  operasi.
* Algoritma nilai eigen bagi-dan-taklukkan (*divide-and-conquer*) dapat digunakan untuk menghitung seluruh dekomposisi eigen dari  T  dalam  O(m^2)  operasi.
* Metode Multipole Cepat (*Fast Multipole method)* yang dapat menghitung semua nilai eigen hanya dengan O(m \log m) 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 O(m^2), sama seperti untuk algoritma bagi-dan-taklukkan (meskipun faktor konstantanya mungkin berbeda). Mengingat semua vektor eigen memiliki   m^2  total elemen, algoritma 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  T  daripada matriks asli A. Karena struktur  T  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,  T  berupa matriks real dengan semua vektor eigen dan nilai eigen berupa real, sedangkan matriks  A  secara umum mungkin memiliki elemen kompleks dan vektor eigen; penggunaan aritmetika real cukup untuk mencari vektor eigen dan nilai eigen dari T.

Jika n sangat besar, nilai  m  dapat dikurangi sehingga matriks   T  yang dihasilkan masih memiliki ukuran yang dapat dikelola. Pengurangan ini masih memungkinkan untuk menemukan nilai eigen dan vektor eigen yang ekstrem dari A. Dalam keadaan m \ll n, 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
Algoritma Lanczos sangat menarik karena perkalian dengan  A\,  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, serta dalam kode model cangkang pada fisika nuklir.

## Implementasi
Perpustakaan NAG berisi beberapa rutinitas 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 perpustakaan pemfilteran kolaboratif menggabungkan implementasi paralel skala besar dari algoritma Lanczos (dalam C ++) untuk multicore.

PRIMME perpustakaan juga menerapkan algoritma seperti Lanczos.

## Referensi

## Bacaan lebih lanjut
* 
*