#include <stdio.h>
#include <math.h>
#define M 6
void gauss(double A[][M],double b[M],double N,double xx[M],double eps);
int main(void){
double A[6][6]={{4,-1,0,-1,0,0},{-1,4,-1,0,-1,0},{0,-1,4,-1,0,-1},{-1,0,-1,4,-1,0},{0,-1,0,-1,4,-1},{0,0,-1,0,-1,4}};
double b[6]={0,5,-2,5,-2,6};
int N=100;//最大迭代次数
double xx[6]={0};
double eps=1.0e-3;
gauss(A,b,N,xx,eps);
return 0;
}
void gauss(double A[][M],double b[M],double N,double xx[M],double eps){
double x[6]={0};
double sum=0;
double dif=1;
double res;
for(int k=1;(k<N)&&(dif>eps);k++){
for(int i=0;i<M;i++){
for(int j=0;j<M;j++){
if(j<i){
sum=sum+A[i][j]*x[j];
}
if(j>i){
sum=sum+A[i][j]*xx[j];
}
}
x[i]=(b[i]-sum)/A[i][i];
sum=0;
}
res=0;
for(int m=0;m<M;m++){
double dis=fabs(x[m]-xx[m]);
if(dis>res){
res=dis;
}
}
dif=res;
printf("第%d次迭代结果为:\n",k);
for(int a=0;a<M;a++){
printf("%12.8f ",x[a]);
xx[a]=x[a];
}
printf("\n");
}
printf("最终结果为:\n");
for(int f=0;f<M;f++){
printf("%12.8f ",xx[f]);
}
}