量子力学のシミュレーションのために、Fortran 95に没頭しています。正直なところ、私はOctaveに甘やかされてきたので、当然行列の累乗法を採用しました。(小、与えられた)スキューサイズの-Hermitian行列のn × nは、この問題を解決するためにLAPACKを使用する最も効率的な方法は何ですか?LAPACK95ラッパーは使用せず、LAPACKを直接呼び出します。
量子力学のシミュレーションのために、Fortran 95に没頭しています。正直なところ、私はOctaveに甘やかされてきたので、当然行列の累乗法を採用しました。(小、与えられた)スキューサイズの-Hermitian行列のn × nは、この問題を解決するためにLAPACKを使用する最も効率的な方法は何ですか?LAPACK95ラッパーは使用せず、LAPACKを直接呼び出します。
回答:
歪エルミート行列の行列指数は、計算が安価です。
仮定、あなたの歪エルミート行列であるそして私Aがエルミートで、経由zheevdや友人あなたが分解を得ることができます
ここで、はユニタリ固有ベクトル行列であり、Λは実数および対角です。それから、ささいに、
とΛを取得したら、簡単に計算できます
固有値を累乗設定最初介しzcopy、実行B := BのEXP (- I Λを)実行することによりzscal固有値累乗で各カラムに、そして最終的にあなたの結果を設定します
zgemm経由。
私は電話にいるので、物事を簡単にリンクすることはできず、後でリンクを追加します。「19行列の指数関数を計算する疑わしい方法」、FortranライブラリのEXPOKIT、Jitse Niesenのマトリックス指数計算のKrylovの方法に関する論文、およびNick Highamのマトリックス指数に関する最近の論文をご覧ください。行列指数のみの場合よりも行列指数とベクトルの積が必要になるのが一般的です。ここでは、クリロフ法が非常に役立ちます。説明したような小さくて密度の高い行列の場合、パデ法の方が良いかもしれませんが、ODEの数値積分のために指数法の内部で使用すると、クリロフ法で大きな成功を収めました。
複雑な固有値解法は数学的には正しいですが、必要以上の作業を行います。残念ながら、これから説明する改善されたアプローチは、LAPACK呼び出しでは実装できません。
RC WardとLJ Gray、ACM Transを見てください。数学。柔らかい。4、278、(1978)。これは、TOMSアルゴリズム530で利用でき、netlibからダウンロードできるソフトウェアについて説明しています。これは、スキュー対称行列次のように因数分解する方法を説明しています。
必要な指数行列は、次のように与えられます
私は数十年にわたって量子化学コードでこのアプローチを使用してきましたが、関連するソフトウェアで問題が発生したことはありません。
必要なのがベクトルで乗算された行列指数だけである場合、このFortranサブルーチンはあなたに役立つかもしれません。以下を計算します:
ここで、vはベクトル、Aは通常のエルミート行列です。EXPOKITライブラリーのサブルーチンです
そうでない場合は、このサブルーチンを検討することをお勧めします。このサブルーチンは、一般的な複雑なマトリックスAで機能します。