回 帖 发 新 帖 刷新版面

主题:fortran里如何求逆矩阵?

我没有学过什么线性代数,对于如何求逆的算法不太明白,自己写不出来。

如果哪位大虾能贴一个子程序出来,就一个输入的3×3矩阵及一个结果的逆矩阵,我将非常感谢!

或者有哪位告诉一下在哪个函数库里面有调用的也行,我是在LINUX下面编程的。

回复列表 (共11个回复)

沙发

use imsl
real a(3,3),b(3,3)
a=...
b=.i.a

即可

板凳

如上楼,假设b是a的逆矩阵,a矩阵的赋值是你自己的代码,我用a=...表示,你用自己的代码替换即可

3 楼


imsl是Visual Fortran里面用的一个函数库吧?

我是在“LINUX”下面写程序的。

4 楼

没有人求逆了吗?

5 楼

IMSL是个商业的库,有Fortran和C的版本,也有window和linux版本。

商业库是很贵的,呵呵。还是尽量不要用,免得给单位和自己带来麻烦。

清华大学 出的《FORTRAN常用算法程序集》,里面有矩阵求逆

6 楼

呵呵,谁有这书的电子版本?我可不想去买一本。


[quote]IMSL是个商业的库,有Fortran和C的版本,也有window和linux版本。

商业库是很贵的,呵呵。还是尽量不要用,免得给单位和自己带来麻烦。

清华大学 出的《FORTRAN常用算法程序集》,里面有矩阵求逆[/quote]

7 楼

楼上的留个邮箱我发给你

8 楼


      SUBROUTINE gjcp(A,N)
    integer N
    real A(N,N)   !存放矩阵A
      INTEGER IP(N)      !记录主列号
    REAL P          !工作单元,放主元
    INTEGER  I0,R      !工作单元,放主列号
    EPS=0.001

                                  write(*,*)'gjcp  ok0000000'
       DO K=1,N
          P=0
          I0=K
          IP(K)=K
          
          DO I=K,N
             IF(ABS(A(I,K)).GT.ABS(P))THEN
                P=A(I,K)
                I0=I
                IP(K)=I
             ENDIF
          ENDDO
          
          IF(ABS(P).LE.EPS)THEN
             WRITE(*,*)'DET=0'
             stop !后来加的
             GOTO 10
          ENDIF
          
          IF(I0.NE.K)THEN
             DO J=1,N
                S=A(K,J)
                A(K,J)=A(I0,J)
                A(I0,J)=S
             ENDDO
          ENDIF
         
          A(K,K)=1./P
          
          DO I=1,N
             IF(I.NE.K)THEN
                A(I,K)=-A(I,K)*A(K,K)
                DO J=1,N
                   IF(J.NE.K)THEN
                      A(I,J)=A(I,J)+A(I,K)*A(K,J)
                     ENDIF
                ENDDO
             ENDIF
          ENDDO
         
          DO J=1,N
             IF(J.NE.K)THEN
                A(K,J)=A(K,K)*A(K,J)
             ENDIF
          ENDDO
       ENDDO
    write(*,*)'gjcp  ok01'    
       DO K=N-1,1,-1
          R=IP(K)
          IF(R.NE.K)THEN
             DO I=1,N
                S=A(I,R)
                A(I,R)=A(I,K)
                A(I,K)=S
             ENDDO
           ENDIF
        ENDDO
10        write(*,*)'the end'
     END 

9 楼


楼上的求逆算法是针对任意矩阵还是有对特殊矩阵而言的?比如要求是正定矩阵或者对称矩阵之类??

10 楼

验证了,非对称是可以的。呵呵,至于正定的影响,似乎没有查到正定与否对矩阵求逆有影响。
谢谢楼上的楼上的。

我来回复

您尚未登录,请登录后再回复。点此登录或注册