Hace poco hice una pregunta en la misma línea para las matrices ermitas sesgadas. Inspirado por el éxito de esa pregunta, y después de golpearme la cabeza contra la pared durante un par de horas, estoy mirando la matriz exponencial de las matrices asimétricas reales. La ruta para encontrar los valores propios y los vectores propios parece bastante complicada, y me temo que me he perdido.
Antecedentes: Hace algún tiempo hice esta pregunta sobre la física teórica SE. El resultado me permite formular ecuaciones maestras como matrices asimétricas reales. En el caso independiente del tiempo, la ecuación maestra se resuelve exponiendo esta matriz. En el caso dependiente del tiempo, requerirá integración. Solo me preocupa la independencia temporal en este momento.
Al mirar las diversas subrutinas creo que debería estar llamando a ( ? Gehrd , ? Orghr , ? Hseqr ...) no está claro si sería más sencillo para emitir la matriz a partir real*8
de complex*16
y proceder con las versiones dobles complejas de estas rutinas, o quédate real*8
y toma el éxito de duplicar el número de mis matrices y hacer una matriz compleja de ellas más tarde.
Entonces, ¿a qué rutinas debería llamar (y en qué orden), y debería usar las versiones dobles reales o las versiones dobles complejas? A continuación hay un intento de hacer esto con versiones dobles reales. Me he quedado atascado encontrando los valores propios y los vectores propios de 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