Fortran Coder

查看: 5623|回复: 3
打印 上一主题 下一主题

[线性代数] 求逆矩阵的程序,结果只有最后一行是对的

[复制链接]

2

帖子

0

主题

0

精华

新人

这个人很懒

F 币
21 元
贡献
12 点
楼主
发表于 2017-3-1 10:59:55 | 显示全部楼层
实矩阵求逆的全选主元高斯-约当消去法
[Fortran] 纯文本查看 复制代码
SUBROUTINE BRINV(A,N,L,IS,JS)
        DIMENSION A(N,N),IS(N),JS(N)
        DOUBLE PRECISION A,T,D
        L=1
        DO 100 K=1,N
          D=0.0
          DO 10 I=K,N
          DO 10 J=K,N
            IF (ABS(A(I,J)).GT.D) THEN
              D=ABS(A(I,J))
              IS(K)=I
              JS(K)=J
            END IF
10          CONTINUE
          IF (D+1.0.EQ.1.0) THEN
            L=0
            WRITE(*,20)
            RETURN
          END IF
20          FORMAT(1X,'ERR**NOT INV')
          DO 30 J=1,N
            T=A(K,J)
            A(K,J)=A(IS(K),J)
            A(IS(K),J)=T
30          CONTINUE
          DO 40 I=1,N
            T=A(I,K)
            A(I,K)=A(I,JS(K))
            A(I,JS(K))=T
40          CONTINUE
          A(K,K)=1/A(K,K)
          DO 50 J=1,N
            IF (J.NE.K) THEN
              A(K,J)=A(K,J)*A(K,K)
            END IF
50          CONTINUE
          DO 70 I=1,N
            IF (I.NE.K) THEN
              DO 60 J=1,N
                IF (J.NE.K) THEN
                  A(I,J)=A(I,J)-A(I,K)*A(K,J)
                END IF
60              CONTINUE
            END IF
70          CONTINUE
          DO 80 I=1,N
            IF (I.NE.K) THEN
              A(I,K)=-A(I,K)*A(K,K)
            END IF
80          CONTINUE
100        CONTINUE
        DO 130 K=N,1,-1
          DO 110 J=1,N
            T=A(K,J)
            A(K,J)=A(JS(K),J)
            A(JS(K),J)=T
110          CONTINUE
          DO 120 I=1,N
            T=A(I,K)
            A(I,K)=A(I,IS(K))
            A(I,IS(K))=T
120          CONTINUE
130        CONTINUE
        RETURN
        END

评分

参与人数 1贡献 +3 收起 理由
fcode + 3 赞一个!

查看全部评分

您需要登录后才可以回帖 登录 | 极速注册

本版积分规则

捐赠本站|Archiver|关于我们 About Us|小黑屋|Fcode ( 京ICP备18005632-2号 )

GMT+8, 2024-5-5 16:44

Powered by Tencent X3.4

© 2013-2024 Tencent

快速回复 返回顶部 返回列表