Je viens de me retrouver dans fortran 95 pour quelques simulations de mécanique quantique. Honnêtement, j'ai été gâté par Octave, donc j'ai pris l'exponentiation matricielle pour acquis. Étant donné un (petit, ) skew -matrice hermitienne de taille , quel est le moyen le plus efficace d'utiliser LAPACK pour résoudre ce problème? Je n'utilise pas le wrapper LAPACK95, juste des appels directs à LAPACK.
11
Réponses:
Les exponentielles matricielles des matrices asymétriques-hermitiennes sont peu coûteuses à calculer:
Supposons que est votre matrice hermitienne asymétrique , alors est hermitien, et via zheevd et ses amis, vous pouvez obtenir la décompositioni AUNE i A
où est la matrice de vecteur propre unitaire et est réel et diagonal. Puis, trivialement,ΛU Λ
Une fois que vous avez et , il est facile de calculerΛU Λ
en exponentiant d'abord les valeurs propres, en définissant via zcopy , en exécutant en exécutant zscal sur chaque colonne avec une valeur propre exponentiée, et enfin en définissant votre résultat surB : = B exp ( - i Λ )B : = U B : = B exp( - i Λ )
via zgemm .
la source
Étant donné que je suis sur mon téléphone, je ne peux pas lier les choses facilement et j'ajouterai des liens plus tard. Vous voudrez probablement consulter l'article "19 manières douteuses de calculer l'exponentielle de la matrice", la bibliothèque Fortran EXPOKIT, l'article de Jitse Niesen sur les méthodes de Krylov pour calculer l'exponentielle de la matrice, et certains des articles récents de Nick Higham sur les exponentielles de la matrice. Il est plus courant d'avoir besoin du produit d'une matrice exponentielle et d'un vecteur que de la matrice exponentielle seule, et ici, les méthodes de Krylov peuvent être très utiles. Pour les matrices plus petites et denses comme celles que vous décrivez, les méthodes Padé pourraient être meilleures, mais j'ai eu beaucoup de succès avec les méthodes Krylov lorsqu'elles sont utilisées dans des méthodes exponentielles pour l'intégration numérique des ODE.
la source
L'approche complexe de la résolution électronique est mathématiquement correcte, mais elle fait plus de travail que nécessaire. Malheureusement, l'approche améliorée que je vais décrire ne peut pas être mise en œuvre avec les appels LAPACK.
Regardez RC Ward et LJ Gray, ACM Trans. Math. Doux. 4, 278, (1978). Ceci décrit le logiciel disponible dans l'algorithme TOMS 530 et que vous pouvez télécharger à partir de netlib. Ceci décrit comment factoriser la matrice symétrique tant queX
La matrice exponentielle que vous souhaitez est alors donnée par
J'utilise cette approche dans mes codes de chimie quantique depuis plusieurs décennies et je n'ai jamais eu de problème avec aucun des logiciels impliqués.
la source
Si tout ce dont vous avez besoin est l'exponentielle de la matrice multipliée par un vecteur, alors ce sous - programme fortran peut vous être utile. Il calcule:
où v est un vecteur et A est une matrice hermitienne régulière. Il s'agit d'un sous-programme de la bibliothèque EXPOKIT
Sinon, vous voudrez peut-être considérer ce sous - programme, qui fonctionne pour toute matrice complexe générale A.
la source