Baru-baru ini saya mengajukan pertanyaan di sepanjang baris yang sama untuk matriks miring-Hermitian. Terinspirasi oleh keberhasilan pertanyaan itu, dan setelah membenturkan kepalaku ke dinding selama beberapa jam, aku melihat matriks eksponensial dari matriks asimetris yang nyata. Rute untuk menemukan nilai eigen dan vektor eigen tampaknya agak berbelit-belit, dan saya khawatir saya tersesat.
Latar Belakang: Beberapa waktu yang lalu saya menanyakan pertanyaan ini pada fisika teoretis SE. Hasilnya memungkinkan saya untuk frase persamaan induk sebagai matriks asimetris nyata. Dalam kasus waktu-independen, persamaan utama diselesaikan dengan eksponensial matriks ini. Dalam kasus yang bergantung pada waktu, itu akan membutuhkan integrasi. Saya hanya peduli dengan kebebasan waktu pada saat ini.
Setelah melihat berbagai subrutin saya pikir saya harus menelepon ( ? Gehrd , ? Orghr , ? Hseqr ...) tidak jelas apakah akan lebih sederhana untuk melemparkan matriks dari real*8
ke complex*16
dan dilanjutkan dengan versi ganda kompleks rutinitas ini, atau tetap dengan real*8
dan menerima menggandakan jumlah array saya dan membuat matriks yang kompleks nanti.
Jadi, rutinitas mana yang harus saya panggil (dan dalam urutan apa), dan haruskah saya menggunakan versi ganda nyata atau versi ganda kompleks? Di bawah ini adalah upaya melakukan ini dengan versi ganda nyata. Saya menjadi macet menemukan nilai eigen dan vektor eigen dari 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