我最近问了一个关于斜厄米特矩阵的问题。受到该问题成功的启发,在将我的头撞到墙上几个小时后,我正在研究真正非对称矩阵的矩阵指数。找到特征值和特征向量的路径似乎相当复杂,我担心我迷路了。
背景:前段时间我在理论物理SE上问了这个问题。结果使我可以将主方程组表述为真正的非对称矩阵。在与时间无关的情况下,主方程通过对该矩阵求幂来求解。在依赖时间的情况下,它将需要集成。我现在只关心时间独立性。
在查看我认为我应该调用的各种子例程时(?gehrd、?orghr、?hseqr ...),不清楚将矩阵从real*8
to 转换为complex*16
并继续执行这些例程的复杂 double 版本是否更简单,或者坚持real*8
并接受将我的数组数量翻倍并在以后制作它们的复杂矩阵的打击。
那么,我应该调用哪些例程(以及以什么顺序),我应该使用真正的 double 版本还是复杂的 double 版本?下面是尝试使用真正的双重版本进行此操作。我在寻找L*t
.
function time_indep_master(s,L,t)
! s is the length of a side of L, which is square.
! L is a real*8, asymmetric square matrix.
! t is a real*8 value corresponding to time.
! This function (will) compute expm(L*t).
integer, intent(in) :: s
real*8, intent(in) :: L(s,s), t
real*8 :: tau(s-1), work(s), wr(s), wi(s), vl
real*8, dimension(s,s) :: time_indep_master, A, H, vr
integer :: info, m, ifaill(2*s), ifailr(2*s)
logical :: sel(s)
A = L*t
sel = .true.
call dgehrd(s,1,s,A,s,tau,work,s,info)
H = A
call dorghr(s,1,s,A,s,tau,work,s,info)
call dhseqr('e','v',s,1,s,H,s,wr,wi,A,s,work,s,info)
call dhsein('r','q','n',sel,H,s,wr,wi,vl,1,vr,s,2*s,m,work,ifaill,ifailr,info)
! Confused now...
end function