Недавно я задал вопрос в том же духе для косоэрмитовых матриц. Вдохновленный успехом этого вопроса, и после того, как пару часов ударился головой о стену, я смотрю на экспоненциальную матрицу вещественных асимметричных матриц. Путь к поиску собственных значений и собственных векторов кажется довольно запутанным, и я боюсь, что я заблудился.
Фон: Некоторое время назад я задал этот вопрос по теоретической физике 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