加载中…
个人资料
  • 博客等级:
  • 博客积分:
  • 博客访问:
  • 关注人气:
  • 获赠金笔:0支
  • 赠出金笔:0支
  • 荣誉徽章:
正文 字体大小:

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

x1=0
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

open(11,file='fin.txt')
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

       

0

阅读 收藏 喜欢 打印举报/Report
  

新浪BLOG意见反馈留言板 欢迎批评指正

新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 产品答疑

新浪公司 版权所有