fortran 问题 高斯-赛德尔法,错在哪?

[复制链接]
查看11 | 回复1 | 2009-5-16 11:59:39 | 显示全部楼层 |阅读模式
program h !高斯赛德尔法

real,dimension(:,:),allocatable::a

real,dimension(:),allocatable::b,x,y,s,e
write(*,*)'请输入矩阵a行数m和列数n'
read(*,*)m,n
allocate(a(m,n))

allocate(b(m),x(m),y(m),s(m),e(m))

write(*,*)'请输入矩阵a'
read(*,*)((a(i,j),j=1,n),i=1,m)

write(*,*)'请输入矩阵b'
read(*,*)(b(i),i=1,m)
write(*,*)'请输入精度ε'
read(*,*)c
write(*,*)'请输入最高循环次数N0'
read(*,*)n0

write(*,*)'请输入初值x(i)'
read(*,*)(x(i),i=1,m)
10 format(1x,f10.2)

do k=1,n0

e=0

do i=1,n

s(i)=0

do j=1,n

if (j.eq.i) then

cycle

else

s(i)=a(i,j)*x(j)+s(i)

endif

enddo

t=x(i)

x(i)=(b(i)-s(i))/a(i,i)

if(abs(x(i)-t).lt.e.or.abs(x(i)-t).eq.e)then

cycle

else

e=abs(x(i)-t)

endif

if(e.lt.c)then

write(*,*)'k=',k

write(*,10)x(i)

goto 12

endif

if(k.eq.n0)then

write(*,*)'无法计算'

goto 12

endif

enddo
enddo
12 end

回复

使用道具 举报

千问 | 2009-5-16 11:59:39 | 显示全部楼层
那个判断语句好像不能用数组直接判断的有些其它地方似乎也不大妥当。。。帮你改了一下program h !高斯赛德尔法 real,dimension(:,:),allocatable::a real,dimension(:),allocatable::b,x,y,s,e write(*,*)'请输入矩阵a行数m和列数n' read(*,*)m,n allocate(a(m,n)) allocate(b(m),x(m),y(m),s(m),e(m)) write(*,*)'请输入矩阵a' read(*,*)((a(i,j),j=1,n),i=1,m) write(*,*)'请输入矩阵b' read(*,*)(b...
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

主题

0

回帖

4882万

积分

论坛元老

Rank: 8Rank: 8

积分
48824836
热门排行