线性方程组的高斯列主元素消去解法的fortran源程序
<PRE> PROGRAM MAINimplicit 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(*,*)'输入方程的维数<=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中'
1000FORMAT('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> 支持,<BR>同时谢谢分享,^_^ <P>大虾在来一段<BR></P>
支持
请问有没有矩阵求逆的程序啊?<BR>麻烦发一下!谢谢!<BR><BR><BR>
页:
[1]