! 求逆矩阵
subroutine inverse(A,IA)
implicit none
real :: A(:,:), IA(:,:)
real, allocatable :: B(:,:)
integer :: i,j,N
N = size(A,1)
allocate(B(N,N))
! 先把 IA 设定成单位矩阵
forall(i=1:N,j=1:N,i==j) IA(i,j)=1.0
forall(i=1:N,j=1:N,i/=j) IA(i,j)=0.0
! 保存原先的矩阵 A, 使用 B 来计算
B=A
! 把 B 化成对角线矩阵 (除了对角线外 ,都为 0)
call Upper(B,IA,N) ! 先把 B 化成上三角矩阵
call Lower(B,IA,N) ! 再把 B 化成下三角矩阵
! 求解
forall(i=1:N) IA(i,:)=IA(i,:)/B(i,i)
return
end subroutine
! 求上三角矩阵的子程序
subroutine Upper(M,S,N)
implicit none
integer :: N
评论5
最新资源