Wykładnicza macierz skośno-pustelniczej macierzy z fortranem 95 i LAPACK


11

Właśnie wciągam się w fortran 95 dla niektórych symulacji mechaniki kwantowej. Szczerze mówiąc, zostałem zepsuty przez Octave, więc wziąłem potęgowanie macierzy za pewnik. Biorąc pod uwagę (małe, ) pochylenie -Hermycka macierz o rozmiarze n × n , jaki jest najbardziej efektywny sposób użycia LAPACK do rozwiązania tego problemu? Nie używam otoki LAPACK95, tylko bezpośrednie połączenia z LAPACK.n36n×n


2
Czy potrzebujesz macierzy wykładniczej jako takiej, czy potrzebujesz macierzy wykładniczej pomnożonej przez wektor?
Paweł

@Paul: Przepraszam, nie widziałem tego wcześniej. Nie, potrzebuję całej matrycy.
qubyte

Dlaczego ktoś miałby głosować za tym pytaniem? Jeśli głosujesz, zostaw komentarz w komentarzu! Być może pytanie można poprawić w ten sposób.
qubyte

Polegamy na DGPADM , ale zdaniem Jacka Poulsona może być lepszy sposób.
Mike Dunlavey,

Odpowiedzi:


16

Wykładnicze macierze macierzy skośno-hermitowskich są tanie do obliczenia:

AiA

iA=UΛUH,

UΛ

A=U(iΛ)UH.

UΛ

exp(A)=exp(U(iΛ)UH)=Uexp(iΛ)UH

B:=UB:=Bexp(iΛ)

exp(A):=BUH

przez zgemm .


i

1
Bez pośpiechu. Wcześniej go wdrożyłem, więc jestem całkiem pewny :-)
Jack Poulson

To będzie jeden z tych magicznych fragmentów kodu, których używam wszędzie. Za to, co jest warte, umieszczę również podziękowanie w wierszu komentarza, którego prawdopodobnie nikt więcej nie zobaczy.
qubyte

2
@JackPoulson: Dobra gra, proszę pana. To właśnie dostaję za wybranie specjalizacji, która nie wierzy w liczby urojone (inne niż wartości własne).
Geoff Oxberry

1
@JackPoulson: Działa pięknie. Jeszcze raz dziękuję za to. Zwłaszcza bit zscal. Miałem resztę kodu w innym podprogramie, ale przeoczyłem to.
qubyte

5

Ponieważ korzystam z telefonu, nie mogę łatwo łączyć rzeczy i dodam je później. Prawdopodobnie zechcesz zajrzeć do artykułu „19 wątpliwych sposobów obliczania wykładniczej macierzy”, biblioteki Fortran EXPOKIT, pracy Jitse Niesen na temat metod obliczania wykładniczej macierzy Kryłowa oraz niektórych ostatnich prac Nicka Highama na temat wykładniczych macierzy. Bardziej powszechne jest wymaganie iloczynu macierzy wykładniczej i wektora niż samej macierzy wykładniczej, a tutaj metody Kryłowa mogą być bardzo pomocne. W przypadku mniejszych, gęstych matryc, takich jak te, które opisujesz, metody Padé mogą być lepsze, ale odniosłem spory sukces z metodami Kryłowa, gdy są stosowane w wykładniczych metodach integracji liczbowej ODE.


Dzięki. Jestem świadomy 19 podejrzanych sposobów , a także expokit, ale niektóre osoby, z którymi pracuję, pracują w branży, więc chcę tego uniknąć ze względu na prawa autorskie. Zależy mi na implementacji go z LAPACK / BLAS, ponieważ już linkuję do tych bibliotek. Jedna rzecz jednak; Potrzebuję samej macierzy wykładniczej. Pracuję nad wariantem kwantowej tomografii procesowej, a omawiany proces ucieleśnia matryca. Później zajmę się integratorem w połączeniu z wykładniczą macierzą, czyli wtedy, gdy robi się naprawdę interesująco!
qubyte

1

Złożone podejście do eigensolution jest poprawne matematycznie, ale działa więcej niż jest to konieczne. Niestety ulepszonego podejścia, które zamierzam opisać, nie można wdrożyć w przypadku wywołań LAPACK.

X

X=UDUT

UD2×21×11×1exp(0)=12×2

exp(0tt0)=(costsintsintcost)

Macierz wykładnicza, którą chcesz, jest następnie podawana przez

exp(X)=Uexp(D)UT

Stosowałem to podejście w moich kodach chemii kwantowej od kilku dziesięcioleci i nigdy nie miałem żadnych problemów z żadnym oprogramowaniem.


Witaj @Ron Shepard i witaj w Computational Exchange SE. Czy potrafisz edytować swoje drugie i trzecie równanie? Są trochę trudne do zrozumienia.
nicoguaro

0

Jeśli wszystko, czego potrzebujesz, to macierz wykładnicza pomnożona przez wektor, to ten fortranowy podprogram może ci się przydać . Oblicza:

(eA)v

gdzie v jest wektorem, a A jest regularną macierzą pustelnika. Jest to podprogram z biblioteki EXPOKIT

W przeciwnym razie warto rozważyć ten podprogram, który działa dla dowolnej ogólnej złożonej macierzy A.


To nie wygląda na odniesienie do bibliotek Fortrana.
Geoff Oxberry

@GeoffOxberry: Przepisałem go, aby uwzględnić podprogramy z Fortranu
Paweł

@Paul: Nie dobrze, obawiam się. To, co robię, to całkowicie matrycowa odmiana tomografii procesowej. Ponadto pochylenie -Hermitian!
qubyte

Doceniam to, że przepisałeś swoją odpowiedź, ale na podstawie ścieżki edycji wygląda na to, że całkowicie zmieniłeś swoją odpowiedź, wziąłeś elementy mojej wcześniejszej chronologicznie odpowiedzi i dodałeś linki.
Geoff Oxberry

@GeoffOxberry: Wręcz przeciwnie ... Moje wyniki przyszły niezależnie od twoich, ale opublikowałeś zanim zdążyłem ponownie napisać moją odpowiedź :)
Paul
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.