我需要對一個2x2厄密矩陣進行對角化,該矩陣取決於連續變化的參數x。爲了對角化我使用EISPACK。當我繪製特徵向量的實部和虛部作爲x的函數時,我注意到它們具有不連續性。特徵值計算是可以的。當我繪製Maxima中的特徵向量時,解決方案看起來是連續的。我需要連續的特徵向量,因爲在下一步我需要計算它們的導數。厄密矩陣對角化中的特徵向量不連續性
在f77代碼下面,我用作測試(在gingw上編譯gfortran)。
program Eigenvalue
implicit none
integer n, m
parameter (n=2)
integer ierr, matz, i, j
double precision x, dx, xf, amp, xin
double precision w(n)
double precision Ar(n,n), Ai(n,n)
double precision xr(n,n), xi(n,n)
double precision fm1(2,n) ! f77
double precision fv1(n) ! f77
double precision fv2(n) ! f77
double complex psi1a, psi1b, psi2a, psi2b
m = 51
xf = 10.d0
xin = 0.0d0
amp = 2.d0
dx = (xf - xin)/(m-1)
do i = 1, m
x = dx*(i-m) + xf
Ar(1,1) = dsin(x)**2
Ar(1,2) = amp*dcos(x)
Ar(2,1) = amp*dcos(x)
Ar(2,2) = dcos(x)**2
Ai(1,1) = 0.0d0
Ai(1,2) = amp*dsin(x)
Ai(2,1) = -amp*dsin(x)
Ai(2,2) = 0.0d0
matz = 1
call ch (n, n, ar, ai, w, matz, xr, xi, fv1, fv2, fm1, ierr) !f77
write(20,*) x, w(1), w(2)
write(21,*) x, xr(1,1), xi(1,1)
write(22,*) x, xr(2,1), xi(2,1)
write(23,*) x, xr(1,2), xi(1,2)
write(24,*) x, xr(2,2), xi(2,2)
! autovetor 1
psi1a = cmplx(xr(1,1),xi(1,1))
psi1b = cmplx(xr(1,2),xi(1,2))
! autovetor 2
psi2a = cmplx(xr(2,1),xi(2,1))
psi2b = cmplx(xr(2,2),xi(2,2))
end do
end
那麼,結果是怎樣的呢?不連續性是怎樣的?單元20,21,22,23和24在你的程序中的目的是什麼? (你不會在任何地方打開它們) –
爲什麼你有[tag:intel-fortran]標籤?你使用它了嗎? –
我使用EISPACK檢查了您的代碼,並獲得了明智的結果。 我已經使用LAPACK針對您的代碼的更現代版本檢查了這些結果。 我唯一發現任何暗示不連續性的事情是當我偶然混合單精度和雙精度數字時。 – muddle