Só estou me metendo no fortran 95 para algumas simulações de mecânica quântica. Honestamente, eu fui mimada pela Octave, então tomei como certa a exponenciação da matriz. Dado um (pequeno, ) inclinação matriz -Hermitian de tamanho , qual é a maneira mais eficiente de usar LAPACK para resolver este problema? Não estou usando o wrapper LAPACK95, apenas chamadas diretas para o LAPACK.n × n
11
Respostas:
Exponenciais de matriz de matrizes enviesadas-Hermitianas são baratas para calcular:
Suponha que seja sua matriz hermitiana enviesada, então i A seja hermitiana e, através de zheevd e amigos, você pode obter a decomposiçãoUMA i A
onde é a matriz de vetor próprio e Λ é real e diagonal. Então, trivialmente,você Λ
Depois de ter e Λ , é fácil calcularvocê Λ
exponenciando primeiro os autovalores, configurando via zcopy , executando B : = B exp ( - i Λ ) executando zscal em cada coluna com um autovalor exponencial e, finalmente, configurando seu resultado paraB : = U B : = B exp( - i Λ )
via zgemm .
fonte
Como estou no meu telefone, não consigo vincular as coisas facilmente e adicionarei links posteriormente. Você provavelmente vai querer ler o artigo "19 maneiras dúbias de calcular o exponencial da matriz", a biblioteca Fortran EXPOKIT, o artigo de Jitse Niesen sobre métodos de Krylov para o cálculo do exponencial da matriz e alguns dos trabalhos recentes de Nick Higham sobre exponenciais da matriz. É mais comum precisar do produto de um exponencial da matriz e de um vetor do que o exponencial da matriz sozinho, e aqui os métodos de Krylov podem ser bastante úteis. Para matrizes menores e densas como as que você descreve, os métodos Padé podem ser melhores, mas tive muito sucesso com os métodos de Krylov quando usado em métodos exponenciais para integração numérica de ODEs.
fonte
A abordagem complexa de auto-resolução é matematicamente correta, mas faz mais trabalho do que o necessário. Infelizmente, a abordagem aprimorada que estou prestes a descrever não pode ser implementada com chamadas LAPACK.
A matriz exponencial que você deseja é dada por
Eu usei essa abordagem nos meus códigos de química quântica por várias décadas e nunca tive problemas com nenhum software envolvido.
fonte
Se tudo o que você precisa é a exponencial da matriz multiplicada por um vetor, essa sub - rotina fortran pode ser útil para você. Ele calcula:
onde v é um vetor e A é uma matriz eremita regular. É uma sub-rotina da biblioteca EXPOKIT
Caso contrário, você pode considerar essa sub - rotina, que funciona para qualquer matriz complexa geral A.
fonte