Advertisement
cacodemon665

Lab 4 OOM

Dec 19th, 2019
111
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.01 KB | None | 0 0
  1. #include <iostream>
  2. #include <cmath>
  3.  
  4. typedef double (*func)(double);
  5.  
  6. double MP2(double x0, double h, double eps, func F) {
  7.     double x1 = x0 - h;
  8.     double x2 = x0;
  9.     double x3 = x0 + h;
  10.  
  11.     double y1 = F(x1);
  12.     double y2 = F(x2);
  13.     double y3 = F(x3);
  14.  
  15.     if (y1 - 2 * y2 + y3 <= 0) {
  16.         std::cerr << "Invalid argument.";
  17.         return 0;
  18.     }
  19.  
  20.     double zm;
  21.  
  22.     do {
  23.         double z1 = x1 - x3;
  24.         double z2 = x2 - x3;
  25.  
  26.         double p = ((y1 - y3) * z2 - (y2 - y3) * z1) / (z1 * z2 * (z1 - z2));
  27.         double q = ((y1 - y3) * z2 * z2 - (y2 - y3) * z1 * z1) / (z1 * z2 * (z2 - z1));
  28.  
  29.         zm = -q / (2 * p);
  30.  
  31.         x1 = x2;
  32.         x2 = x3;
  33.  
  34.         y1 = y2;
  35.         y2 = y3;
  36.  
  37.         x3 = x3 + zm;
  38.  
  39.         y3 = F(x3);
  40.     } while (fabs(zm) >= eps);
  41.  
  42.     return x3 + zm;
  43. }
  44.  
  45. double F(double x)
  46. {
  47.     return pow(sin(x), 2) + cos(x); // !!!
  48. }
  49.  
  50. int main() {
  51.     // !!!
  52.     std::cout << "Result: " << MP2(3, 0.1, 1e3, F) << std::endl;
  53.  
  54.     return 0;
  55. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement