1. 程式人生 > >高斯消元 浮點數解

高斯消元 浮點數解

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; }

高斯消元 浮點數解