Нещодавно я задав запитання по тим же принципам для косо-ермітських матриць. Натхнений успіхом цього питання, і після удару головою об стіну пару годин, я дивлюся на матричний експонент реальних асиметричних матриць. Шлях до пошуку власних значень та власних векторів здається досить складним, і, боюся, я заблукав.
Передумови: Деякий час тому я задав це питання теоретичній фізиці СВ. Результат дозволяє мені сформулювати майстерні рівняння як реальні асиметричні матриці. У незалежному від часу випадку головне рівняння вирішується шляхом експоненції цієї матриці. У залежності від часу це потребує інтеграції. Мене зараз хвилює лише незалежність від часу.
Після дивлячись на різних підпрограма я думаю , що я повинен називати ( ? 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