Ich stecke mich gerade für einige quantenmechanische Simulationen in fortran 95. Ehrlich gesagt wurde ich von Octave verwöhnt, daher habe ich die Matrixexponentiation als selbstverständlich angesehen. Was ist bei einer (kleinen, ) Schräg- Hermitianischen Matrix der Größe der effizienteste Weg, um dieses Problem mit LAPACK zu lösen? Ich verwende nicht den LAPACK95-Wrapper, sondern nur direkte Anrufe an LAPACK.
11
Antworten:
Matrixexponentiale von schief-hermitischen Matrizen sind billig zu berechnen:
Angenommen, ist Ihre schief- Matrix, dann ist , und über zheevd und Freunde können Sie die Zerlegung erhalteni A.A iA
Dabei ist die einheitliche Eigenvektormatrix und ist real und diagonal. Dann, trivial,ΛU Λ
Sobald Sie und , ist es einfach zu berechnenΛU Λ
indem Sie zuerst die Eigenwerte potenzieren , über zcopy setzen , ausführen, indem Sie zscal für jede Spalte mit einem potenzierten Eigenwert ausführen und schließlich Ihr Ergebnis auf setzenB : = B exp ( - i Λ )B:=U B:=Bexp(−iΛ)
über zgemm .
quelle
Da ich auf meinem Handy bin, kann ich die Dinge nicht einfach verknüpfen und werde später Links hinzufügen. Sie sollten sich wahrscheinlich das Papier "19 zweifelhafte Methoden zur Berechnung des Matrixexponentials", die Fortran-Bibliothek EXPOKIT, Jitse Niesens Artikel über Krylov-Methoden zur Berechnung des Matrixexponentials und einige der jüngsten Artikel von Nick Higham über Matrixexponentiale ansehen. Es ist üblicher, das Produkt einer Exponentialmatrix und eines Vektors als das Exponential der Matrix allein zu benötigen, und hier können Krylov-Methoden sehr hilfreich sein. Für kleinere, dichte Matrizen wie die von Ihnen beschriebenen sind Padé-Methoden vielleicht besser, aber ich habe mit Krylov-Methoden viel Erfolg gehabt, wenn sie in exponentiellen Methoden zur numerischen Integration von ODEs verwendet wurden.
quelle
Der komplexe Eigenlösungsansatz ist mathematisch korrekt, macht aber mehr Arbeit als nötig. Leider kann der verbesserte Ansatz, den ich beschreiben werde, nicht mit LAPACK-Aufrufen implementiert werden.
Schauen Sie sich RC Ward und LJ Gray, ACM Trans an. Mathematik. Sanft. 4, 278 (1978). Dies beschreibt die Software, die im TOMS-Algorithmus 530 verfügbar ist und die Sie von netlib herunterladen können. Dies beschreibt, wie die symmetrische Versatzmatrix als faktorisiert wirdX
wobei real orthogonal ist und real schiefsymmetrisch und blockdiagonal ist. Die diagonalen Unterblöcke sind entweder oder . Da es sich um eine Blockdiagonale handelt, können Sie jeden Unterblock separat potenzieren. Die Blöcke sind Null und , also sind diese trivial. Die Unterblöcke sind fertigD 2 × 2 1 × 1 1 × 1 exp ( 0 ) = 1 2 × 2U D 2×2 1×1 1×1 exp(0)=1 2×2
Die gewünschte Exponentialmatrix ist dann gegeben durch
Ich habe diesen Ansatz in meinen quantenchemischen Codes seit mehreren Jahrzehnten verwendet und hatte nie Probleme mit der beteiligten Software.
quelle
Wenn Sie nur die Exponentialmatrix multipliziert mit einem Vektor benötigen, kann diese fortran-Subroutine für Sie von Nutzen sein. Es berechnet:
Dabei ist v ein Vektor und A eine reguläre Einsiedlermatrix. Es ist eine Unterroutine aus der EXPOKIT- Bibliothek
Andernfalls möchten Sie möglicherweise diese Unterroutine berücksichtigen , die für jede allgemeine komplexe Matrix A funktioniert.
quelle