Geçenlerde aynı çizgide eğri-Hermit matrisleri için bir soru sordum . Bu sorunun başarısından esinlenerek, kafamı birkaç saat boyunca bir duvara vurduktan sonra, gerçek asimetrik matrislerin üstel matrisine bakıyorum. Özdeğerleri ve özvektörleri bulma yolu oldukça kıvrımlı görünüyor ve korkuyorum ki kayboldum.
Arka plan: Bir süre önce teorik fizik SE hakkında bu soruyu sordum . Sonuç, ana denklemleri gerçek asimetrik matrisler olarak ifade etmeme izin veriyor. Zamandan bağımsız durumda, ana denklem bu matrisin katlanarak çözülür. Zamana bağlı durumda entegrasyon gerekir. Şu an sadece zaman bağımsızlığıyla ilgileniyorum.
Çeşitli değişmezler seyir üzerine ben çağıran gerektiğini düşünüyorum ( ? Gehrd , ? Orghr , ? Hseqr ...) ondan matrisi atmak kolay olurdu eğer belirsizdir real*8
için complex*16
bu rutinleri karmaşık çift sürümleri ile ve devam edin veya sopa ile real*8
dizilerimin sayısını iki katına çıkarmak ve daha sonra bunlardan karmaşık bir matris yapmak vurmak.
Peki, hangi rutinleri çağırmalıyım (ve hangi sırayla) ve gerçek çift versiyonları mı yoksa karmaşık çift versiyonları mı kullanmalıyım? Aşağıda bunu gerçek çift sürümlerle yapmaya yönelik bir girişim bulunmaktadır. Özdeğerlerini ve özvektörlerini bulmakta sıkışıp kaldım 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