模板整理: 高斯消元

来源:互联网 发布:怎么做淘宝自然排名 编辑:程序博客网 时间:2024/06/11 20:03


表示不会线性基,只会最最辣鸡的高斯消元(应该够了吧QAQ)
高斯消元只要会手动模拟考场推也是可以的。。
主要想法就是找对角线,一个个往下找,
如果当前这个(i,i)的值非0,就其它行全部消去第i列(把第i列的值都减成0)即可。
最后求解的时候,从下往上(因为是个倒三角)求解即可,
代码写得还是挺明白的。
……还有一种开关灯01啥啥的我似乎还不怎么会。。
还有自由变元,
消完之后有i行都是0,那么就有i个自由变元。。
还有无解,如果出现系数都是0而方程右边不为0,
那么显然无解了。
大概就这么几种。给一道裸题的模板。
例题:bzoj1013
模板:

//n个未知量,系数矩阵是a,n*n的//b是值的矩阵(方程右边)//ans[i]存储第i个变量的答案void gauss(){    double c[N];    for (int k=1;k<n;k++){        for (int i=k+1;i<=n;i++) c[i]=a[i][k]/a[k][k];        for (int i=k+1;i<=n;i++){            for (int j=1;j<=n;j++) a[i][j]-=a[k][j]*c[i];            b[i]-=b[k]*c[i];        }    }//消元    ans[n]=b[n]/a[n][n];    for (int i=n-1;i;i--){        double sum=0.0;        for (int j=i+1;j<=n;j++) sum+=ans[j]*a[i][j];        ans[i]=(b[i]-sum)/a[i][i];    }//从下往上求解}