Fortran 高斯赛德尔迭代法求解线性方程组
(2016-08-18 21:47:05)
标签:
fortran高斯赛德尔线性方程组 |
分类: Fortran应用 |
module guass_Seidel
contains
subroutine solve(A,b,x,x0,N)
implicit none
integer::N
real::A(N,N),x(N),b(N),x0(N)
real::x1(N),x2(N)
integer::i,j,k
real::temp
real::e
real::deta_e
subroutine solve(A,b,x,x0,N)
implicit none
integer::N
real::A(N,N),x(N),b(N),x0(N)
real::x1(N),x2(N)
integer::i,j,k
real::temp
real::e
real::deta_e
x1=0
x2=x0
x2=x0
do k=1,200,1
do
i=1,N,1
temp=0
do j=1,N,1
if(j
temp=temp+A(i,j)*x1(j)
else if(j>i) then
temp=temp+A(i,j)*x2(j)
endif
end do
x2(i)=(b(i)-temp)/A(i,i)
end do
e=0
do
i=1,N,1
e=e+(x2(i)-x1(i))**2
end do
deta_e=sqrt(e)
if(deta_e<1e-7) exit
end do
x=x2
end subroutine
end
module
program main
use guass_Seidel
implicit none
integer,parameter::N=3
real::A(N,N),x(N),b(N),x0(N)
integer::i,j
end do
x=x2
end subroutine
program main
use guass_Seidel
implicit none
integer,parameter::N=3
real::A(N,N),x(N),b(N),x0(N)
integer::i,j
open(11,file='fin.txt')
read(11,*) ((A(i,j),j=1,N),i=1,N)
read(11,*) (b(i),i=1,4)
read(11,*) ((A(i,j),j=1,N),i=1,N)
read(11,*) (b(i),i=1,4)
x0=(/0,0,0/)
call solve(A,b,x,x0,N)
write(*,"(3F20.10)") x
end
end