交换器,
我遇到了一个令人费解的问题。为了解决复杂的特征值问题,我使用了 LAPACK 库函数 ZHEEV。为了测试实现,我使用了一个实对称矩阵:
应该具有特征值:2x0、2x4 使用 ZHEEV 我得到了 2x -2 和 2x 2。另一方面,修改实现以使用 DSYEV 会给出正确的结果。
我在这里遗漏了一些非常微不足道的东西,但我不明白它是什么。
这是子程序:
subroutine solvearray(m)
complex(16), dimension(:,:),allocatable :: dm
complex(16), dimension(:), allocatable :: freq, work
complex(16) :: One
doubleprecision, dimension(:),allocatable :: w, rwork
integer,dimension(:,:),allocatable, intent(inout) :: m
integer :: n, k, h, l, info
One = cmplx(1.0,0.0,kind=SELECTED_REAL_KIND(15,300))
write(*,'(A)',advance='no') 'order of matrix = '
read(*,*) n
l = 2*n - 1
allocate(work(2*l), rwork(3*n-2), w(n))
w = 0.0
work = 0.0 *One
rwork = 0.0
info = 0
allocate(dm(1:n,1:n))
dm(1:n,1:n) = m(1:n,1:n)*One
write(*,*) 'Setup for lapack workspace has been completed.'
call ZHEEV('V','U', n, dm, n, w, work, 2*l, rwork, info)
write(*,*) 'This is the eigenvector matrix:'
do k=1,n
write(*,'(255F8.4)') dm(k,1:n)
end do
write(*,*) 'These are the eigenvalues :'
write(*,'(255F8.4)') w
deallocate(m)
deallocate(W,Work,rwork)
end subroutine