C ++ adaptive und nur Header Lanczos Algorithmus Library
Lambda Lanczos berechnet den kleinsten oder größten Eigenwert und den entsprechenden Eigenvektor einer symmetrischen (hermitischen) Matrix.
Das charakteristische Merkmal ist die Matrixvektor-Multiplikationsroutine, die im Lanczos-Algorithmus verwendet wird, ist anpassungsfähig:
#include <lambda_lanczos/lambda_lanczos.hpp> Verwenden von lambda_lanczos :: lambdalanczos;/ * Einige enthalten Deklarationen und werden weggelassen */void sample () {const int n = 3; Doppelmatrix [n] [n] = {{2.0, 1.0, 1.0}, {1.0, 2.0, 1.0}, {1.0, 1.0, 2.0}}; // seine Eigenwerte sind {4, 1, 1} / * Die im Lanczos-Algorithmus verwendete Matrix-Vektor-Multiplikationsroutine *//// auto mv_mul = [&] (const vector <double> & in, vector <double> & out) {für (int i = 0; i <n; i ++) {für (int j = 0; j <n; j ++) { out [i] += matrix [i] [j]*in [j]; } } }; / * Lanczos Algorithmus ausführen *// Lambdalanczos <Double> Motor (MV_MUL, N, TRUE, 1); // 1 maximales Eigenwert finden Vektor <Double> Eigenwerte; Vektor <Vektor <double >> Eigenvektoren; Motor.Run (Eigenwerte, Eigenvektoren); //// Wenn C ++ 17 verfügbar ist, macht die folgende Notation dasselbe: // Auto [Eigenwerte, Eigenvektoren] = motor.run () / * Druckergebnis */ cout << "Eigenwert:" << setPrecision (16) << Eigenvalues [0] << endl; cout << "Eigenvektor:"; für (int i = 0; i <n; i ++) { cout << Eigenvektoren [0] [i] << ""; } cout << endl; }
Diese Funktion ermöglicht es Ihnen
Kombinieren Sie einfach Lambda Lanczos mit vorhandenen Matrixbibliotheken (z. B. Eigen; siehe Beispielcode).
Verwenden Sie eine Matrix, deren Elemente teilweise angegeben sind, z. B. eine spärliche Matrix, deren Elemente ungleich Null als Liste von {row-Index, Spalten-Index, Wert} Tupeln gespeichert sind.
Lambda Lanczos bietet die folgenden zwei Schnittstellen:
LambdaLanczos
-Klasse berechnet maximale (minimale) Eigenwerte und entsprechende Eigenvektoren. Entartete Eigenwerte werden berücksichtigt. Diese Klasse zielt auf Probleme ab, bei denen ein oder einige Eigenpaare erforderlich sind (z. B. eine geringe Energieerregung eines Quantensystems).
Exponentiator
-Klasse berechnet den folgenden Typ der Matrix-Vektor-Multiplikation:
Wo
Als Anwendung kann diese Klasse für die Zeitentwicklung eines Quanten-Vielfalt-Systems verwendet werden:
und ausgefeiltere Algorithmen wie TDVP und andere Tensor -Netzwerke.
Siehe hier.
API -Referenz
C ++ 11 kompatible Umgebung
Lambda Lanczos selbst hängt nicht von Bibliotheken ab.
Um Tests auszuführen, ist Google Test erforderlich.
Lambda Lanczos ist eine Nur-Header-Bibliothek. Der Installationsschritt lautet also wie folgt:
Klonen oder laden Sie die neueste Version von GitHub herunter.
Platzieren Sie das Verzeichnis include/lambda_lanczos
überall, wo Ihr Projekt finden kann.
MIT
Mrcdr