以下是使用Fortran编写的求逆矩阵的代码:

program inverse_matrix
    implicit none
    
    integer, parameter :: n = 3
    integer :: i, j, info
    real :: A(n,n), B(n,n)
    
    A = reshape([1, 2, 3, 4, 5, 6, 7, 8, 9], [n,n])
    
    call inverse(A, B, info)
    
    write(*,*) '原矩阵 A:'
    do i = 1, n
        write(*,*) A(i,:)
    end do
    
    if (info /= 0) then
        write(*,*) '无法求逆矩阵'
    else
        write(*,*) '逆矩阵 B:'
        do i = 1, n
            write(*,*) B(i,:)
        end do
    end if
    
contains
    subroutine inverse(A, B, info)
        implicit none
        
        integer, intent(in) :: n
        integer, intent(out) :: info
        real, intent(inout) :: A(n,n), B(n,n)
        integer :: ipiv(n), lwork, lda, ldb, iwork(n), info_lu
        real, allocatable :: work(:)
        
        lda = n
        ldb = n
        lwork = 3 * n
        info = 0
        
        allocate(work(lwork))
        
        call sgetrf(n, n, A, lda, ipiv, info_lu)
        
        if (info_lu /= 0) then
            info = info_lu
        else
            call sgetri(n, A, lda, ipiv, work, lwork, info)
            
            if (info /= 0) then
                info = info + 1000
            else
                B = A
            end if
        end if
        
        deallocate(work)
        
    end subroutine inverse
    
end program inverse_matrix

这段代码使用了LAPACK库中的sgetrfsgetri子程序来进行LU分解和求逆矩阵操作。

Fortran求解3x3矩阵逆矩阵:使用LAPACK库实现

原文地址: https://www.cveoy.top/t/topic/o2bT 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录