zoukankan      html  css  js  c++  java
  • Gauss消元模板

    const double eps = 1e-15;
    //高斯消元模板
    //-----------------------------------------------------------------------------------
    //把对应得系数矩阵化为对角矩阵,然后直接回代即可
    const int maxn=100+5;
    const int maxm=100+5;
    //a为增广矩阵,ans为一组特解,n为未知数个数,free_x[i]=false表示该变量为自由变量
    double a[maxn][maxm],ans[maxn];
    int n;
    bool free_x[maxn];
    int Gauss(){
        int res=0,r=0;
        for(int i=0;i<n;i++) free_x[i]=false;
        for(int i=0;i<n;++i){
            for(int j=r;j<n;++j)  //寻找该列中不等于0的元素,然后交换行
                if(fabs(a[r][i])>eps) {
                    for(int k=i;k<=n;++k){
                        swap(a[j][k],a[r][k]);
                        break;
                    }
                }
            if(fabs(a[r][i])<eps) { //该列中元素全为0,自由变元增加一
                ++res;continue;
            }
            for(int j=0;j<n;++j){//用第r列将该列其他元素全部化为0
                if(j!=r&&fabs(a[r][i])>eps){
                    double tmp=a[j][i]/a[r][i];
                    for(int k=i;k<=n;++k)
                    a[j][k]-=tmp*a[r][k];
                }
            }
            free_x[i]=true;++r;
        }
        for(int i=0;i<n;++i)
            if(free_x[i]) {
                for(int j=0;j<n;++j)
                if(fabs(a[j][i])>eps) ans[i]=a[j][n]/a[j][i];
            }
        return res; 
    }
    //-----------------------------------------------------------------------------------
  • 相关阅读:
    在中文版VS2008中安装MVC
    【原创】最优惠的企业邮局
    【推荐】双模虚拟主机 WINDOWS经济型或 UNIX经济型
    CSS基础
    第一篇文章
    一道面试题
    IIS做web server有些中文名文件不能下载
    偶遇指间流沙
    迷失的女孩
    身边的小故事二则
  • 原文地址:https://www.cnblogs.com/033000-/p/10061415.html
Copyright © 2011-2022 走看看