具有 fortran 95 和 LAPACK 的斜厄米特矩阵的矩阵指数

计算科学 正则 拉帕克
2021-12-20 03:22:39

我刚刚进入 fortran 95 进行一些量子力学模拟。老实说,我被 Octave 宠坏了,所以我认为矩阵求幂是理所当然的。给定一个(小,n36) skew -Hermitian 矩阵大小n×n,使用LAPACK解决这个问题最有效的方法是什么?我没有使用 LAPACK95 包装器,只是直接调用 LAPACK。

4个回答

斜厄米特矩阵的矩阵指数计算起来很便宜:

认为A是你的斜厄米特矩阵,然后iA是 Hermitian,通过zheevd和朋友可以得到分解

iA=UΛUH,

在哪里U是酉特征向量矩阵和Λ是实数和对角线。然后,琐碎地,

A=U(iΛ)UH.

一旦你有UΛ, 很容易计算

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

通过首先对特征值求幂,设置B:=U通过zcopy,执行B:=Bexp(iΛ)通过使用指数特征值在每一列上运行zscal,最后将结果设置为

exp(A):=BUH

通过zgemm

由于我在手机上,我无法轻松链接东西,稍后会添加链接。您可能需要查看论文“19 Dubious Ways to Calculate the Matrix Exponential”、Fortran 库 EXPOKIT、Jitse Niesen 关于计算矩阵指数的 Krylov 方法的论文,以及 Nick Higham 最近关于矩阵指数的一些论文。与单独的矩阵指数相比,需要矩阵指数和向量的乘积更为常见,在这里,Krylov 方法非常有用。对于像您描述的那样更小、更密集的矩阵,Padé 方法可能会更好,但是当在 ODE 数值积分的指数方法中使用 Krylov 方法时,我已经取得了很大的成功。

复本征解法在数学上是正确的,但它所做的工作比必要的要多。不幸的是,我将要描述的改进方法不能用 LAPACK 调用来实现。

看看 RC Ward 和 LJ Gray,ACM Trans。数学。柔软的。4, 278, (1978)。这描述了 TOMS 算法 530 中可用的软件,您可以从 netlib 下载该软件。这描述了如何分解偏斜对称矩阵X作为

X=UDUT

在哪里U是实正交且D是真正的斜对称和块对角线。对角线子块是2×2或者1×1. 因为它是块对角线,所以您可以分别对每个子块取幂。1×1块为零,并且exp(0)=1,所以这些都是微不足道的。2×2子块完成

exp(0tt0)=(costsintsintcost)

然后,您想要的指数矩阵由下式给出

exp(X)=Uexp(D)UT

几十年来,我一直在我的量子化学代码中使用这种方法,并且我从未遇到过任何涉及的软件问题。

如果您只需要矩阵指数乘以向量,那么这个 fortran 子例程可能对您有用。它计算:

(eA)v

其中 v 是一个向量,A 是一个正则厄米矩阵。它是来自EXPOKIT库的子程序

否则,您可能需要考虑这个适用于任何一般复矩阵 A 的子例程。