我只是迷上了fortran 95,进行了一些量子力学模拟。老实说,我被Octave宠坏了,所以我认为矩阵求幂是理所当然的。给定大小为的(小,)个斜度-厄密矩阵,使用LAPACK解决此问题的最有效方法是什么?我没有使用LAPACK95包装器,只是直接调用LAPACK。
我只是迷上了fortran 95,进行了一些量子力学模拟。老实说,我被Octave宠坏了,所以我认为矩阵求幂是理所当然的。给定大小为的(小,)个斜度-厄密矩阵,使用LAPACK解决此问题的最有效方法是什么?我没有使用LAPACK95包装器,只是直接调用LAPACK。
Answers:
斜-埃尔米特矩阵的矩阵指数很容易计算:
假设是您的斜Hermitian矩阵,那么是Hermitian,并且通过zheevd和朋友可以得到分解
其中是单一特征向量矩阵,是实数和对角线。然后,琐碎地
一旦有了和,就很容易计算
通过首先对特征值求幂,通过zcopy设置通过对每个具有指数特征值的列运行zscal来执行,最后将结果设置为
通过zgemm。
由于我正在使用手机,因此无法轻松链接事物,以后将添加链接。您可能想要看一下论文“ 19种计算矩阵指数的可疑方法”,Fortran库EXPOKIT,Jitse Niesen的关于用于计算矩阵指数的Krylov方法的论文,以及Nick Higham最近关于矩阵指数的一些论文。需要矩阵指数和向量的乘积比单独使用矩阵指数的乘积更常见,在这里,Krylov方法会很有帮助。对于您所描述的较小,密集的矩阵,Padé方法可能会更好,但是当在指数方法中用于ODE的数值积分时,使用Krylov方法取得了很多成功。
复杂的本征解方法在数学上是正确的,但是它做的工作比必要的多。不幸的是,我将要描述的改进方法无法通过LAPACK调用实现。
看看RC Ward和LJ Gray,ACM Trans。数学。柔软的。4,278,(1978)。这描述了TOMS算法530中可用的软件,您可以从netlib下载该软件。这描述了如何将斜对称矩阵分解为
其中是实正交,是实斜对称和块对角线。对角子块是或。由于它是块对角线,因此可以分别对每个子块取幂。的块是零,和,所以这些都是微不足道的。在的子块与实现D 2 × 2 1 × 1 1 × 1 exp (0 )= 1 2 × 2
然后,所需的指数矩阵为
我在量子化学代码中使用这种方法已有几十年了,而且所涉及的任何软件都从未遇到过任何问题。