최근 에 skew-Hermitian 행렬에 대해 같은 줄을 따라 질문했습니다 . 그 질문의 성공에 영감을 받아 벽에 머리를 두 시간 동안 두드린 후 실제 비대칭 행렬의 행렬 지수를보고 있습니다. 고유 값과 고유 벡터를 찾는 경로는 다소 복잡해 보이므로 잃어버린 것 같습니다.
배경 : 얼마 전에 나는 이론 물리 물리학 SE에 대해이 질문 을했습니다. 결과적으로 마스터 방정식을 실제 비대칭 행렬로 표현할 수 있습니다. 시간에 독립적 인 경우,이 방정식을 지수화하여 마스터 방정식을 풉니 다. 시간 종속적 인 경우 통합이 필요합니다. 나는 현재 시간 독립에 대해서만 걱정하고 있습니다.
다양한 서브 루틴을보고하면 내가 전화해야한다고 생각 ( ? gehrd , ? orghr , ? hseqr ...) 그것에서 행렬을 캐스팅 간단 할 것인지가 불분명 real*8
에 complex*16
이러한 루틴의 복잡한 이중 버전 및 진행, 또는 real*8
내 배열의 수를 두 배로 늘리고 나중에 복잡한 행렬을 만드는 것을 명심하십시오.
그렇다면 어떤 루틴을 어떤 순서로 호출해야합니까? 그리고 실제 이중 버전 또는 복잡한 이중 버전을 사용해야합니까? 아래는 실제 이중 버전 으로이 작업을 수행하려는 시도입니다. 의 고유 값과 고유 벡터를 찾는 데 어려움을 겪었습니다 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