Jacobi迭代法
#include <stdio.h>
#include <math.h>
#define N 1000
double a[N][N];
double x[2][N];
double he(int i,int k,int n)
{
double sum=0;
int j;
for(j=0;j<n;++j)
{
if(j==i)
continue;
sum+=a[i][j]*x[k][j];
}
return sum;
}
int main()
{
int n,i,j,k;
int cycle;
int count;
double e;
double maxe;
int flag;
while(scanf("%d",&n),n)
{
flag=0;
scanf("%lf%d",&e,&cycle);
for(i=0;i<n;++i)
for(j=0;j<n;++j)
scanf("%lf",&a[i][j]);
for(k=0;k<n;++k)
scanf("%lf",&a[k][n]);
for(i=0;i<n;++i)
x[0][i]=0;
i=0;
count=0;
while(true)
{
k=(i+1)%2;
for(j=0;j<n;++j)
x[k][j]=(a[j][n]-he(j,i,n))/a[j][j];
maxe=0;
for(j=0;j<n;++j)
maxe=fabs(x[k][j]-x[i][j])>maxe ? fabs(x[k][j]-x[i][j]) : maxe;
if(maxe<=e)
{
flag=1;
break;
}
if((++count)>=cycle)
break;
i=k;
}
if(flag)
printf("当迭代次数为%d时达到精度要求,解如下:\n",count+1);
else
printf("已达到最大迭代次数%d,未达到精度要求,解如下:\n",cycle);
for(i=0;i<n;++i)
printf("%lf ",x[k][i]);
printf("\n");
}
return 0;
}