Advertisement
daniv1

Untitled

Dec 9th, 2017
136
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.79 KB | None | 0 0
  1.  
  2.  
  3. #include "stdafx.h"
  4.  
  5. #include <iostream>
  6.  
  7. using namespace std;
  8.  
  9. float f(double x)
  10.  
  11. {
  12.  
  13.     return x*x - 4;
  14.  
  15. }
  16.  
  17. double fp(double x, double d) // Перша похідна
  18. {
  19.     return (f(x + d) - f(x)) / d;
  20. }
  21.  
  22. double f2p(double x, double d) // Друга похідна
  23. {
  24.     return (f(x + d) + f(x - d) - 2 * f(x) )/ (d * d);
  25. }
  26.  
  27.  
  28. int _tmain(int argc, _TCHAR* argv[])
  29.  
  30. {
  31.  
  32.     int  i = 0;
  33.  
  34.     double x0, xn;
  35.  
  36.     double a, b, eps;
  37.     i = 0;
  38.  
  39.     std::cout << "Please input [a;b]\n=>";
  40.  
  41.     std::cin >> a >> b; // вводим границы отрезка, на котором будем искать корень
  42.     std::cout << "\nPlease input epsilon\n=>";
  43.     std::cin >> eps; // вводим нужную точность вычислений
  44.     double d = eps / 1000;
  45.     if (a > b) // если пользователь перепутал границы отрезка, меняем их местами
  46.  
  47.     {
  48.  
  49.         x0 = a;
  50.  
  51.         a = b;
  52.  
  53.         b = x0;
  54.  
  55.     }
  56.  
  57.     if (f(a)*f(b) > 0) {
  58.  
  59.         std::cout << "\nError! No roots in this interval\n";
  60.         system("pause");
  61.         exit;
  62.     }
  63.  
  64.  
  65.  
  66.  
  67.     if (f(a)*f2p(a, d) > 0) x0 = a; // для выбора начальной точки проверяем f(x0)*d2f(x0)>0 ?
  68.  
  69.     else x0 = b;
  70.  
  71.     xn = x0 - f(x0) / fp(x0, d); // считаем первое приближение
  72.  
  73.     std::cout << ++i << "-th iteration = " << xn << "\n";
  74.  
  75.     while (fabs(x0 - xn) > eps) // пока не достигнем необходимой точности, будет продолжать вычислять
  76.  
  77.     {
  78.  
  79.         x0 = xn;
  80.  
  81.         xn = x0 - f(x0) / fp(x0, d); // непосредственно формула Ньютона
  82.  
  83.         std::cout << ++i << "-th iteration = " << xn << "\n";
  84.  
  85.     }
  86.  
  87.     std::cout << "\nRoot = " << xn; // вывод вычисленного корня
  88.     system("pause");
  89.         }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement