• 高斯-约旦消元法


    其实,我只会约旦消元法

    推荐blog:这里

    还有这里(这是高斯)

    其实这就是一个小学5年级的数学题-解方程,只是变得有规律可循

    具体细节可以先去看看上面的blog,我先说说约旦消元跟高斯消元的区别:

    下面是约旦消元消完后的结果,所以它可以不用回带:

    而高斯消元后的结果是这样,所以它还需要从下往上回带:

    至于怎么消元,就是找到这一列中系数绝对值最大的,然后先将它系数化为1,再分别去别的行,乘以当前行,当前列的系数 ,(整行都乘),然后顺便处理别的列,就做完了

    至于为什么要选最大的,第二篇blog有详细说明

    推荐题:洛谷P3389 【模板】高斯消元法

    代码:

     1 #include<bits/stdc++.h>
     2 using namespace std;
     3 double a[105][105],b[105];
     4 int main(){
     5     int n,i,j,Max,k;
     6     double can;
     7     scanf("%d",&n);
     8     for(i=1;i<=n;i++){
     9         for(j=1;j<=n;j++)
    10             cin>>a[i][j];
    11         cin>>b[i];
    12     }
    13     for(i=1;i<=n;i++){
    14         Max=0;
    15         for(j=i;j<=n;j++){
    16             if(fabs(a[j][i])>fabs(a[Max][i]))Max=j;
    17         }
    18         if(a[Max][i]==0){
    19             printf("No Solution
    ");
    20             return 0;
    21         }
    22         for(j=i;j<=n;j++){
    23             swap(a[i][j],a[Max][j]);
    24         }swap(b[i],b[Max]);//为了保持约旦消元的矩阵队列,从左上到右下有数,其他都为0
    25         for(j=1;j<=n;j++){
    26             if(j!=i){
    27                 can=a[j][i]/a[i][i];
    28                 for(k=i;k<=n;k++){
    29                     a[j][k]-=a[i][k]*can;
    30                 }
    31                 b[j]-=can*b[i];
    32             }//将a[i][i]先系数化为1,再乘上当前for的a[j][i]的系数(对所有i行的数如此操作)
    33         }
    34     }
    35     for(i=1;i<=n;i++)printf("%.2lf
    ",b[i]/a[i][i]);
    36     return 0;
    37 }
  • 相关阅读:
    python中的反射
    ZOJ 3827 Information Entropy 水
    我的软考之路(七)——数据结构与算法(5)之查找
    nginx.conf 集群完整配置
    恼人的函数指针(二)
    C语言100个经典的算法
    spring事务心得积累
    Vue报错:OPTIONS 405 Method Not Allowed以及CORS跨域错误
    IDA脚本dump内存的示例
    lightProxy
  • 原文地址:https://www.cnblogs.com/Jessica-Cao/p/13569326.html
Copyright © 2020-2023  润新知