高斯-赛德尔迭代法解线性方程组

#include"stdio.h"
#include"math.h"
#include"alloc.h"
 
GaussSeidel(n,a,b,x)
    int n;
    double *a,*b,*x;
{
    int i,j;
    double t,u,m=0,eps;
    while(1)
    {
       eps=0;
       for(i=0;i<n;i++)
       {
          t=x[i];
  for(j=0;j<n;j++)
             if(j!=i)
        m+=a[i*n+j]*x[j];
  x[i]=(b[i]-m)/a[i*n+i];
  m=0;
          u=x[i];
  if(fabs(t-u)>eps)
     eps=fabs(t-u);
 
       }
       if(eps<1e-3) return 1;
    }
}
 
main()
{
    int i;
    double a[3][3]={{5,2,1},{-1,4,2},{2,-3,10}},b[3]={-12,20,3},x[3]={0,0,0};
    GaussSeidel(3,a,b,x);
    for(i=0;i<3;i++)
       printf("x[%d]=%f\n",i,x[i]);
}

你可能感兴趣的:(职场,休闲,线性方程组)