Matrix LAPACK-DGETRF失败(矩阵反转)
我试图计算矩阵的逆矩阵,但DGETRF一直说,即使矩阵不是奇异的,矩阵在数值上也是奇异的Matrix LAPACK-DGETRF失败(矩阵反转),matrix,fortran,fortran90,Matrix,Fortran,Fortran90,我试图计算矩阵的逆矩阵,但DGETRF一直说,即使矩阵不是奇异的,矩阵在数值上也是奇异的 real :: testM(1:2, 1:2), workT(2) integer :: ipivT(2), info testM = reshape((/4,2,7,6/), shape(testM)) WRITE(*,*) "started matrix inversion" ! DGETRF computes an LU factorization of a general M-by-N matr
real :: testM(1:2, 1:2), workT(2)
integer :: ipivT(2), info
testM = reshape((/4,2,7,6/), shape(testM))
WRITE(*,*) "started matrix inversion"
! DGETRF computes an LU factorization of a general M-by-N matrix A
! using partial pivoting with row interchanges.
call DGETRF(2, 2, testM, 2, ipivT, info)
WRITE(*,*) "info = ", info
if (info /= 0) then
stop 'Matrix is numerically singular!'
end if
! DGETRI computes the inverse of a matrix using the LU factorization
! computed by DGETRF.
call DGETRI(2, testM, 2, ipivT, workT, 2, info)
if (info /= 0) then
stop 'Matrix inversion failed!'
end if
WRITE(*,*) testM
WRITE(*,*) "Matrix success"
我得到的错误是,矩阵在数值上是奇异的(info=2)。
然而,矩阵在数值上不是奇异的,我不知道为什么会给出误差
最后,我想将代码缩放为(33,33)矩阵。但我首先尝试让它在这个(2,2)矩阵中工作。dgetrf()的文档说明: 因此,一个
双精度
变量a
,但是您用一个real
变量testM
调用例程
类似的问题可能会出现在
DGETRI
中,dgetrf()的文档说明:
因此,一个双精度
变量a
,但是您用一个real
变量testM
调用例程
类似的问题可能会发生在
DGETRI
从一个小问题开始的好选择。从一个小问题开始的好选择。如果您打算让编译器自动检查和匹配数据类型,lapack95已经有一段时间了。如果您打算让编译器自动检查和匹配数据类型,lapack95已经有相当一段时间了。
subroutine dgetrf ( integer M,
integer N,
double precision, dimension( lda, * ) A,
integer LDA,
integer, dimension( * ) IPIV,
integer INFO
)