Repositori berikut berisi implementasi algoritma Lanczos standar.
Instalasi
Untuk bermain -main dengan algoritma sendiri, git clone
repositori ke mesin lokal Anda. Kemudian, di direktori yang dikloning, inisialisasi lingkungan Conda dengan berlari
conda env create --file environment.yml
Dari sana, Anda dapat mengaktifkan lingkungan seperti itu
conda activate LanczosAlgo
dan jalankan notebook di src/lanczos.ipynb
.
Perkenalan
Algoritma Lanczos adalah algoritma langsung yang dirancang oleh Cornelius Lanczos yang merupakan adaptasi metode daya untuk menemukan $ M $ "Paling berguna" (cenderung menghargai nilai eigen dan vektor eigen tertinggi/terendah) dan vektor eigen $ n kali n $ Matriks Hermitian, di mana $ M $ sering tetapi tidak harus jauh lebih kecil dari $ n $ .
Algoritma
Algoritma berlangsung sebagai berikut:
- Diberi matriks Hermitia $ A $ ukuran $ n kali n $ , dan vektor sewenang -wenang $ v_1 $ Dengan Euclidean Norm 1, tentukan jumlah panggilan fungsi default $ m = n $
- Membiarkan $ w_1 '$ = $ Av_1 $
- Membiarkan $ alpha_1 = w_1 '^* v_1 $
- Membiarkan $ w_1 = w_1 '^*- alpha_1 v_1 $
Kami merujuk pada langkah 2 - 4 sebagai langkah iterasi pertama. Kemudian,
- Membiarkan $ beta_j = || w_ {j-1} || $
- Jika $ beta_j neq0 $ , membiarkan $ v_j = frac {w_ {j-1}} { beta_j} $ . Lain, biarkan $ v_j $ menjadi vektor sewenang -wenang dengan norma Euclidean 1 yang ortogonal $ v_1, ..., v_ {j-1} $
- Membiarkan $ w_j '= av_j $
- Membiarkan $ alpha_j = w_j'v_j $
- Membiarkan $ w_j = w_j '- alpha_j v_j- beta_j v_ {j-1} $
Di mana $ j $ menunjukkan nomor iterasi, dan harus memuaskan $ 2 leq j leq m $ . Akhirnya, outputnya adalah matriks tridiagonalisasi $ T $ dengan $ alpha_1, ..., alpha_m $ sepanjang diagonal utama, dan $ beta_2, ..., beta_m $ di sepanjang super- dan subdiagonal.
Pekerjaan di masa depan
Upaya saat ini sedang berlangsung untuk memperluas algoritma untuk memasukkan sistem negara-negara. Bintang repo ini jika Anda ingin diberi tahu saat itu ditayangkan!