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

要求:1,方程组的系数矩阵和右端项存在数据文件中,程序能从数据文件读入数据并把计算结果写入该数据文件。2,使用子程序进行模块化编程。... 要求:1,方程组的系数矩阵和右端项存在数据文件中,程序能从数据文件读入数据并把计算结果写入该数据文件。2,使用子程序进行模块化编程。 展开
 我来答
Rupture7
2015-01-22 · 超过13用户采纳过TA的回答
知道答主
回答量:57
采纳率:100%
帮助的人:31.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
gcbjoy
推荐于2018-03-14 · TA获得超过1.1万个赞
知道大有可为答主
回答量:1.1万
采纳率:92%
帮助的人:2047万
展开全部
以下是约当消去法解方程组,供参考。


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
本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
酒神90
2013-12-29
知道答主
回答量:54
采纳率:0%
帮助的人:11.7万
展开全部
DAETRFYERYERQYRYERYERYEQRYEQQYERYEYREYREEGBFHSDFA
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式