我很难理解用于查找特征值的LAPACK zgeev例程是如何工作的。我已经阅读了here
中的文档和MKL示例我想用fortran90风格做我自己的例子。这是我的代码:
program test_zgeev
implicit none
integer, parameter :: n = 2, lwmax = 1000
integer :: lwork, info, i
real(8) :: rwork(n*2)
complex(16) :: w(n), work(lwmax), vl(n), vr(n), a(n, n)
integer :: lda, ldvl, ldvr
lda = n; ldvl = n; ldvr = n
a(1, 1) = 1.0d0; a(1, 2) = -1.0d0
a(2, 1) = 5.0d0; a(2, 2) = -1.0d0
lwork = lwmax
CALL ZGEEV( 'Vectors', 'Vectors', N, A, LDA, W, VL, LDVL, &
VR, LDVR, WORK, LWORK, RWORK, INFO )
do i = 1, n
write(*, *) w(i)
enddo
end program
它编译并正式运行但是特征值是错误的,我得到(1,0)(0,0)而不是正确的(0,2)(0,-2)。当我尝试在MKL示例(fortran 77)中直接使用相同的矩阵时,它可以正常工作。因此,由于我对f77和f90之间的差异的误解,在某处出现了错误。你能帮我找一下吗?