以下是使用 Fortran 编写的求一个 3×3 阶矩阵的逆矩阵的示例代码:

program matrix_inverse
  implicit none
  
  integer, parameter :: n = 3 ! 矩阵的阶数
  real :: a(n, n) ! 输入矩阵
  real :: b(n, n) ! 逆矩阵
  real :: det ! 矩阵的行列式值
  integer :: i, j, info
  
  ! 输入矩阵
  write(*,*) '请输入一个 3×3 阶矩阵:'
  do i = 1, n
    do j = 1, n
      write(*,*) 'a(', i, ',', j, ') = '
      read(*,*) a(i, j)
    end do
  end do
  
  ! 求逆矩阵
  call invert_matrix(a, b, det, info)
  
  ! 输出逆矩阵
  write(*,*) '逆矩阵为:'
  do i = 1, n
    do j = 1, n
      write(*,*) 'b(', i, ',', j, ') = ', b(i, j)
    end do
  end do
  
contains
  
  subroutine invert_matrix(a, b, det, info)
    implicit none
    real, intent(in) :: a(n, n) ! 输入矩阵
    real, intent(out) :: b(n, n) ! 逆矩阵
    real, intent(out) :: det ! 矩阵的行列式值
    integer, intent(out) :: info ! 返回值,表示计算是否成功
    
    real :: work(3*n) ! 临时工作数组
    integer :: ipiv(n) ! 存储主元的行交换信息
    integer :: i, j
    
    ! 求矩阵的逆矩阵和行列式值
    call sgetrf(n, n, a, n, ipiv, info) ! LU分解
    if (info /= 0) then
      write(*,*) '计算失败:LU分解出错'
      return
    end if
    
    det = 1.0
    do i = 1, n
      det = det * a(i, i)
    end do
    
    call sgetri(n, a, n, ipiv, work, 3*n, info) ! 求逆矩阵
    if (info /= 0) then
      write(*,*) '计算失败:求逆矩阵出错'
      return
    end if
    
    ! 将结果复制到输出矩阵
    do i = 1, n
      do j = 1, n
        b(i, j) = a(i, j)
      end do
    end do
    
    return
  end subroutine invert_matrix
  
end program matrix_inverse

该代码使用了 Fortran 的内置线性代数库中的 sgetrfsgetri 子例程来求解矩阵的 LU 分解和逆矩阵。输入矩阵由用户在控制台上输入,然后计算逆矩阵并输出。

Fortran 3x3 矩阵求逆:代码示例和解释

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

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