P3389 【模板】高斯消元法
2018-06-17 22:01:47来源:未知 阅读 ()
题目背景
Gauss消元
题目描述
给定一个线性方程组,对其求解
输入输出格式
输入格式:
第一行,一个正整数 nn
第二至 n+1n+1行,每行 n+1n+1 个整数,为a_1, a_2 \cdots a_na?1??,a?2???a?n?? 和 bb,代表一组方程。
输出格式:
共n行,每行一个数,第 ii行为 x_ix?i?? (保留2位小数)
如果不存在唯一解,在第一行输出"No Solution".
输入输出样例
3 1 3 4 5 1 4 7 3 9 3 2 2
-0.97 5.18 -2.39
说明
1 \leq n \leq 100, \left | a_i \right| \leq {10}^4 , \left |b \right| \leq {10}^41≤n≤100,∣a?i??∣≤10?4??,∣b∣≤10?4??
本来想深入的研究一下矩阵来着,,
结果不知道怎么着的研究到高斯消元上了,。。。。
高斯消元法真是一个神(bao)奇(li)的的东西、
本来想仔细整理整理来着,结果发现我不会在博客园里写矩阵,
1 #include<cstdio> 2 #include<cstring> 3 #include<cmath> 4 #include<algorithm> 5 //#define Matrix double 6 using namespace std; 7 const int MAXN=101; 8 typedef double Matrix[MAXN][MAXN]; 9 inline void read(int &n) 10 {char c=getchar();bool flag=0; 11 while(c<'0'||c>'9') c=='-'?flag=1,c=getchar():c=getchar(); 12 while(c>='0'&&c<='9') n=n*10+c-48,c=getchar();flag==1?n=-n:n=n;} 13 int n; 14 Matrix a; 15 void debug() 16 { 17 /*printf("********************************\n"); 18 for(int i=1;i<=n;i++) 19 { 20 for(int j=1;j<=n+1;j++) printf("%.2lf ",a[i][j]); 21 printf("\n"); 22 }*/ 23 } 24 void gauss_elimination(int n) 25 { 26 int r;// 将要选择的最大值 27 for(int i=1;i<=n;i++) 28 { 29 r=i; 30 for(int j=i+1;j<=n;j++)// 枚举后面的行 31 if(fabs(a[j][i])>fabs(a[r][i])) r=j; 32 debug(); 33 if(r!=i) swap(a[r],a[i]); 34 debug(); 35 if(!a[i][i]) 36 { 37 printf("No Solution\n"); 38 return; 39 } 40 for(int k=i+1;k<=n;k++)// 与后面的进行消元 41 { 42 double f=a[k][i]/a[i][i];//模拟人工消元 43 for(int j=i;j<=n+1;j++) a[k][j]-=f*a[i][j]; 44 } 45 debug(); 46 } 47 debug(); 48 for(int i=n;i>=1;i--) 49 { 50 debug(); 51 for(int j=i+1;j<=n;j++) 52 a[i][n+1]-=a[j][n+1]*a[i][j]; 53 a[i][n+1]/=a[i][i]; 54 } 55 for(int i=1;i<=n;i++) 56 printf("%.2lf\n",a[i][n+1]); 57 } 58 int main() 59 { 60 read(n); 61 for(int i=1;i<=n;i++) 62 for(int j=1;j<=n+1;j++) 63 scanf("%lf",&a[i][j]); 64 gauss_elimination(n); 65 return 0; 66 }
标签:
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有
- C++冒泡排序 (基于函数模板实现) 2020-05-31
- C++ 模板类vector 2020-05-31
- C++ 模板类array 2020-05-31
- C++ 模板类vector 2020-05-30
- opencv-12-高斯滤波-双边滤波(附C++代码实现) 2020-05-10
IDC资讯: 主机资讯 注册资讯 托管资讯 vps资讯 网站建设
网站运营: 建站经验 策划盈利 搜索优化 网站推广 免费资源
网络编程: Asp.Net编程 Asp编程 Php编程 Xml编程 Access Mssql Mysql 其它
服务器技术: Web服务器 Ftp服务器 Mail服务器 Dns服务器 安全防护
软件技巧: 其它软件 Word Excel Powerpoint Ghost Vista QQ空间 QQ FlashGet 迅雷
网页制作: FrontPages Dreamweaver Javascript css photoshop fireworks Flash