#include<iostream>
#include"math.h"
using namespace std;
//n为方程的阶数
#define n 6
//方程组的系数矩阵、常数项向量、初值向量
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}},b[n]={0,5,-2,5,-2,6}, x[n]={0,5,-2,5,-2,6}, c[n];
//counter为最大迭代次数
int i=0,j,k=0,counter=100;
int main()
{
int k=0,i=0;
double num1,E;
float y[n];
do
{
E=0;
for(j=0;j<n;j++)
c[j]=x[j];
num1=0;
for(j=0;j<n;j++)
if(j!=i)
num1=num1+a[i][j]*x[j];
for(j=0;j<n;j++)
c[j]=x[j];
y[i]=(b[i]-num1)/a[i][i];
if(i<n)
{ i++; }
else
{
for(j=0;j<n;j++)
{ x[j]=y[j]; }
for(j=0;j<n;j++)
if(E<(float)fabs(c[j]-y[j])) E=(float)fabs(c[j]-y[j]);
if(k>=0)
{ printf("%2d:",k+1);
for(j=0;j<n;j++)
printf("x%d=%.5lf ",j+1,x[j]);
cout<<endl;
}
i=0;
k++;
//精度
if(E<0.0001) break;
}
}while(k<=counter);
cout<<"总迭代次数 "<<k<<endl;
cout<<"迭代终止精度 ";
printf("x[%d]-x%doo<%.6lf\n",k,k-1,E);
cout<<"\t\t---------最终结果-----------"<<endl;
for(i=0;i<n;i++)
printf("x%d=%.5lf ",i+1,x[i]);
cout<<endl<<endl;
}
来源:CSDN
作者:HU(。•ᴗ-)_
链接:https://blog.csdn.net/weixin_45126622/article/details/103652233