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");

}

运行结果如图所示:

发布了18 篇原创文章 · 获赞 16 · 访问量 4万+

猜你喜欢

转载自blog.csdn.net/da_ye_zi/article/details/88733269