高斯消元 浮點數解
阿新 • • 發佈:2019-01-28
space style 化簡 lse col void 結果 最終 mes
#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; }
高斯消元 浮點數解