fork download
  1. #include <iostream>
  2. #include <cmath>
  3.  
  4. using namespace std;
  5.  
  6. // PRZYKLADOWE DANE
  7. // f(x) = x^2 - 3x + 2
  8. double a = 1.0;
  9. double b = -3.0;
  10. double c = 2.0;
  11.  
  12. // PRZEDZIAL ZAWIERAJACY JEDNO MIEJSCE ZEROWE
  13. double l = 0.0; // zmiana z 'left'
  14. double r = 1.5; // zmiana z 'right'
  15.  
  16. // PARAMETRY METODY BISEKCJI
  17. double epsilon = 0.0001;
  18. int max_iter = 100;
  19.  
  20. // Funkcja kwadratowa
  21. double f(double x)
  22. {
  23. return a * x * x + b * x + c;
  24. }
  25.  
  26. // Metoda bisekcji
  27. double bisekcja(double left, double right)
  28. {
  29. double mid;
  30.  
  31. for (int i = 0; i < max_iter; i++)
  32. {
  33. mid = (left + right) / 2.0;
  34.  
  35. if (fabs(f(mid)) < epsilon)
  36. return mid;
  37.  
  38. if (f(left) * f(mid) < 0)
  39. right = mid;
  40. else
  41. left = mid;
  42. }
  43.  
  44. return (left + right) / 2.0;
  45. }
  46.  
  47. int main()
  48. {
  49. double zero = bisekcja(l, r); // teraz nie ma konfliktu nazw
  50.  
  51. cout << "Przyblizone miejsce zerowe: " << zero << endl;
  52.  
  53. return 0;
  54. }
  55.  
Success #stdin #stdout 0.01s 5288KB
stdin
Standard input is empty
stdout
Przyblizone miejsce zerowe: 0.999939