LAPACK-DGETRF失败(求逆矩阵)

时间:2018-07-09 09:43:21

标签: 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 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)矩阵。

1 个答案:

答案 0 :(得分: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可能会发生类似的问题。