Gauss-Seidel迭代法解方程
#include<stdio.h>
#include<math.h>
double Gauss(double x3[],double x[])
{
double s=0;
int i,n=3;
for(i=0;i<n;i++)
s=s+fabs(x3[i]-x[i]);
return s;
}
void main()
{
double a[3][3]={10,-1,-2,-1,10,-2,-1,-1,5},b[3]={7.2,8.3,4.2};
double x2[3],x3[3],x[3]={0},s,r=0.0001; //r表示容许误差
int i,j,k=1,n=3; //k表示迭代次数
for(i=0;i<n;i++)
{
x2[i]=x[i];
x3[i]=x[i];
}
do
{
for(i=0;i<n;i++)
{
s=0;
for(j=0;j<n;j++)
if(j!=i)
s=s+a[i][j]*x2[j];
x[i]=(b[i]-s)/a[i][i];
x2[i]=x[i];
}
//输出每次迭代得到的值
printf("-------------------------------------------\n");
printf("\t 第%d次迭代:\n",k);
printf("x3= ");
for(i=0;i<n;i++)
printf("%.8f ",x3[i]);
printf("|\n");
printf("x= ");
for(i=0;i<n;i++)
printf("%.8f ",x[i]);
printf("|\n");
//判断是否达到迭代精度
if(Gauss(x3,x)<=r)
break;
else
for(i=0;i<n;i++)
x3[i]=x[i];
k++;
}while(1);
printf("*******************************************\n\n");
printf("达到迭代精度的方程组的解为:\n");
printf("x= ");
for(i=0;i<n;i++)
printf("%.8f ",x[i]);
printf("\n");
}
运行结果如图所示: