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
|