[关闭]
@zzzc18 2017-11-09T11:42:48.000000Z 字数 906 阅读 983

高斯消元

模板库 数学


高斯消元
时间复杂度 ,解 个方程组
注意精度问题

  1. #include<cmath>
  2. #include<cstdio>
  3. #include<algorithm>
  4. using namespace std;
  5. const int MAXN = 123;
  6. const double EPS = 1e-6;
  7. class Gaussian_Elimination{
  8. private:
  9. int n;
  10. double mat[MAXN][MAXN];
  11. public:
  12. void INIT(){
  13. scanf("%d",&n);
  14. for(int i=1;i<=n;i++)
  15. for(int j=1;j<=n+1;j++)
  16. scanf("%lf",&mat[i][j]);
  17. }
  18. void Gauss(){
  19. for(int i=1;i<=n;i++){
  20. int now=i;
  21. for(int j=i+1;j<=n;j++){
  22. if(fabs(mat[j][i])>fabs(mat[now][i]))
  23. now=j;
  24. }
  25. for(int j=1;j<=n+1;j++)
  26. swap(mat[now][j],mat[i][j]);
  27. for(int j=n+1;j>=i;j--)//line
  28. for(int k=i+1;k<=n;k++)//row
  29. mat[k][j]-=mat[k][i]/mat[i][i]*mat[i][j];
  30. }
  31. for(int i=n;i>=1;i--){
  32. for(int j=i+1;j<=n;j++)
  33. mat[i][n+1]-=mat[i][j]*mat[j][n+1];
  34. mat[i][n+1]/=mat[i][i];
  35. }
  36. }
  37. void Print_Solution(){
  38. for(int i=1;i<=n;i++){
  39. if(fabs(mat[i][i])<EPS){
  40. puts("No Solution");
  41. return;
  42. }
  43. }
  44. for(int i=1;i<=n;i++){
  45. printf("%.2lf\n",mat[i][n+1]+EPS);
  46. }
  47. }
  48. }DATA;
  49. int main(){
  50. DATA.INIT();
  51. DATA.Gauss();
  52. DATA.Print_Solution();
  53. return 0;
  54. }
添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注