高斯消元 浮点数解

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

 

posted @ 2019-01-28 15:22  灬从此以后灬  阅读(269)  评论(0编辑  收藏  举报