Das folgende Repository enthält eine Implementierung des Standard -Lanczos -Algorithmus.
Installation
Um mit dem Algorithmus selbst herumzuspielen, git clone
das Repository auf Ihre lokale Maschine. Initialisieren Sie dann im geklonten Verzeichnis die Conda -Umgebung durch Laufen
conda env create --file environment.yml
Von dort aus können Sie die Umgebung so aktivieren wie so
conda activate LanczosAlgo
und führen Sie das Notebook in src/lanczos.ipynb
aus.
Einführung
Der Lanczos -Algorithmus ist ein direkter Algorithmus, der von Cornelius Lanczos entwickelt wurde und eine Anpassung von Leistungsmethoden ist, um die zu finden $ m $ "Nützlichste" (nützlich "(nützlich zu extrem höchsten/niedrigsten) Eigenwerten und Eigenvektoren von einem $ n mal n $ Hermitische Matrix, wo $ m $ ist oft, aber nicht unbedingt viel kleiner als $ n $ .
Algorithmus
Der Algorithmus verläuft wie folgt:
- Eine Hermitische Matrix gegeben $ A $ von Größe $ n mal n $ und ein willkürlicher Vektor $ v_1 $ Geben Sie mit euklidischer Norm 1 eine Standardzahl von Funktionsaufrufen an $ m = n $
- Lassen $ w_1 '$ = $ Av_1 $
- Lassen $ alpha_1 = w_1 '^* v_1 $
- Lassen $ w_1 = w_1 '^*- alpha_1 v_1 $
Wir bezeichnen die Schritte 2 - 4 als erste Iterationsschritte. Anschließend,
- Lassen $ beta_j = || w_ {j-1} || $
- Wenn $ beta_j neq0 $ , lassen $ v_j = frac {w_ {j-1}} { beta_j} $ . Sonst lass $ v_j $ ein willkürlicher Vektor mit euklidischer Norm 1 sein 1, der orthogonal ist $ v_1, ..., v_ {j-1} $
- Lassen $ w_j '= av_j $
- Lassen $ alpha_j = w_j'v_j $
- Lassen $ w_j = w_j '- alpha_j v_j- beta_j v_ {j-1} $
Wo $ j $ bezeichnet die Iterationsnummer und muss befriedigen $ 2 Leq J Leq M $ . Schließlich ist der Ausgang eine tridiagonalisierte Matrix $ T $ mit $ alpha_1, ..., alpha_m $ entlang der Hauptdiagonale und $ Beta_2, ..., Beta_M $ entlang der Super- und Subdiagonale.
Zukünftige Arbeit
Derzeit werden die Anstrengungen unternommen, um den Algorithmus auf Streustatesysteme auszudehnen. Sterne dieses Repo, wenn du benachrichtigt werden willst, wenn das live geht!