1
我試圖讓LAPACK的ZGEEV例程用於測試問題的工作,並具有一定的困難。我剛開始在FORTRAN編碼一個星期前,所以我認爲這是可能是一些很瑣碎,我很想念。FORTRAN ZGEEV,所有0的特徵值
我對角化相當大的複雜的對稱矩陣。要開始使用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,他們工作正常。任何幫助,將不勝感激!謝謝。
我忘了提,我加載從我已經驗證是工作權的測試文件矩陣。
非常感謝。有效。 – Jeremie187 2012-03-06 06:51:20