#include<stdio.h>
#include<stdlib.h>
#include<math.h>
//========================================================================
//全局变量
#define N 6
double a[N][N]= { {4,-1,0,-1,0,0},{-1,4,-1,0,-1,0},{0,-1,4,0,0,-1},{-1,0,0,4,-1,0},{0,-1,0,-1,4,-1},{0,0,-1,0,-1,4}} ; //声明系数矩阵
double b[N]={0,5,0,6,-2,6}; //声明方程组右边的值(数组)
double eps=0.001; //声明相对误差变量
double x[6]={0,0,0,0,0,0};
int iteration;
//函数声明
void jacobi(); /*声明jacobi用以对方程的增广矩阵进行简单迭代*/
void show(); //显示最后的结果
//=====================================================================
//以下是主函数
void main()
{
printf("============================================================\n\n");
printf("============================================================\n\n");
jacobi();
show();
printf("============================================================\n\n");
}
void jacobi()
{
int i,j,flag;
double y[6],sum,temp[6],k;
do
{
flag=1;
iteration++;
for(i=0;i<6;i++)
{
sum=0.0;
for(j=0;j<6;j++)
{
if(j!=i)
sum+=a[i][j]*x[j];
}
y[i]=(b[i]-sum)/a[i][i];
}
{//此段代码求y[i]-x[i]绝对值得最大值
for(i=0;i<6;i++)
temp[i]=fabs(y[i]-x[i]);
for(i=0;i<5;i++)
for(j=1;j<6;j++)
if(temp[j]>temp[i])
k=temp[j];
}//k为最大值
if (k<=eps)
flag=0;
for(i=0;i<6;i++)
x[i]=y[i];
}while(flag==1);
}
//===============================================================
//以下是对show()函数的定义
void show()
{
int i;
printf("求解的结果是:\n\n");
for(i=0;i<6;i++)
printf(" x[%d]=%10lf\n\n",i+1,x[i]);
printf("迭代的次数是:%d\n\n",iteration);
}
//==========================================================