高斯消元

高斯消元是解决解一些线性方程求解的问题,可以在 On3 的时间内跑出答案。具体方法有两种:

1. 经典的高斯消元:

这个就像一般的解方程的步骤,将未知数一个一个消去,然后只剩下一个未知数时就可以直接算出。而且我们注意到,有第一次消元后有 n1 个式子,第二次后有 n2 个…第 n1 次消元有 2 式子,所以我们得到最后一个方程的答案后再回代。这样子,还要注意一点就是每次尽量选择数大一些的消去,避免误差。

2. 高斯.若尔当消元:

类似于高斯消元,但是最后是消出 n 个只有一个未知数的式子。省去了回代,但是常数要大一些。具体方法是先像一般的高斯消元一样消成上三角矩阵,然后针对某一列 i ,将除了 i 的全部消去。这一步实际上可以与高消一起进行。

代码如下:(参照zcysky)

bool gauss(){
    for(int i=1;i<=n;i++){
        int k=i;
        for(int j=i+1;j<=n;j++)if(fabs(a[j][i])>fabs(a[k][i]))k=j;
        if(fabs(del=a[k][i])return 0;
        for(int j=i;j<=n+1;j++)swap(a[i][j],a[k][j]);
        for(int j=i;j<=n+1;j++)a[i][j]/=del;
        for(k=1;k<=n;k++)if(k!=i){
            del=a[k][i];
            for(int j=i;j<=n+1;j++)a[k][j]-=a[i][j]*del;
        }
    }
    return 1;
}

你可能感兴趣的:(高斯消元,总结,省选,数论)