最新消息:雨落星辰是一个专注网站SEO优化、网站SEO诊断、搜索引擎研究、网络营销推广、网站策划运营及站长类的自媒体原创博客

高斯

运维笔记admin9浏览0评论

高斯

高斯

  • 问题描述

输入:系数矩阵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;}
}

  • 运行截图


发布评论

评论列表(0)

  1. 暂无评论