Advertisement
Wojtekd

Bisekcja i Sqrt(2)

Dec 6th, 2016
78
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.09 KB | None | 0 0
  1. /* sqrt 2
  2. #include <iostream>
  3. #include <cstdlib>
  4.  
  5. #define R_DEPTH_MAX 50
  6.  
  7. double f(double x)
  8. {
  9.     // d --> glebokosc rekurencji
  10.     static int d = 0;
  11.     d++;
  12.     if (d >= R_DEPTH_MAX) return 0;
  13.     return 1 / (2 + f(x));
  14. }
  15.  
  16. int main()
  17. {
  18.     double sqrt2 = f(1.0);
  19.  
  20.     std::cout << "zakonczono liczenie: " << std::endl;
  21.     std::cout << sqrt2;
  22.  
  23.     system("pause");
  24.  
  25.     return 0;
  26. }
  27. */
  28.  
  29. #include <iostream>
  30. #include <cstdlib>
  31.  
  32. #define R_DEPTH_MAX 40
  33.  
  34. typedef double(*function_ptr)(double);
  35.  
  36. double f2(double x)
  37. {
  38.     return sin(x);
  39. }
  40. double f(double x)
  41. {
  42.     return 0.5 * exp(x) - 5*x + 2;
  43. }
  44.  
  45. double bisection(double A, double B, function_ptr f)
  46. {
  47.     double midpoint = (A + B) / 2;
  48.  
  49.     // d --> glebokosc rekurencji
  50.     static int d = 0;
  51.     d++;
  52.     if (d >= R_DEPTH_MAX) return midpoint;
  53.  
  54.     if (f(A)*f(midpoint) >= 0)
  55.     {
  56.         A = midpoint;
  57.     }
  58.     if (f(B)*f(midpoint) >= 0)
  59.     {
  60.         B = midpoint;
  61.     }
  62.     return bisection(A, B, f);
  63. }
  64.  
  65. int main()
  66. {
  67.  
  68.     double x0 = bisection(2, 4, f2);
  69.  
  70.     std::cout << "zakonczono liczenie: " << std::endl;
  71.     std::cout << x0 << std::endl;
  72.  
  73.     system("pause");
  74.  
  75.     return 0;
  76. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement