StoneHaos

Sofa

Feb 7th, 2021
509
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. #include <iostream>
  2. #include <math.h>
  3.  
  4. using namespace std;
  5.  
  6. double f(double x) {
  7.     return 0.5 * x * x - sin(x);
  8. }
  9.  
  10. void Sven(double x0, double h, double &a, double &b) {
  11.     int k = 1;
  12.     double x1, x2;
  13.     if (f(x0 - h) >= f(x0) && f(x0) >= f(x0 + h)) {
  14.         x1 = x0 + h;
  15.     }
  16.     else if (f(x0 - h) <= f(x0) && f(x0) <= f(x0 + h)) {
  17.         x1 = x0 - h;
  18.         h = -h;
  19.     }
  20.     if (!(f(x0 - h) >= f(x0) && f(x0) <= f(x0 + h))) {
  21.         x2 = x1;
  22.         x1 = x0;
  23.         do {
  24.             x0 = x1;
  25.             x1 = x2;
  26.             x2 = x1 + pow(2.0, 1.0 * k) * h;
  27.         } while (f(x2) <= f(x1));
  28.         if (h > 0) {
  29.             a = x0;
  30.             b = x2;
  31.         }
  32.         else {
  33.             a = x2;
  34.             b = x0;
  35.         }
  36.     }
  37.     else {
  38.         a = x0 - h;
  39.         b = x0 + h;
  40.     }
  41. }
  42.  
  43. double trihotomia(double a, double b, double eps) {
  44.     double m1, m2;
  45.     while (b - a > eps) {
  46.         m1 = a + (b - a) / 3;
  47.         m2 = b - (b - a) / 3;
  48.         if (f(m1) > f(m2))
  49.             a = m1;
  50.         else if (f(m1) < f(m2))
  51.             b = m2;
  52.         else {
  53.             a = m1;
  54.             b = m2;
  55.         }
  56.     }
  57.     return a;
  58. }
  59.  
  60. int main(void) {
  61.     double a, b;
  62.     double n, h, eps;
  63.     cout << "Input x0: ";
  64.     cin >> n;
  65.     cout << "Input h: ";
  66.     cin >> h;
  67.     cout << "Input eps: ";
  68.     cin >> eps;
  69.     Sven(n, h, a, b);
  70.     double result = trihotomia(a, b, eps);
  71.     cout << a << " " << b << endl;
  72.     cout << result << endl;
  73.     return 0;
  74. }
RAW Paste Data