Fortran求解3x3矩阵逆矩阵:使用LAPACK库实现
以下是使用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库中的sgetrf和sgetri子程序来进行LU分解和求逆矩阵操作。
原文地址: https://www.cveoy.top/t/topic/o2bT 著作权归作者所有。请勿转载和采集!