• 【科技】高斯消元简析


    想必大家都可以非常迅速的解出一个二元一次方程组,

    那么三元呢(这也还好),那么再多一些未知数?

    于是这里就要介绍到高斯消元的方法了...

    本人蒟蒻到现在才学高斯消元,请不要介意方法过于垃圾

     --------------------------------------------------------------------------------------------------

    首先假设你拿到了一个n元方程组,那么它应该有n个方程,每个方程有n+1个系数,

    好于是我们把他们全部弄到一个n*(n+1)的矩阵中,这里简称为系数矩阵

    第一步:我们先把每一行的系数都除以这一行的第一个数

    第二步:从第一行到第n行分别控制x1...xn的解,因此你需要把第i行的第i列的系数化为1以此来求解方程,

    第三步:在处理第i行的时候,把第i+1行到第n行的数通过加减消元法处理

       

    第四步:那么求出这个答案就是最后的答案数组了,

    求答案是xn的值是a[n][n+1],然后如果求x(n-1)的值就是将xn的值代入a[n-1][n],然后求出x(n-1)的值

    于是乎 x1=-1,x2=3,x3=-6

    以上就是关于高斯消元简要的介绍.

    以下是高斯消元实数的模板,在无解时返回1。

     1 bool Gauss(){
     2     for (int i=0;i<n;++i){
     3         int k=i;
     4         for (int j=i+1;j<n;++j) if (a[j][i] > a[k][i]) k=j;
     5         now=a[k][i];
     6         if (now==0) return 1;
     7         for (int j=i;j<=n;++j) swap(a[i][j],a[k][j]);
     8         for (int j=i;j<=n;++j) a[i][j]=Mul(a[i][j],Inv(now));
     9         for (k=0;k<n;++k) if (k!=i){
    10             now=a[k][i];
    11             for (int j=i;j<=n;++j) MO(a[k][j]-=Mul(a[i][j],now));
    12         }
    13     }return 0;
    14 }
    View Code
  • 相关阅读:
    c#命名空间
    MUTC 2 B Meeting point1 二分
    高斯消元模板
    MUTC 2 C Meeting point2 切比雪夫距离orz
    MUTC 2 E Save the dwarfs DP?
    Uva 10859 Placing Lampposts 树形dp
    Uva 11552 Fewest Flops 字符串dp
    Uva 10891 Game of Sum dp博弈
    MUTC 2 D Matrix 并查集
    Uva 1456 Cellular Network 概率dp
  • 原文地址:https://www.cnblogs.com/Dance-Of-Faith/p/7736112.html
Copyright © 2020-2023  润新知