学习笔记——gauss消元法

。。。看了好几篇博客,说得都挺好的。。。

这里直接安利一篇讲得很棒的博客吧。。。

http://blog.csdn.net/u010182633/article/details/45225179

我们经常讲的是正常版递归上三角矩阵的gauss消元,这里上一份高斯——若尔当消元的代码,就是对角线矩阵消元

复杂度O(n^3)

//a 方程组对应的矩阵
//n 未知数个数
//l,ans 存储解,l[]表示是否为自由元
//返回值:解空间的维数 

inline int gauss(double a[][MAXN],double ans[],bool l[],const int& n){
    int res=0,r=0;
    for(int i=0;i<n;i++)
        l[i]=false;
    for(int i=0;i<n;i++){
        for(int j=r;j<n;j++)
            if(fabs(a[j][i])>EPS){
                for(int k=i;k<n;k++)
                    swap(a[j][k],a[r][k]);
                break;    
            }
        if(fabs(a[r][i])<EPS){
            ++res;
            continue;
        }
        for(int j=0;j<n;j++){
            if(j!=r && fabs(a[j][i])>EPS){
                double tmp=a[j][i]/a[r][i];
                for(int k=i;k<n;k++)
                    a[j][k]-=tmp*a[r][k];
            }
        }
        l[i]=true;++r;
    }
    for(int i=0;i<n;i++)
        if(l[i])
            for(int j=0;j<n;j++)
                if(fabs(a[j][i])>0)
                    ans[i]=a[j][n]/a[j][i];
    return res;
}
View Code

 

posted @ 2017-03-21 20:27  Jimmy_C  阅读(245)  评论(0编辑  收藏  举报