试用高斯消元法编制Fortran程序计算n元一次方程组的解,并用一个三元一次方程组检验程序?

要求:1,方程组的系数矩阵和右端项存在数据文件中,程序能从数据文件读入数据并把计算结果写入该数据文件。2,使用子程序进行模块化编程。

program gauss
implicit real(kind=8)(a-z)
integer,parameter:: N=3
integer::i,j
real(kind=8) ::A(N,N),b(N),x(N)
open(unit=11,file='fin.txt')
open(unit=12,file='fout.txt')
read(11,*)
!读入A矩阵
read(11,*)((A(i,j),j=1,N),i=1,n)
!读入B向量
read(11,*) (b(j),j=1,n)
call solve(A,b,x,N)
write(12,999)x
999 format(T5,'高斯消去法计算结果',/,T4,'x=',4(/F12.8))
end program gauss
!子程序---------------
subroutine solve(A,b,x,N)
implicit real*8(a-z)
integer::i,k,N
real(kind=8) ::A(N,N),b(N),x(N)
real(kind=8) ::Aup(N,N),bup(N)
!Ab为增广矩阵 [Ab]
real(kind=8) ::Ab(N,N+1)
Ab(1:N,1:N)=A
Ab(:,N+1)=b
! 这段是 高斯消去法的核心部分
do k=1,N-1
do i=k+1,N
temp=Ab(i,k)/Ab(k,k)
Ab(i,:)=Ab(i,:)-temp*Ab(k,:)
end do
end do
Aup(:,:)=Ab(1:N,1:N)
bup(:)=Ab(:,N+1)
!调用用上三角方程组的回带方法
call uptri(Aup,bup,x,n)
end subroutine solve
subroutine uptri(A,b,x,N)
implicit real*8(a-z)
integer::i,j,N
real(kind=8) ::A(N,N),b(N),x(N)
x(N)=b(N)/A(N,N)
!回带部分
do i=n-1,1,-1
x(i)=b(i)
do j=i+1,N
x(i)=x(i)-a(i,j)*x(j)
end do
x(i)=x(i)/A(i,i)
end do
end subroutine uptri

输入数据放在fin.txt 记得开头加!A.B

输出数据自动存放在fout.txt
温馨提示:内容为网友见解,仅供参考
第1个回答  推荐于2018-03-14
以下是约当消去法解方程组,供参考。


c 约当削去法解线性方程
c program jordan 
real a(5,6)
data a/1,0,6,0,0,
     1 0,1,0,0,0,
     1 0,0,1,0,0,
     1 0,0,0,1,0,
     1 0,0,0,0,1,
     1 1,1,7,1,1/
write(*,100)((a(i,j),j=1,6),i=1,5)
write(*,*)
call jordan(a,5,6)
write(*,100)(a(i,6),i=1,5)
100 format(1x,6f10.4)
c  READ(*,*)
end

c**********************************************************
C选列主元的约当削去法子程序
subroutine jordan(A,N,M)
real A(N,M)
do 10 K=1,N
big=abs(A(K,K))
L=K
do 5 J=K+1,N
if (abs(A(J,K)).GT.big) L=J
5 CONTINUE
IF (L.NE.K) THEN
DO 15 J=K,N+1
R=A(K,J)
A(K,J)=A(L,J)
A(L,J)=R
15 CONTINUE
ENDIF
DO 20 J=N+1,K,-1
20 A(K,J)=A(K,J)/A(K,K)
DO 40 I=1,N
IF (I.NE.K) THEN
DO 30 J=N+1,K,-1
30 A(I,J)=A(I,J)-A(I,K)*A(K,J)
ENDIF
40 CONTINUE
write(*,100)((a(iI,jJ),jJ=1,6),iI=1,5)
WRITE(*,*)
10 CONTINUE
100 format(1x,6f10.4)
return 
END

c*********************************************************
c不选主元的约当削去法子程序
subroutine jor10(a,n,m)
dimension a(n,m)
do 10 k=1,n
do 20 j=n+1,k,-1
20 a(k,j)=a(k,j)/a(k,k)
do 40 i=1,n
if (i.ne.k) then
do 30 j=n+1,k,-1
30 a(i,j)=a(i,j)-a(i,k)*a(k,j)
endif
40 continue
10 continue
return
end

本回答被网友采纳
第2个回答  2013-12-29
DAETRFYERYERQYRYERYERYEQRYEQQYERYEYREYREEGBFHSDFA

试用高斯消元法编制Fortran程序计算n元一次方程组的解,并用一个三元...
999 format(T5,'高斯消去法计算结果',\/,T4,'x=',4(\/F12.8))end program gauss !子程序--- subroutine solve(A,b,x,N)implicit real*8(a-z)integer::i,k,N real(kind=8) ::A(N,N),b(N),x(N)real(kind=8) ::Aup(N,N),bup(N)!Ab为增广矩阵 [Ab]real(kind=8) ...

三元一次方程组解法
5.使用回带法求解未知数的值,具体方法如下:- 将最后一行的未知数$x_3$的系数和常数相除,得到$x_3$的值;- 使用$x_3$的值回代到倒数第二行方程中,求解$x_2$的值;- 同样,使用$x_2$的值回代到第一行方程中,求解$x_1$的值。经过这些步骤,就可以求得三元一次方程组的解。需要...

三元一次方程式最快解法
最快的解法是使用高斯-约旦消元算法高斯-约旦消元算法是一种高效的消元方法,它可以将增广矩阵化为阶梯矩阵,然后进行回代求解与其他线性方程组的求解方法相比,高斯-约旦消元算法具有效率高的优点,可以更快地求解三元一次方程组此外,在实际应用中,我们也可以通过使用矩阵的逆矩阵来求解方程组,但是相...

一个三元一次方程组的几种解法
一个三元一次方程组可以使用高斯消元法、克莱姆法则和矩阵法求解。解释对于三元一次方程组,这些方法都可以被用来求解变量的值。其中,高斯消元法是通过对方程组进行消元和回带来求解变量的值;克莱姆法则是通过求行列式的值来得到变量的值;矩阵法是将方程组转化为矩阵形式,然后通过求逆矩阵来求解变量...

三元一次方程组有哪些解题技巧?
三元一次方程组的解题技巧有很多,以下是一些常用的方法:1.代入消元法:从方程中选一个系数比拟简单的方程,将这个方程中的未知数用另一个未知数的代数式来表示,如用x表示y,可写成y=ax+b;将y=ax+b代入另一个方程,消去y,得到一个关于x的一元一次方程;解这个一元一次方程,求出x的值;把...

解三元一次方程组过程?
a+b+c=3 --- ① 16a-4b+c=-12---② 9a+3b+c=-15 ---③ 解:②-①,得 3a- b=-3 b=3a+3 ---④ ③-①,得 8a+2b=-18 ---⑤ ④代入⑤ a=-12\/7 代入④ b=-15\/7 a、b代入① c=48\/7 所以 a=-12\/7 b=-15\/7 c=48\/7 ...

用高斯消元法解三元一次方程组,C语言
\/\/线性方程组列主元高斯消元法 \/\/n 方程元数;pCoef 系数,必须以行主序方式存放的二维数组;\/\/pOut 长度为 n 的一维数组(调用者负责维护),用于输出数据 \/\/返回值:0 成功,-1 无解,1 申请内存失败, 2 不定解。int GaussJordanElimination(int n, const double *pCoef, double *pOut){ ...

三元一次方程公式
三元一次方程是指含有三个未知数(通常用x、y、z表示)的一次方程。一般形式可以写作:ax + by + cz = d。其中,a、b、c和d分别为已知系数或常数。要求解这样的方程,可以使用线性代数的方法,如高斯消元法或矩阵运算。下面简单介绍其中一种方法:高斯消元法。1、将方程改写为增广矩阵形式:[a ...

用matlab求解三元一次方程组,要求不用自带命令slove,完全按照C语言的方 ...
用高斯消元法喽,或者更简单 1. 首先将 该方程组变成 AX=b 的形式,用 X = A-1*b即可 [2,3, 4; 5,6,7; 9,8,1]*[x1; x2; x3] = [1;2;3];2. 直接用 [x1; x2; x3 ] = [2,3, 4; 5,6,7; 9,8,1]^(-1)*[1;2;3]...

解三元一次方程的技巧
解三元一次方程的技巧主要有以下几点:1. 消元法:将方程中的某个未知数消去,得到一个二元一次方程,然后再用二元一次方程的解法求解。这种方法适用于方程中某个未知数的系数较小或较大的情况。2. 代入法:将方程中的某个未知数用其他未知数表示,然后代入方程中,得到一个二元一次方程,再用二元...

相似回答