zoukankan      html  css  js  c++  java
  • P3389 【模板】高斯消元法

    我们需要的是解方程组

    手解怎么解,挨个试呗

    所以说呢,电脑也可以干一样的事情

    (x_1)(x_n)一个一个得消去系数,然后倒着推回来

    这里的问题很简单,不需要考虑自由元什么的

    所以说搞就行了

    在这里呢,我们把(1 ightarrow n)的系数依次搞成零

    #include<iostream>
    #include<algorithm>
    #include<cmath>
    #include<cstdio>
    #include<cstring>
    #include<iomanip>
    using namespace std;
    int n;
    double a[105][105],ans[105];
    int main()
    {
        cin>>n;
        for(int i=1;i<=n;i++){
            for(int j=1;j<=n;j++){
                cin>>a[i][j];
            }
            cin>>a[i][n+1];
        }
        for(int i=1;i<=n;i++){
            int r=i;
            for(int j=i+1;j<=n;j++){
                if(fabs(a[r][i])<fabs(a[j][i])) r=j;//为了精度
    			//从大的开始搞 
            }
            if(i!=r) for(int j=i;j<=n+1;j++) swap(a[i][j],a[r][j]);
            for(int j=i+1;j<=n;j++){
                for(int k=i+1;k<=n+1;k++){
                    a[j][k]=a[j][k]-a[j][i]/a[i][i]*a[i][k];
                    //手推一下
    				//自己消元的过程 
                }
                a[j][i]=0;
                //这一项没了 
            }
        }
        for(int i=n;i>=1;i--){
            if(a[i][i]==0){
                cout<<"No Solution";
                return 0;
            }
            ans[i]=a[i][n+1]/a[i][i];
            for(int j=1;j<i;j++){
                a[j][n+1]-=a[j][i]*ans[i];
            }
        }
        for(int i=1;i<=n;i++) cout<<fixed<<setprecision(2)<<ans[i]<<endl;
        return 0;
    }
    
  • 相关阅读:
    02_5if switch分支与循环语句
    02_4运算符
    02_3程序格式
    Shell脚本调用ftp上传文件
    02_2数据类型转换
    02_1标识符_关键字_数据类型
    01_3Java Application初步
    01_2Java开发环境的下载 安装 配置
    Mac 安装MySQL
    用 Homebrew 带飞你的 Mac
  • 原文地址:https://www.cnblogs.com/For-Miku/p/14906330.html
Copyright © 2011-2022 走看看