zoukankan      html  css  js  c++  java
  • 高斯消元法

    高斯消元法。直接附代码了,这个代码没有回带的。

     1 //Writer : Hsz %WJMZBMR%tourist%hzwer
     2 #include<iostream>
     3 #include<cstring>
     4 #include<cstdio>
     5 #include<cmath>
     6 #include<queue>
     7 #include<map>
     8 #include<set>
     9 #include<stack>
    10 #include<vector>
    11 #include<cstdlib>
    12 #include<algorithm>
    13 #define LL long long
    14 using namespace std;
    15 int n,w[105];
    16 const double eps=1e-8;
    17 double a[105][105],b[105],v[105];
    18 void gauss() {
    19     for(int i=1; i<=n; i++) {//枚举每个方程,并记录每个该方程最大的系数
    20         int p=0;
    21         double mx=0;
    22         for(int j=1; j<=n; j++) 
    23             if(fabs(a[i][j])-eps>mx) mx=fabs(a[i][j]),p=j;
    24         if(!p) {
    25             printf("No Solution");
    26             return;
    27         }
    28         w[i]=p;
    29         for(int j=1; j<=n; j++)
    30             if(i!=j) {
    31                 double tt=a[j][p]/a[i][p];
    32                 for(int k=1; k<=n+1; k++)//记得把方程右边的结果也要消
    33                     a[j][k]-=a[i][k]*tt;  //消元,消到这个方程的系数构成的矩阵每行只有一个为0,每列只有一个为0.
    34             }
    35     }
    36     for(int i=1; i<=n; i++) v[w[i]]=a[i][n+1]/a[i][w[i]];//用v[]记录答案,w[]表示的是未消掉的那个元的位置。
    37     for(int i=1; i<=n; i++) printf("%.2lf
    " ,v[i]);
    38 }
    39 int main() {
    40     cin>>n;
    41     for(int i=1; i<=n; i++)
    42         for(int j=1; j<=n+1; j++)
    43             scanf("%lf",&a[i][j]);
    44 
    45     gauss();
    46     return 0;
    47 }

    upd:20200924 22时 

    再补一个,判断多解&无解的,但是我没试过,感觉对的

    消元结束后,看每个方程系数不为0的项的数目,如果自由元的数目是0,而且等式右边不为0,无解;如果自由元的数目大于一,那么该方程组就有多解。

    for(int i=1;i<=n;i++) {
      int cnt=0;
      for(int j=1;j<=n;j++) {
        if(fabs(a[i][j])<eps) cnt++;
      }
      if(cnt==1) continue;
      if(cnt>1) {printf("more
    ");return 0;}//多解
      if(cnt==0&&fabs(a[i][n+1])>eps) {printf("no solution
    ");return 0;}//无解
    }

    不保证正确性,如果有错,欢迎指正。

    我是咸鱼。转载博客请征得博主同意Orz
  • 相关阅读:
    maven的安装步骤
    Sublime Text 3设置指南
    Eclipse 不同版本名称
    redis命令简单介绍
    redis简介与window安装:
    redis数据类型:String
    Mybatis-plus的使用步骤
    SpringgBoot父子工程的创建
    我的大学-易班
    IDEA:配置Tomcat并运行应用
  • 原文地址:https://www.cnblogs.com/sdfzhsz/p/8997818.html
Copyright © 2011-2022 走看看