FORTRAN95 矩阵乘积与逆矩阵计算示例
以下是使用 FORTRAN95 编写的矩阵乘积和逆矩阵的示例代码:
program matrix_operations
implicit none
integer, parameter :: N = 3 ! 矩阵大小
real :: A(N, N), B(N, N), C(N, N), D(N, N)
integer :: i, j, k
! 填充矩阵A和B
do i = 1, N
do j = 1, N
A(i, j) = i + j
B(i, j) = i - j
end do
end do
! 计算矩阵乘积C = A * B
do i = 1, N
do j = 1, N
C(i, j) = 0.0
do k = 1, N
C(i, j) = C(i, j) + A(i, k) * B(k, j)
end do
end do
end do
! 打印矩阵乘积C
print *, '矩阵乘积C ='
do i = 1, N
write(*, '(3F6.2)') (C(i, j), j = 1, N)
end do
! 计算逆矩阵D = inv(A)
call matrix_inverse(A, D)
! 打印逆矩阵D
print *, '逆矩阵D ='
do i = 1, N
write(*, '(3F6.2)') (D(i, j), j = 1, N)
end do
contains
subroutine matrix_inverse(A, D)
real, intent(in) :: A(N, N)
real, intent(out) :: D(N, N)
integer :: ipiv(N), info
! 复制A到D,以防止A的内容被修改
D = A
! 调用 LAPACK 子程序计算逆矩阵
call sgetrf(N, N, D, N, ipiv, info)
call sgetri(N, D, N, ipiv, work, lwork, info)
if (info /= 0) then
print *, '无法计算逆矩阵'
end if
end subroutine matrix_inverse
end program matrix_operations
请注意,该示例代码使用了 LAPACK 库中的 sgetrf 和 sgetri 子程序来计算逆矩阵。你需要确保已正确链接 LAPACK 库。此外,还需要在代码中定义适当的 LAPACK 库函数声明,包括 sgetrf 和 sgetri。
原文地址: https://www.cveoy.top/t/topic/o1U8 著作权归作者所有。请勿转载和采集!