C ++ 적응 형 및 헤더 전용 Lanczos 알고리즘 라이브러리
Lambda Lanczos는 대칭 (Hermitian) 매트릭스의 가장 작거나 가장 큰 고유 값과 해당 고유 벡터를 계산합니다.
특징적인 기능은 Lanczos 알고리즘에 사용되는 매트릭스 벡터 곱셈 루틴이 적응할 수 있습니다.
#include <lambda_lanczos/lambda_lanczos.hpp> lambda_lanczos 사용 사용 이중 매트릭스 [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 <bouble> & in, vector <bouble> & out) {for (int i = 0; i <n; i ++) {for (int j = 0; j <n; j ++) { out [i] += matrix [i] [j]*에서 [j]; } } }; / * Lanczos 알고리즘 실행 */ Lambdalanczos <bouble> 엔진 (mv_mul, n, true, 1); // 최대 고유 값을 찾으십시오 벡터 <bouble> 고유 값; 벡터 <벡터 <double >> 고유 벡터; Engine.run (고유 값, 고유 벡터); //// C ++ 17을 사용할 수 있으면 다음 표기법이 동일한 작업을 수행합니다. // auto [고유 값, 고유 벡터] = engine.run () / * 인쇄 결과 */ cout << "고유 값 :"<< setprecision (16) << 고유 값 [0] << endl; cout << "고유 벡터 :"; for (int i = 0; i <n; i ++) { cout << 고유 벡터 [0] [i] << ""; } cout << endl; }
이 기능을 사용하면 가능합니다
Lambda Lanczos를 기존 매트릭스 라이브러리와 쉽게 결합하십시오 (예 : Eigen; 샘플 코드 참조).
요소가 부분적으로 주어진 매트릭스를 사용하십시오. 예를 들어 0이 아닌 요소가 {row-index, column-Index, value} 튜플 목록으로 저장되는 드문 매트릭스입니다.
Lambda Lanczos는 다음 두 인터페이스를 제공합니다.
LambdaLanczos
클래스는 최대 (최소) 고유 값과 해당 고유 벡터를 계산합니다. 퇴화 고유 값이 고려됩니다. 이 클래스는 하나 또는 몇 개의 고유 쌍 (예 : 양자 시스템의 저에너지 여기)이 필요한 문제를 목표로합니다.
Exponentiator
Class는 다음 유형의 행렬 벡터 곱셈을 계산합니다.
어디
응용 프로그램으로서,이 클래스는 양자 다수 시스템의 시간 진화에 사용될 수있다.
TDVP 및 기타 텐서 네트워크와 같은보다 정교한 알고리즘.
여기를 참조하십시오.
API 참조
C ++ 11 호환 환경
Lambda Lanczos 자체는 도서관에 의존하지 않습니다.
테스트를 실행하려면 Google 테스트가 필요합니다.
Lambda Lanczos 는 헤더 전용 라이브러리입니다. 설치 단계는 다음과 같습니다.
Github에서 최신 버전을 복제하거나 다운로드하십시오.
프로젝트에서 찾을 수있는 곳에는 include/lambda_lanczos
디렉토리를 배치하십시오.
MIT
MRCDR