FORTRAN ZGEEV,所有特征值均为0

FORTRAN ZGEEV,所有特征值均为0,fortran,Fortran,我正试图让拉帕克的ZGEEV例程解决一个测试问题,但遇到了一些困难。我一周前才开始用FORTRAN编写代码,所以我认为我可能遗漏了一些非常琐碎的东西 我必须对角化相当大的复杂对称矩阵。首先,我使用Matlab创建了一个200乘200的矩阵,我已经验证了它是可对角化的。当我运行代码时,它不会显示任何错误,并且INFO=0,表示成功。然而,所有的特征值都是(0,0),我知道这是错误的 附件是我的密码 PROGRAM speed_zgeev IMPLICIT NONE INTEGER(8)

我正试图让拉帕克的ZGEEV例程解决一个测试问题,但遇到了一些困难。我一周前才开始用FORTRAN编写代码,所以我认为我可能遗漏了一些非常琐碎的东西

我必须对角化相当大的复杂对称矩阵。首先,我使用Matlab创建了一个200乘200的矩阵,我已经验证了它是可对角化的。当我运行代码时,它不会显示任何错误,并且INFO=0,表示成功。然而,所有的特征值都是(0,0),我知道这是错误的

附件是我的密码

PROGRAM speed_zgeev
  IMPLICIT NONE
  INTEGER(8)  :: N
  COMPLEX*16, DIMENSION(:,:), ALLOCATABLE :: MAT
  INTEGER(8) :: INFO, I, J
  COMPLEX*16, DIMENSION(:), ALLOCATABLE :: RWORK
  COMPLEX*16, DIMENSION(:), ALLOCATABLE :: D
  COMPLEX*16, DIMENSION(1,1) :: VR, VL
  INTEGER(8) :: LWORK = -1
  COMPLEX*16, DIMENSION(:), ALLOCATABLE :: WORK
  DOUBLE PRECISION :: RPART, IPART

  EXTERNAL ZGEEV
  N = 200

  ALLOCATE(D(N))
  ALLOCATE(RWORK(2*N))
  ALLOCATE(WORK(N))
  ALLOCATE(MAT(N,N))

  OPEN(UNIT = 31, FILE = "newmat.txt")
  OPEN(UNIT = 32, FILE = "newmati.txt")
  DO J = 1,N
     DO I = 1,N
    READ(31,*) RPART
    READ(32,*) IPART
    MAT(I,J) = CMPLX(RPART, IPART)
     END DO
  END DO

  CLOSE(31)
  CLOSE(32)

  CALL ZGEEV('N','N', N, MAT, N, D, VL, 1, VR, 1, WORK, LWORK, RWORK, INFO)
  INFO = WORK(1)

  DEALLOCATE(WORK)
  ALLOCATE(WORK(INFO))

  CALL ZGEEV('N','N', N, MAT, N, D, VL, 1, VR, 1, WORK, LWORK, RWORK, INFO)

  IF (INFO .EQ. 0) THEN
     PRINT*, D(1:10)
  ELSE
     PRINT*, INFO
  END IF

  DEALLOCATE(MAT)
  DEALLOCATE(D)
  DEALLOCATE(RWORK)
  DEALLOCATE(WORK)


END PROGRAM speed_zgeev
我在较小的矩阵上尝试了相同的代码,大小为30×30,它们工作得很好。任何帮助都将不胜感激!谢谢

我忘了提到我正在从一个测试文件加载矩阵,我已经验证该文件工作正常。

可能是
LWORK=WORK(1)
而不是
INFO=WORK(1)
?同时更改
分配(工作(信息))