码迷,mamicode.com
首页 > 其他好文 > 详细

高斯消元模板

时间:2018-08-12 21:51:16      阅读:135      评论:0      收藏:0      [点我收藏+]

标签:目的   std   def   处理   scan   模板   nbsp   详解   const   

详解参照其他博客,简单模板如下

 1 /*处理出的倒三角是这个形状的
 2 x1 x2 x3=..
 3    x2 x3=..
 4       x3=..
 5 */
 6 #include<bits/stdc++.h>
 7 #define N 205
 8 using namespace std;
 9 const double eps=1e-8;
10 int n;
11 double a[N][N],del;
12 bool gauss(){
13     for(int i=1;i<=n;i++){//处理第i列,行也处理到i 
14         int k=i;//i:当前处理的列 和 行 
15         for(int j=i+1;j<=n;j++)if(fabs(a[j][i])>fabs(a[k][i]))k=j;//找到i列最大的系数在的行 
16         if(fabs(del=a[k][i])<eps)return 0;//最大数的行都为0,无解或多解     del:i列最大系数 
17         for(int j=i;j<=n+1;j++)swap(a[i][j],a[k][j]);//交换两行,将大的换到上面去,底下开始消元 
18         for(int j=i;j<=n+1;j++)a[i][j]/=del;//最大系数化为 1 
19         for(k=1;k<=n;k++)if(k!=i){
20             del=a[k][i];
21             for(int j=i;j<=n+1;j++)a[k][j]-=a[i][j]*del;//也可看做a[k][j]=a[k][j]/del-a[i][j]
22             //即把a[k][i]也系数化为1,再减去i行,显然k的第i列变成0了,即达到了消元的目的 
23         }
24     }
25     return 1;
26 }
27 int main(){
28     scanf("%d",&n);
29     for(int i=1;i<=n;i++)
30     for(int j=1;j<=n+1;j++)
31         scanf("%lf",&a[i][j]);
32     bool flag=gauss();
33     if(!flag) puts("No Solution");
34     else 
35     {
36         for(int i=1;i<=n;i++)
37             printf("%.2lf\n",a[i][n+1]);
38     }
39     return 0;
40 }

 

高斯消元模板

标签:目的   std   def   处理   scan   模板   nbsp   详解   const   

原文地址:https://www.cnblogs.com/71-111/p/9463992.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!