Advertisement
Guest User

Untitled

a guest
Nov 14th, 2019
136
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.05 KB | None | 0 0
  1. #include <iostream>
  2. #include <cstdio>
  3. #include <cmath>
  4.  
  5. double Delta = 0.01;
  6. /*
  7. -1.7
  8. -1.73
  9. -1.729
  10. -1.7291
  11. -1.72912
  12. -1.729117
  13. -1.7291169
  14.  
  15. */
  16.  
  17. double Round(double X, double delta)
  18. {
  19. if(delta <= 1E-9)
  20. {
  21. std::wcout << "Неверное задание точности округления\n";
  22. return 0;
  23. }
  24. if(X > 0.0)
  25. return delta * long((X / delta) + 1.0 / 2);
  26. else
  27. return delta * long((X / delta) - 1.0 / 2);
  28. }
  29.  
  30. double F(double x)
  31. {
  32. return cos(x*x) - 10 * x;
  33. }
  34.  
  35. double F1(double x)
  36. {
  37. return -2*x * sin(x * x) - 10;
  38. }
  39.  
  40. double newton(double x0, double eps, int &n)
  41. {
  42. double y, y1, dx;
  43. n = 0;
  44. y = F(x0); // скорость и результаты
  45. //y = Round(F(x0), Delta); //чувствительность к ошибкам
  46.  
  47. if (y == 0.0)
  48. return x0;
  49.  
  50. y1 = F1(x0); // скорость и результаты
  51. //y1 = Round(F1(x0), Delta); //чувствительность к ошибкам
  52.  
  53. if (y1 == 0.0) {
  54. std::wcout << "Производная обратилась в ноль\n";
  55. return 0;
  56. }
  57.  
  58. dx = y / y1;
  59. x0 -= dx;
  60. n++;
  61.  
  62. while(fabs(dx) > eps)
  63. {
  64. y = F(x0);
  65. //y = Round(F(x0), Delta);
  66. if (y == 0.0)
  67. return x0;
  68.  
  69. y1 = F1(x0);
  70. //y1 = Round(F1(x0), Delta); //чувствительность к ошибкам
  71. if (y1 == 0.0) {
  72. std::wcout << "Производная обратилась в ноль\n";
  73. return 0;
  74. }
  75.  
  76. dx = y / y1;
  77. x0 -= dx;
  78. n++;
  79. }
  80.  
  81. return Round(x0, eps);
  82. }
  83.  
  84. int main() {
  85.  
  86. int N;
  87. double eps = 0.1;
  88. double res;
  89. const double x = 0.0999950;
  90.  
  91. for(int i = 0; i < 7; i++)
  92. {
  93. res = newton(0.7, eps, N);
  94. printf("F(x) = 0 => x = %.7f\n"
  95. "x* - x = %.7f\n"
  96. "N(EPS) = %u(%.7f)\n\n",
  97. res, fabs(res - x), N, eps);
  98. eps /= 10;
  99. }
  100.  
  101. return 0;
  102. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement