[关闭]
@Junlier 2018-08-28T20:24:28.000000Z 字数 1834 阅读 1895

高斯消元学习

数学方法——高斯消元
高斯消元
致敬yyb

我的板子

以洛古的模板题为准……戳我

  1. #include<iostream>
  2. #include<cstdlib>
  3. #include<cstdio>
  4. #include<cmath>
  5. #include<cstring>
  6. #include<iomanip>
  7. #include<algorithm>
  8. #include<ctime>
  9. #include<queue>
  10. #include<stack>
  11. #include<vector>
  12. #define rg register
  13. #define il inline
  14. #define lst long long
  15. #define ldb long double
  16. #define N 150
  17. using namespace std;
  18. const int Inf=1e9;
  19. int n;
  20. ldb g[N][N];
  21. il int read()
  22. {
  23. rg int s=0,m=0;rg char ch=getchar();
  24. while(ch<'0'||ch>'9'){if(ch=='-')m=1;ch=getchar();}
  25. while(ch>='0'&&ch<='9')s=(s<<3)+(s<<1)+(ch^48),ch=getchar();
  26. return m?-s:s;
  27. }
  28. int main()
  29. {
  30. n=read();
  31. for(rg int i=1;i<=n;++i)
  32. for(rg int j=1;j<=n+1;++j)
  33. scanf("%Lf",&g[i][j]);
  34. //i是枚举的每一个方程 1~n
  35. //j是方程的每一项 1~n+1
  36. for(rg int k=1;k<=n;++k)//要消元的未知数(也同时是第几个方程)
  37. {
  38. rg int now=k;//每一个方程要把一个未知数消元
  39. for(rg int i=k+1;i<=n;++i)//找当前要处理的未知数的系数的最大值
  40. if(fabs(g[now][k])<fabs(g[i][k]))now=i;
  41. for(rg int j=k;j<=n+1;++j)//换到这一行来
  42. swap(g[now][j],g[k][j]);
  43. if(!g[k][k])//还没开始消元就没东西了,肯定无解
  44. {
  45. puts("No Solution");return 0;
  46. }
  47. for(rg int j=k+1;j<=n+1;++j)//系数化为1
  48. g[k][j]/=g[k][k];
  49. g[k][k]=1;
  50. for(rg int i=k+1;i<=n;++i)//其他每一个方程把这个元消掉(每一个方程的这个元置为0)
  51. {
  52. for(rg int j=k+1;j<=n+1;++j)
  53. g[i][j]-=g[i][k]*g[k][j];//一定要纸上画图模拟消元过程!
  54. g[i][k]=0;
  55. }
  56. }//每次做一个未知数的消元,最后剩下一个三角阵 yeh
  57. //每个方程回代求解
  58. for(rg int k=n;k>=1;--k)
  59. {
  60. for(rg int i=k+1;i<=n;++i)
  61. {
  62. g[k][n+1]-=g[k][i]*g[i][n+1];//没一个方程的n+1位置是对应未知数的答案(逐个往上消掉了)
  63. g[k][i]=0;//置为0,这一项已经经过回代变成常数并被减掉了 yeh
  64. }
  65. g[k][n+1]/=g[k][k];//除掉自己方程的系数(其实系数已经在上面被化为1了……)
  66. g[k][k]=1;
  67. }//每回代一个方程就解出一个未知数,最后留下的矩阵就是每个未知数的解了 yeh
  68. for(rg int i=1;i<=n;++i)
  69. printf("%.2Lf\n",g[i][n+1]);
  70. return 0;
  71. }

题单(来自xzy)

添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注