ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

高斯消元模板

2019-11-10 16:01:39  阅读:204  来源: 互联网

标签:Code int double eps 高斯消 101 模板


LuoguP3389

就是一道自己康康+手模的数学题啊qwq

Code:

 1 #include <bits/stdc++.h>
 2 using namespace std;
 3 const double eps = 1E-8;//因为精度问题所以要取一个十分小的数来作为判断是否为0的标准 
 4 int n;
 5 double a[101][101];//用来存矩阵 
 6 int main () {
 7     scanf("%d", &n);
 8     for (int i = 0; i < n; i++) {
 9         for (int j = 0; j <= n; j++) {
10             scanf("%lf", &a[i][j]);
11         }
12     }
13     for (int i = 0; i < n; i++) {
14         int pre = i;
15         for (int j = i; j < n; j++) {//每次遍历选择一个当前位置系数绝对值最大的调换过来,防止误差 
16             if (fabs(a[j][i] - a[pre][i]) >= eps) {
17                 pre = j;
18             }
19         }
20         for (int k = 0; k <= n; k++) {//将这两行交换,把待处理的一行调至上方 
21             swap(a[i][k], a[pre][k]);
22         }
23         if (fabs(a[i][i]) <= eps) {//如果系数为0就一定无解 
24             printf("No Solution\n");
25             return 0;
26         }
27         for (int k = i + 1; k <= n; k++) {//将该位系数化一并将这一行系数同除a[i][i] 
28             a[i][k] /= a[i][i];
29         }
30         a[i][i] = 1;//a[i][i]这个位置除或不除都可以,因为它这个位置化 1 后就不会对后面的值造成影响了,可以将其忽略 
31         for (int j = 0; j < n; j++) {//枚举每一行 
32             if (i != j) {//不能再处理当前这一行 
33                 for (int k = i + 1; k <= n; k++) {//这里直接从i+1位置开始即可 
34                     a[j][k] -= a[j][i] * a[i][k];//就是j行最前面那个不为0的系数乘上i行相应列的位置,然后此位置减去即可 
35                 }
36                 //a[j][i] = 0; 加或不加都可以 
37             }
38         }
39     }
40     for (int i = 0; i < n; i++) {
41         printf("%.2lf\n", a[i][n]);//输出答案 
42     }
43     return 0;
44 }
View Code

 

标签:Code,int,double,eps,高斯消,101,模板
来源: https://www.cnblogs.com/Sundial/p/11830550.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有