LAPACK - DGETRF 失败(反转矩阵)

LAPACK - DGETRF fails (inverting matrices)

我正在尝试计算矩阵的逆,但 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 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 (http://www.netlib.org/lapack/explore-html/dd/d9a/group__double_g_ecomputational_ga0019443faea08275ca60a734d0593e60.html) 的文档说:

subroutine dgetrf   (   integer     M,
        integer     N,
        double precision, dimension( lda, * )   A,
        integer     LDA,
        integer, dimension( * )     IPIV,
        integer     INFO 
    )   

所以一个 double precision 变量 A 但是你用 real 变量调用例程 testM.

DGETRI.

可能会出现类似的问题