高斯
- 问题描述
输入:系数矩阵A,最大迭代次数N,初始向量,误差限e
输出:解向量
- 基本公式
- 流程图
- 算法实现
#include <iostream>
#include <iomanip>using namespace std;//定义系数矩阵
double a[50][50] = {0};
//定义x1解的数组
double rootX1[100];
//定义x2解的数组
double rootX2[100];
//定义x3解的数组
double rootX3[100];
//定义x1的迭代公式
double x1Iteration(double x2,double x3);
//定义x2的迭代公式
double x2Iteration(double x1,double x3);
//定义x3的迭代公式
double x3Iteration(double x1,double x2);
//核心算法,Gauss - Seidel 迭代法
void GaussSeidel(double x1,double x2,double x3,double e,int N);
//格式输出
void formatPrint(int N);int main()
{//最大迭代次数Nint N;//初始向量,误差限edouble x1,x2,x3,e;cout << "请分别输入系数矩阵A,最大迭代次数N,初始向量,误差限e" << endl;for(int i=0;i<3;i++){for(int j=0;j<3;j++){cin>>a[i][j];}}cin>>N>>x1>>x2>>x3>>e;GaussSeidel(x1,x2,x3,e,N);formatPrint(N);return 0;
}
//定义x1的迭代公式
double x1Iteration(double x2,double x3)
{return 0.72 + 0.1*x2 + 0.2 * x3;
}
//定义x2的迭代公式
double x2Iteration(double x1,double x3)
{return 0.83 + 0.1*x1 + 0.2*x3;
}
//定义x3的迭代公式
double x3Iteration(double x1,double x2)
{return 0.84 + 0.2*x1 + 0.2*x2;
}
//核心算法,Gauss - Seidel 迭代法
void GaussSeidel(double x1,double x2,double x3,double e,int N)
{rootX1[0] = x1;rootX2[0] = x2;rootX3[0] = x3;for(int i=0;i<N;i++){rootX1[i+1] = x1Iteration(rootX2[i],rootX3[i]);rootX2[i+1] = x2Iteration(rootX1[i+1],rootX3[i]);rootX3[i+1] = x3Iteration(rootX1[i+1],rootX2[i+1]);}
}
//格式输出
void formatPrint(int N){cout<<"--------------------------------------------------------"<<endl;cout<<"k "<<"x1 "<<"x2 "<<"x3 "<<endl;for(int i=0;i<=N;i++){cout<<setiosflags(ios::fixed);cout<<setprecision(5)<<i<<" "<<rootX1[i]<<" "<<rootX2[i]<<" "<<rootX3[i]<<endl;}
}
- 运行截图