PROGRAM Generalizedeigenvalue
use lapack95
IMPLICIT NONE
INTEGER,PARAMETER::N=3!矩阵维数
INTEGER,PARAMETER::LDA=N
INTEGER,PARAMETER::LDB=N
INTEGER,PARAMETER::LDVL=N
INTEGER,PARAMETER::LDVR=N
INTEGER,PARAMETER::LWORK=8*n+16
INTEGER::INFO,J
REAL*8::A(LDA,N),B(LDA,N)!系数矩阵
REAL*8::ALPHAR(N),ALPHAI(N),BETA(N)!特征值和对应的广义特征向量
REAL*8::VL(LDVL,N),VR(LDVR,N)!左右特征向量
REAL*8::WORK(LWORK,LWORK)
!初始化系数矩阵
A=RESHAPE((/1.D0,2.D0,3.D0,4.D0,5.D0,6.D0,7.D0,8.D0,9.D0/),SHAPE(A))
B=RESHAPE((/2.D0,2.D0,2.D0,2.D0,2.D0,2.D0,2.D0,2.D0,2.D0/),SHAPE(B))
A = transpose(A)
B = transpose(B)
!调用DGGEV函数
CALL DGGEV('N','V',N,A,LDA,B,LDB,ALPHAR,ALPHAI, BETA, VL, LDVL, VR, LDVR, WORK, LWORK, INFO)
!输出结果
IF(INFO==0.d0)then
WRITE(*,*)'广义特征值问题的解:'
DO J=1,N
IF(ALPHAI(J)==0.D0)THEN
WRITE(*,'(2(A,1X),F8.4)')'特征值',J,':',ALPHAR(J)
ELSE
WRITE(*,'(4(A,1X),2(F8.4,1X))')'特征值',J,':',ALPHAR(J),'+',ALPHAI(J),'i'
END IF
WRITE(*,*) '左特征向量:'
WRITE(*,'(A)') ' '
WRITE(*,'(3(F8.4,1X))') VL(:,J)
WRITE(*,*) '右特征向量:'
WRITE(*,'(A)') ' '
WRITE(*,'(3(F8.4,1X))') VR(:,J)
END DO
ELSE
WRITE(*,*)'求解广义特征值问题时出错,错误代码为',INFO
END IF
END PROGRAM GeneralizedEigenvalue
微信截图_20240801163459.png (123.52 KB, 下载次数: 22)
微信截图_20240801164104.png (127.37 KB, 下载次数: 31)
IF(INFO==0.d0)then
WRITE(*,*)'广义特征值问题的解:'
DO J=1,N
IF(ALPHAI(J)==0.D0)THEN
WRITE(*,'("特征值",1X,g0,":",F8.4)') J , ALPHAR(J)
ELSE
WRITE(*,'("特征值",1X,g0,":",F8.4,"+",f8.4,"i",1X)') J , ALPHAR(J) , ALPHAI(J)
END IF
WRITE(*,*) '左特征向量:'
WRITE(*,'(A)') ' '
WRITE(*,'(*(es13.6,1X))') VL(:,J)
WRITE(*,*) '右特征向量:'
WRITE(*,'(A)') ' '
WRITE(*,'(*(es13.6,1X))') VR(:,J)
END DO
ELSE
广义特征值问题的解:
特征值 1: -1.2247
左特征向量:
-9.255963E+61 -9.255963E+61 -9.255963E+61
右特征向量:
-5.780346E-16 -1.000000E+00 1.000000E+00
特征值 2: 4.2426
左特征向量:
-9.255963E+61 -9.255963E+61 -9.255963E+61
右特征向量:
-1.022124E-15 -1.000000E+00 1.000000E+00
特征值 3: -0.0000
左特征向量:
-9.255963E+61 -9.255963E+61 -9.255963E+61
右特征向量:
5.000000E-01 -1.000000E+00 5.000000E-01
请按任意键继续. . .
fcode 发表于 2024-8-1 18:15
应该是你的 MKL 安装或配置的问题。在我电脑上能够顺利通过 MKL 计算,但后面的输出部分出了错。
[mw_shl_ ...
huhelong 发表于 2024-8-1 20:29
谢谢您的指导,我按照您的建议修改后确实解决了之前的问题,现在是运行后提示LWORK参数输入不对,能看看 ...
欢迎光临 Fortran Coder (http://bbs.fcode.cn/) | Powered by Discuz! X3.2 |