我正在尝试使用ZHEEVD对Hermitian矩阵进行对角化。 这是我用来对角化的子程序 -
SUBROUTINE NAGdiagocc(nsit)
use NAGmodule
complex*8, allocatable :: WORK(:)
integer, allocatable :: IWORK(:)
real*8, allocatable :: RWORK(:)
CHARACTER JOB, UPLO
EXTERNAL zheevd
NMAX=nsit
LDA = NMAX
LIWORK = 5*NMAX + 3
LRWORK = 2*NMAX*NMAX + 5*NMAX+10
LWORK = NMAX*(NMAX+2)+100
ALLOCATE(WORK(LWORK),IWORK(LIWORK),RWORK(LRWORK))
JOB='V'
UPLO='U'
CALL ZHEEVD(JOB,UPLO,nsit,gammamat,LDA,evalocc, WORK, LWORK, RWORK, LRWORK, IWORK, LIWORK, INFO )
IF (INFO.GT.0) THEN
WRITE (*,*) 'Failure to converge.'
stop
endif
deALLOCATE(WORK,IWORK,RWORK)
return
end
我尝试对齐一个简单的矩阵,但我得到的特征值是完全错误的。 并且在主程序中使用do循环重复对角化不同的时间我每次获得稍微不同的结果。 可能是什么问题?