📄 qiunihaha.f90
字号:
SUBROUTINE INV(A,N,A1)
implicit none
integer i,j,k,l,n
character(len=20) :: for='(??(1x,f6.3))' !??是未定几倍输出
real*8 b(n,n),is(n),t,d,B1(N,N),T1,D1,A1(N,N),a(n,n),ik(n)
DO I=1,N !定义伴随单位矩阵
DO J=1,N
IF(I==J)THEN
A1(I,J)=1.0
ELSE
A1(I,J)=0.0
END IF
END DO
END DO
write( FOR(2:3), '(I2)' ) N
! WRITE(*,*)"原矩阵为"
do i=1,N
! write( *, FMT=FOR ) A(i,:) !for是格式,是引用for的格式的意思
end do
DO K=1,N
D=0.0
DO I=K,N
IF(ABS(A(I,K)).GT.D)THEN
D=ABS(A(I,K))
IS(K)=I
IK(K)=I
ENDIF
END DO
IF((D+1.0)==1.0)THEN
write(*,*)"d=",d
WRITE(*,'(A,I2,A)')"第",K,"列都为0,不能求逆"
! STOP
ENDIF
DO J=K,N
T=A(K,J)
A(K,J)=A(IS(K),J)
A(IS(K),J)=T
T1=A1(K,J)
A1(K,J)=A1(IS(K),J)
A1(IS(K),J)=T1
END DO
! write(*,*)"变换成:"
! do i=1,N
! write( *, FMT=FOR ) A(i,:) !for是格式,是引用for的格式的意思
! end do
DO I=1,N
IF (I.NE.K) THEN
D1=A(I,K)/A(K,K)
DO J=1,N
A(I,J)=A(I,J)-A(K,J)*D1
A1(I,J)=A1(I,J)-A1(K,J)*D1
ENDDO
ENDIF
END DO
ENDDO
DO K=1,N
DO J=1,N
A1(K,J)=A1(K,J)/A(K,K)
END DO
A(K,K)=A(K,K)/A(K,K)
END DO
! DO J=K,N
! T1=A1(K,J)
! A1(K,J)=A1(IS(K),J)
! A1(IS(K),J)=T1
! END DO
write( FOR(2:3), '(I2)' ) N
! write(*,*)"求逆后矩阵"
do i=1,N
! write( *, FMT=FOR ) A1(i,:) !for是格式,是引用for的格式的意思
end do
! write(*,*)"伴随矩阵"
do i=1,N
! write( *, FMT=FOR ) A(i,:) !for是格式,是引用for的格式的意思
end do
RETURN
END
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -