SHARE
TWEET

Untitled

a guest Nov 14th, 2019 96 Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  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. }
RAW Paste Data
We use cookies for various purposes including analytics. By continuing to use Pastebin, you agree to our use of cookies as described in the Cookies Policy. OK, I Understand
 
Top