• 高斯消元


    高斯消元最朴素的板子......

    求解线性方程组。

    先转换为增广矩阵。

    从上到下一行一行消元呗。

    每次挑个首列最大的行消。

    求出来可能不是整数,要用double。

    具体看代码。

    最后求出来xn之后回带求出x1、x2......xn-1。

    给个洛谷的模板题链接:传送门

     1 #include<cstdio>
     2 #include<cstring>
     3 #include<algorithm>
     4 using namespace std;
     5 
     6 int n;
     7 double c[105][105];
     8 double x[105];
     9 double eps=1e-7;
    10 
    11 double v(double rx)
    12 {
    13     return rx>0?rx:-rx;
    14 }
    15 
    16 int main()
    17 {
    18     scanf("%d",&n);
    19     for(int i=1;i<=n;i++)
    20         for(int j=1;j<=n+1;j++)
    21             scanf("%lf",&c[i][j]);
    22     for(int i=1;i<=n;i++)
    23     {
    24         int p=i;
    25         for(int j=i+1;j<=n;j++)
    26             if(v(c[j][i])>v(c[p][i]))p=j;
    27         if(v(c[p][i])<eps)
    28         {
    29             printf("No Solution");
    30             return 0;
    31         }
    32         if(i!=p)
    33         {
    34             for(int j=i;j<=n+1;j++)
    35                 swap(c[i][j],c[p][j]);
    36         }
    37         double div=c[i][i];
    38         for(int j=i;j<=n+1;j++)
    39             c[i][j]/=div;
    40         for(int j=i+1;j<=n;j++)
    41         {
    42             div=c[j][i];
    43             for(int k=i;k<=n+1;k++)
    44                 c[j][k]-=c[i][k]*div;
    45         }
    46     }
    47     x[n]=c[n][n+1];
    48     for(int i=n-1;i;i--)
    49     {
    50         x[i]=c[i][n+1];
    51         for(int j=i+1;j<=n;j++)
    52             x[i]-=c[i][j]*x[j];
    53     }
    54     for(int i=1;i<=n;i++)
    55         printf("%.2lf
    ",x[i]);
    56     return 0;
    57 }

    这样就OK啦。

  • 相关阅读:
    JVM
    关于filter
    session
    xml
    互联网应用和企业级项目的区别
    本学期javaee目标
    团队项目软件度量
    团队项目总结
    团队项目来换网最新
    ubuntu18.04 编译opencv4.4.0 带cuda加速,ffmpeg
  • 原文地址:https://www.cnblogs.com/cervusy/p/9588508.html
Copyright © 2020-2023  润新知