高斯-賽德爾迭代法
阿新 • • 發佈:2019-02-09
b.txt
-10.01 9.05 0.12 1.43
1.22 -4.33 2.67 3.22
1.25 -3.69 -12.37 0.58
#include <stdio.h>
#define M 3
main()
{
FILE *f;
double a[M][M],b[M];
double x[M]={0,0,0},y[M];
int i,j,k,n=100;
f=fopen("b.txt","r");
for(i=0;i<M;i++)
{
for(j=0;j<M;j++)
fscanf(f,"%lf",&a[i][j]);
fscanf(f,"%lf",&b[i]);
}
fclose(f);
double s,max,eps=0.001;
k=1;
while(k<n)
{
for(i=0;i<M;i++)
{
x[i]=y[i];
s=0;
for(j=0;j<M;j++)
if(j-i)
s+=a[i][j]*x[j];
y[i]=(b[i]-s)/a[i][i];
}
max=0;
for(i=0;i<M;i++)
if(max<fabs(x[i]-y[i]))
max=fabs(x[i]-y[i]);
if(max<eps)break;
printf("k=%d \n",k);
for(i=0;i<M;i++)
printf("y[%d]=%lf \n",i,y[i]);
k++;
}
if(k==n)
{
printf("ERROR!\n");
return;
}
printf("k=%d \n",k);
for(i=0;i<M;i++)
printf("y[%d]=%lf \n",i,y[i]);
}