#include<iostream>
#include<math.h>
#include<conio.h>
using namespace std;
#define N 3
#define dim 3
#define MAXREPT1 30000
#define epsilon1 0.01
double GS(int n, double a[N][N], double b[N], double x[N])
{
int i,j,k;
double tmp1,tmp2,x2[N];
for(k=0;k<1000;k++)
{
for(i=0;i<n;i++)
x2[i]=x[i];
for(i=0;i<n;i++)
{
tmp1=0.0;
tmp2=0.0;
for(j=0;j<i;j++)
tmp1+=a[i][j]*x[j];
for(j=i+1;j<n;j++ )
tmp2+=a[i][j]*x2[j];
x[i]=(b[i]-tmp1-tmp2)/a[i][i];
}
for(i=0,j=0;i<n;i++)
if(fabs(x2[i]-x[i])<0.0001) j++;
if(j==n)
{
printf("\nThis Gauss-Seidel iterative scheme is convergent!");
printf("\nNumber of iterations:%d\n",k+1);
break;
}
//额外的发挥
if(k==499)
{
printf("\nThis Jacobi iterative scheme may be not convergent!");
break;
}
printf("\nThe results:\n");
for(i=0;i<n;i++)
printf("%12.7f",x[i]);
}
return 0;
}
int main()
{
double A[N][N]={{8,-3,2},{4,11,-1},{6,3,12}};
double b[N]={20,33,36};
double x[N]={0,0,0};
GS(dim,A,b,x);
for(int i=0; i!=N; i++)
//for(int j=0; j!=dim; j++)
cout<<"x"<<i<<"="<<x[i]<<"\t"<<endl;
return 0;
}