#define N 3
#include <iostream>
#include <math.h>
#include <stdlib.h>
using namespace std;
int main()
{
double ratio[N][N]={10,3,1,2,-10,3,1,3,10}, //系数矩阵
b[N]={14,-5,14}; //右端常数
double x0[N]={0,0,0}, //初始向量
x[N]; //迭代向量
double x1[N]={0,0,0};
double e=1e-005; //精度要求
int M = 100; //迭代的最大次数
int i,j,c_M=0;
double current_e,sum;
do
{
current_e = 0;
for(i=0;i<N;i++)
{
sum = 0;
for(j=0;j<N;j++)
{
if(j!=i)
{
sum = sum + ratio[i][j] * x1[j];
}
}
x[i] = (b[i] - sum)/ratio[i][i];
x1[i] = x[i];
}
c_M++; //迭代次数加1
for(i=0;i<N;i++)
{
if(fabs(x[i]-x0[i]) > current_e)
current_e = fabs(x[i]-x0[i]);
} //计算当前误差
for(i=0;i<N;i++)
{
x0[i] = x[i];
}
cout<<"current_e = "<<current_e<<endl;
}while(current_e>e&&c_M<M);
do
{
current_e=0;
for(i=0;i<N;i++)
{
sum = 0;
for(j=0;j<N;j++)
{
if(j!=i)
{
sum = sum + ratio[i][j] * x0[j]; //a[i][j]*x[j]加和
}
}
x[i] = (b[i] - sum)/ratio[i][i]; //化简后的方程式
} //更新迭代向量
c_M++; //迭代次数加1
for(i=0;i<N;i++)
{
if(fabs(x[i]-x0[i]) > current_e)
{
current_e = fabs(x[i]-x0[i]); //计算出当前误差
}
}
for(i=0;i<N;i++)
{
x0[i] = x[i];
}
cout<<"current_e = "<<current_e<<endl;
}while(current_e>e && c_M<M); //精度达到要求或者是迭代次数达到最大值时跳出
for(i=0;i<N;i++)
{
cout<<"x["<<i<<"] = "<<x[i]<<endl;
}
cout<<"迭代次数为:"<<c_M<<endl;
return 0;
}