Perpustakaan Algoritma Lanczos adaptif dan header saja
Lambda Lanczos menghitung nilai eigen terkecil atau terbesar dan vektor eigen yang sesuai dari matriks simetris (Hermitian).
Fitur karakteristik adalah rutinitas multiplikasi matriks-vektor yang digunakan dalam algoritma Lanczos dapat beradaptasi:
#include <lambda_lanczos/lambda_lanczos.hpp> menggunakan lambda_lanczos :: lambdalanczos;/ * Beberapa termasuk dan menggunakan deklarasi dihilangkan */void sampel () {const int n = 3; Double Matrix [n] [n] = {{2.0, 1.0, 1.0}, {1.0, 2.0, 1.0}, {1.0, 1.0, 2.0}}; // nilai eigen -nya adalah {4, 1, 1} / * Mempersiapkan rutinitas multiplikasi matriks-vektor yang digunakan dalam algoritma Lanczos */ auto mv_mul = [&] (const vector <double> & in, vector <double> & out) {for (int i = 0; i <n; i ++) {for (int j = 0; j <n; j ++) { keluar [i] += matriks [i] [j]*di [j]; } } }; / * Mengeksekusi algoritma lanczos */ Mesin lambdalanczos <mouble> (mv_mul, n, true, 1); // Temukan 1 nilai eigen maksimum Vektor <Vouble> Eigenvalues; vektor <vector <mouble>> vektor eigen; engine.run (nilai eigen, vektor eigen); //// Jika C ++ 17 tersedia, notasi berikut melakukan hal yang sama: // auto [nilai eigen, vektor eigen] = engine.run () / * Hasil cetak */ cout << "EigenValue:" << SetPrecision (16) << EigenValues [0] << endl; cout << "Eigenvector:"; untuk (int i = 0; i <n; i ++) { cout << eigenvectors [0] [i] << ""; } cout << endl; }
Fitur ini memungkinkan Anda untuk melakukannya
Mudah menggabungkan lambda lanczos dengan perpustakaan matriks yang ada (misalnya eigen; lihat kode sampel).
Gunakan matriks yang elemen-elemennya sebagian diberikan, misalnya matriks jarang yang unsur-unsurnya yang tidak nol disimpan sebagai daftar {row-index, kolom-indeks, nilai} tupel.
Lambda Lanczos menyediakan dua antarmuka berikut:
Kelas LambdaLanczos
menghitung nilai eigen maksimum (minimum) dan vektor eigen yang sesuai. Nilai eigen yang merosot diperhitungkan. Kelas ini bertujuan masalah yang membutuhkan satu atau beberapa eigenpairs (misalnya eksitasi energi rendah dari sistem kuantum).
Kelas Exponentiator
menghitung jenis penggandaan matriks-vektor berikut:
Di mana
Sebagai aplikasi, kelas ini dapat digunakan untuk evolusi waktu sistem kuantum banyak:
dan algoritma yang lebih canggih, seperti TDVP dan jaringan tensor lainnya.
Lihat di sini.
Referensi API
C ++ 11 Lingkungan yang kompatibel
Lambda Lanczos sendiri tidak bergantung pada perpustakaan mana pun.
Untuk menjalankan tes, Google Test diperlukan.
Lambda Lanczos adalah perpustakaan header saja. Jadi langkah instalasi adalah sebagai berikut:
Klon atau unduh versi terbaru dari GitHub.
Tempatkan direktori include/lambda_lanczos
di mana saja dapat ditemukan proyek Anda.
Mit
mrcdr