声振论坛

 找回密码
 我要加入

QQ登录

只需一步,快速开始

查看: 3760|回复: 0

[Fortran] 线性方程组的高斯列主元素消去解法的fortran源程序

[复制链接]
发表于 2005-11-18 08:34 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?我要加入

x
<PRE>        PROGRAM MAIN
        implicit none
        DOUBLE PRECISION P(50,50),Q(50)
        INTEGER W,NMAX,II,JJ
        CHARACTER*12 NAMEI,NAMEO
        PARAMETER(NMAX=50)
* NMAX:本程序定义的最大维数
*    W:计算方程的维数
*  P,Q:方程的系数矩阵与右端矩阵
*
        WRITE(*,*)'----高斯列主元素消去法解线形方程组----'
        WRITE(*,*)'输入方程的维数&lt;=50:'
        READ(*,*) W
        WRITE(*,*)'输入存放增广矩阵的文件名:'
        READ(*,*) NAMEI
        OPEN(6,FILE=NAMEI)
        NAMEO='Result.txt'
        DO II=1,W
        READ(6,*) (P(II,JJ),JJ=1,W),Q(II)
        END DO
        CLOSE(6)

        CALL GAUSS(P,W,Q,NMAX)
* 显示并存储结果,解为Q(I)
        OPEN(8,FILE=NAMEO)       
        WRITE(*,*)'------------------'
        DO II=1,W
        WRITE(*,1000) II,Q(II)
        WRITE(8,1000) II,Q(II)
        END DO
        CLOSE(8)
        WRITE(*,*)'------------------'
        WRITE(*,*)'以上结果保存在Result.txt中'
1000  FORMAT('X',I2,'=',F15.5)

        END

* ------------以下为线性方程组的高斯消去解法-------------
        SUBROUTINE GAUSS(A,N,B,NUM)
        DOUBLE PRECISION A(NUM,N),B(NUM),M(N,NUM),MAX,TEMP
        INTEGER I,J,N,IMAX,K
* 选列主元,即列中绝对值最大者
        DO 99 K=1,N-1
        MAX=ABS(A(K,K))
        IMAX=K
        DO I=K+1,N
        IF(ABS(A(I,K)).GT.MAX) THEN
        IMAX=I
        MAX=ABS(A(I,K))
        ENDIF
        END DO
* 交换行元素,M(N,N)为临时变量
        DO J=1,N
        M(K,J)=A(K,J)
        A(K,J)=A(IMAX,J)
        A(IMAX,J)=M(K,J)
        TEMP=B(K)
        B(K)=B(IMAX)
        B(IMAX)=TEMP
        ENDDO
       
* 消去,M(N,N)存放消去时所用的因子       
        DO I=K+1,N
        M(I,K)=A(I,K)/A(K,K)
        DO J=K+1,N
        A(I,J)=A(I,J)-M(I,K)*A(K,J)
        END DO
        B(I)=B(I)-M(I,K)*B(K)
        END DO
* 回代,利用B(N)存放解
99        CONTINUE
        B(N)=B(N)/A(N,N)
        DO K=N-1,1,-1
        TEMP=0.0
        DO J=K+1,N
        TEMP=TEMP+A(K,J)*B(J)
        END DO
        B(K)=(B(K)-TEMP)/A(K,K)
        END DO
        END SUBROUTINE</PRE>
回复
分享到:

使用道具 举报

您需要登录后才可以回帖 登录 | 我要加入

本版积分规则

QQ|小黑屋|Archiver|手机版|联系我们|声振论坛

GMT+8, 2024-5-1 04:03 , Processed in 0.051857 second(s), 17 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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