lambda lanczos
1.0.0
C ++自適應和僅標頭蘭斯佐斯算法庫
Lambda Lanczos計算對稱(Hermitian)矩陣的最小或最大的特徵值和相應的特徵向量。
特徵特徵是蘭斯佐斯算法中使用的矩陣矢量乘法例程是適應性的:
#include <lambda_lanczos/lambda_lanczos.hpp>使用lambda_lanczos :: lambdalanczos;/ *有些包括和使用聲明被省略 */void sample(){const int int n = 3; 雙矩陣[n] [n] = {{2.0,1.0,1.0}, {1.0、2.0、1.0}, {1.0、1.0、2.0}}; //其特徵值為{4,1,1} / *準備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 < n; j ++){ { out [i] += matrix [i] [j]*in [j]; } } }; / *執行Lanczos算法 */ lambdalanczos <double>引擎(MV_MUL,N,true,1); //找到1個最大特徵值 向量<double>特徵值; 向量<向量<double >>特徵向量; 引擎。 ////如果可用C ++ 17,則以下符號執行相同的操作: // auto [eigenvalues,eigenVectors] = Engine.run() / *打印結果 */ cout <<“ eigenvalue:” << setPrecision(16)<< eigenvalues [0] << endl; cout <<“ eigenvector:”; for(int i = 0; i <n; i ++){ cout << eigenVectors [0] [i] <<“”; } cout << endl; }
此功能使您可以
輕鬆將Lambda Lanczos與現有矩陣庫(例如eigen;請參閱示例代碼)相結合。
使用其部分給出的元素的矩陣,例如,稀疏矩陣的非零元素被存儲為{row-index,column-index,value}元組的列表。
Lambda Lanczos提供以下兩個接口:
LambdaLanczos
類計算最大(最小)特徵值和相應的特徵向量。考慮歸化特徵值。該課程的目的是需要一種或幾個特徵的問題(例如,量子系統的低能激發)。
Exponentiator
類計算以下類型的矩陣矢量乘法:
在哪裡
作為應用程序,該類可用於量子多體系統的時間演變:
以及更複雜的算法,例如TDVP和其他張量網絡。
請參閱此處。
API參考
C ++ 11兼容環境
Lambda Lanczos本身不取決於任何庫。
為了進行測試,需要Google測試。
Lambda Lanczos是僅標題的圖書館。因此,安裝步驟如下:
克隆或從Github下載最新版本。
將include/lambda_lanczos
目錄放置在您項目可以找到的任何地方。
麻省理工學院
mrcdr