。。。看了好几篇博客,说得都挺好的。。。
这里直接安利一篇讲得很棒的博客吧。。。
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; }