Gần đây tôi đã hỏi một câu hỏi dọc theo các dòng tương tự cho ma trận xiên-Hermiti. Lấy cảm hứng từ sự thành công của câu hỏi đó và sau khi đập đầu vào tường trong vài giờ, tôi đang nhìn vào ma trận theo cấp số nhân của ma trận bất đối xứng thực sự. Con đường tìm kiếm giá trị bản địa và người bản địa dường như khá phức tạp và tôi sợ rằng mình đã bị lạc.
Bối cảnh: Cách đây một thời gian tôi đã hỏi câu hỏi này về vật lý lý thuyết SE. Kết quả cho phép tôi diễn đạt các phương trình tổng thể dưới dạng ma trận bất đối xứng thực. Trong trường hợp độc lập với thời gian, phương trình chính được giải bằng cách lũy thừa ma trận này. Trong trường hợp phụ thuộc vào thời gian, nó sẽ yêu cầu tích hợp. Hiện tại tôi chỉ quan tâm đến sự độc lập về thời gian.
Khi nhìn vào chương trình con khác nhau tôi nghĩ rằng tôi nên gọi ( ? Gehrd , ? Orghr , ? Hseqr ...) không rõ nếu nó sẽ đơn giản hơn để cast ma trận từ real*8
đến complex*16
và điền đầy đủ các phiên bản đôi phức tạp của những thói quen, hoặc gắn bó real*8
và thực hiện việc nhân đôi số lượng mảng của tôi và tạo ra một ma trận phức tạp của chúng sau này.
Vì vậy, những thói quen nào tôi nên gọi (và theo thứ tự nào), và tôi nên sử dụng phiên bản đôi thực hay phiên bản đôi phức tạp? Dưới đây là một nỗ lực để làm điều này với các phiên bản kép thực sự. Tôi đã bị mắc kẹt trong việc tìm kiếm giá trị bản địa và người bản địa của 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