高斯消元 浮点数解
Posted stranger-
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了高斯消元 浮点数解相关的知识,希望对你有一定的参考价值。
#include<iostream> using namespace std; const int maxn = 1000; int n; double a[maxn][maxn]; double b[maxn]; void gaussin() { int Flg = -1,i,j,k; //判断方程组是否有解:0无解、1有唯一解、2有无穷解 double fg; //化简部分 for(i=1;i<=n;i++){ fg=a[i][i]; for(j=i+1;j<=n;j++){ double x = a[j][i]/fg; for(k=i;k<=n;k++) a[j][k] -= x*a[i][k]; b[j]-=x*b[i]; } } //判断部分 bool flag; //判断方程组是否多解 for(int i=n;i>0;i--){ flag = false; for(int j=1;j<=n;j++){ if(a[i][j]!=0){ break; } if(j==n){ if(b[i] == 0) flag = true; else Flg = 0; //无解情况 } } if(Flg != 0) if(flag){ Flg = 2; break; } else Flg = 1; else break; } //最终结果 if(Flg == 0) cout << "方程组无解"<<endl; else if(Flg == 2) cout << "方程组多解" << endl; else{ double s[maxn]; for(int i=n;i>0;i--){ for(int j=n;j>=i;j--){ if(j==i) s[i] = b[i]/a[i][j]; else b[i] -= a[i][j]*s[j]; } } cout << "方程组有解:"<<endl; for(int i=1;i<=n;i++){ cout << " x"<<i<<"="<<s[i]<<endl; } } } int main() { cout << "请输入未知数个数:"; cin>>n; for(int i=1;i<=n;i++){ cout << "请输入第"<<i<<"方程式的系数和结果:"<<endl; for(int j=1;j<=n;j++){ cin>>a[i][j]; } cin>>b[i]; } gaussin(); return 0; }
以上是关于高斯消元 浮点数解的主要内容,如果未能解决你的问题,请参考以下文章