带有Fortran 95和LAPACK的倾斜Hermitian矩阵的矩阵指数


11

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


2
您是否需要矩阵指数本身,还是需要将矩阵指数乘以向量?
保罗

@Paul:对不起,以前没有看到这个。不,我需要整个矩阵。
qubyte

为什么有人会否决这个问题?如果您不赞成,请在评论中留下原因!也许可以通过这种方式改进这个问题。
qubyte

我们依靠DGPADM,但是Jack Poulson表示,可能会有更好的方法。
Mike Dunlavey 2012年

Answers:


16

斜-埃尔米特矩阵的矩阵指数很容易计算:

假设是您的斜Hermitian矩阵,那么是Hermitian,并且通过zheevd和朋友可以得到分解AiA

iA=UΛUH,

其中是单一特征向量矩阵,是实数和对角线。然后,琐碎地UΛ

A=U(iΛ)UH.

一旦有了和,就很容易计算UΛ

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

通过首先对特征值求幂,通过zcopy设置通过对每个具有指数特征值的列运行zscal来执行,最后将结果设置为B:=UB:=Bexp(iΛ)

exp(A):=BUH

通过zgemm


谢谢!我错过了一个明显的伎俩有与。您已将我介绍到所需的特定LAPACK子例程中,因此,特别感谢。我不会将其标记为正确的(想先对其进行测试)。i
qubyte

1
不要着急 我实际上已经实施过,所以我非常有信心:-)
Jack Poulson

这将是我到处使用的那些神奇的代码之一。对于它的价值,我还将在注释行中表示感谢,这可能是其他人看不到的。
qubyte

2
@JackPoulson:先生,表现很好。这就是我选择一个不相信虚数(特征值除外)的专业的收获。
Geoff Oxberry 2012年

1
@JackPoulson:效果很好。再次感谢您。特别是zscal位。我将大部分其余代码放在另一个子例程中,但这是我忽略的东西。
qubyte

5

由于我正在使用手机,因此无法轻松链接事物,以后将添加链接。您可能想要看一下论文“ 19种计算矩阵指数的可疑方法”,Fortran库EXPOKIT,Jitse Niesen的关于用于计算矩阵指数的Krylov方法的论文,以及Nick Higham最近关于矩阵指数的一些论文。需要矩阵指数和向量的乘积比单独使用矩阵指数的乘积更常见,在这里,Krylov方法会很有帮助。对于您所描述的较小,密集的矩阵,Padé方法可能会更好,但是当在指数方法中用于ODE的数值积分时,使用Krylov方法取得了很多成功。


谢谢。我知道有19种可疑的方式,也有可能是冒用的,但是与我一起工作的一些人是在行业中,因此出于版权原因,我想避免这样做。我热衷于使用LAPACK / BLAS实施它,因为我已经链接到这些库了。一件事 我确实需要矩阵指数本身。我正在研究量子过程层析成像的一种变体,该过程由矩阵体现。稍后,我将与这个矩阵指数结合使用积分器,这才变得非常有趣!
qubyte

1

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

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

X=UDUT

其中是实正交,是实斜对称和块对角线。对角子块是或。由于它是块对角线,因此可以分别对每个子块取幂。的块是零,和,所以这些都是微不足道的。在的子块与实现D 2 × 2 1 × 1 1 × 1 exp 0 = 1 2 × 2UD2×21×11×1exp(0)=12×2

exp(0tt0)=(costsintsintcost)

然后,所需的指数矩阵为

exp(X)=Uexp(D)UT

我在量子化学代码中使用这种方法已有几十年了,而且所涉及的任何软件都从未遇到过任何问题。


您好,@ Ron Shepard,欢迎来到Computational Exchange SE。您可以编辑第二和第三个方程式吗?他们有点难以理解。
nicoguaro

0

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

(eA)v

其中v是向量,A是规则的厄米矩阵。它是EXPOKIT库中的子例程

否则,您可能需要考虑子例程,子例程适用于任何常规复数矩阵A。


那看起来不像是对Fortran库的引用。
杰夫·奥克斯贝里

@GeoffOxberry:我重写了它以包含fortran子例程
Paul

@Paul:恐怕不好。我正在做的是过程层析成像的全矩阵变体。另外偏斜-埃尔米托!
qubyte

非常感谢您重写了您的答案,但是根据编辑记录,您似乎完全改变了答案,选择了我按时间顺序排列的较早答案的元素,并添加了链接。
Geoff Oxberry 2012年

@GeoffOxberry:相反...我的结果与您无关,但是您在我有机会重写我的答案之前发布了您的信息:)
Paul
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.