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