Facebook
From Mature Matamata, 6 Years ago, written in C++.
Embed
Download Paste or View Raw
Hits: 251
  1. #include <iostream>
  2. #include<math.h>
  3.  
  4. using namespace std;
  5.  
  6. double funkcja_matematyczna1(double x)
  7. {
  8.    return (pow(x, 3) - (3 * pow(x, 2)) + ((2 * x) - 6));
  9. }
  10. double funkcja_matematyczna2(double x)
  11. {
  12.  
  13.         return (pow(x, 3) - (3 * pow(x, 2)) + ((3 * x) - 7));
  14. }
  15. double funkcja_matematyczna3(double x)
  16. {
  17.        
  18.         return (pow(x, 3) - (6 * pow(x, 2)) + ((8 * x) - 2));
  19. }
  20.  
  21. double algorytm_polwienia(double(*fun)(double), double a, double b, double epsilon)
  22. {
  23.  
  24.          double c;
  25.  
  26.                 while (fabs(a - b) > epsilon)
  27.                 {
  28.                         c = ((a + b) / 2.0);
  29.                        
  30.                         if (fabs(fun(c)) < epsilon)
  31.                         {
  32.                                 break;
  33.                         }
  34.  
  35.                         if (fun(a) * fun(c) < 0)
  36.                         {
  37.                                 b = c;
  38.                         }
  39.                         else
  40.                         {
  41.                                 a = c;
  42.                         }
  43.                 }
  44.  
  45.                 return c;
  46.  
  47.  
  48.         }
  49.  
  50.  
  51.  
  52.  
  53. double regula_falsi(double(*fun)(double), double a, double b, double epsilon)
  54. {
  55.  
  56.         double long c;
  57.  
  58.                 while (fabs(a - b) > epsilon)
  59.                 {
  60.                         c= ((a*fun(b) - b*fun(a)) / (fun(b) - fun(a)));
  61.  
  62.                         if (fabs(fun(c)) < epsilon)
  63.                         {
  64.                                 break;
  65.                         }
  66.  
  67.                         if (fun(a) * fun(c) < 0)
  68.                         {
  69.                                 b = c;
  70.                         }
  71.                         else
  72.                         {
  73.                                 a = c;
  74.                         }
  75.                 }
  76.  
  77.                 return (double)c;
  78.         }
  79.  
  80.        
  81. int main()
  82. {  
  83.        
  84.         double a;
  85.         double b;
  86.         double epsilon;
  87.  
  88.  
  89.         cout << ("Sugierowany przedzial dla moich funkcji to <-18;18>") << endl;
  90.  
  91.         cout << ("Wprowadz poczatek przedzialu: ");
  92.         cin >> a;
  93.  
  94.         cout << ("Wprowadz koniec przedzialu: ");
  95.         cin >> b;
  96.  
  97.         cout << ("Wprowadz epsilon");
  98.         cin >> epsilon;
  99.  
  100.        
  101.  
  102.         double(*wsk_fun)(double) = funkcja_matematyczna1;
  103.  
  104.         cout << ("pow(x, 3) - (3 * pow(x, 2)) + ((2 * x) - 6)") << endl;
  105.         cout << ("Miejsce zerowe funckji (polowienie) : ") << algorytm_polwienia(wsk_fun, a, b, epsilon)<<endl;
  106.         cout << ("Miejsce zerowe funkcji (falsi): ") << regula_falsi(wsk_fun, a, b, epsilon) << endl;
  107.        
  108.  
  109.         wsk_fun = funkcja_matematyczna2;
  110.         cout << endl;
  111.  
  112.         cout << ("pow(x, 3) - (3 * pow(x, 2)) + ((3 * x) - 7)") << endl;
  113.         cout << ("Miejsce zerowe funckji (polowienie) : ") << algorytm_polwienia(wsk_fun, a, b, epsilon) << endl;
  114.         cout << ("Miejsce zerowe funkcji (falsi): ") << regula_falsi(wsk_fun, a, b, epsilon) << endl;
  115.        
  116.  
  117.         wsk_fun = funkcja_matematyczna3;
  118.         cout << endl;
  119.  
  120.         cout << ("pow(x, 3) - (6 * pow(x, 2)) + ((8 * x) - 2)") << endl;
  121.         cout << ("Miejsce zerowe funckji (polowienie) : ") << algorytm_polwienia(wsk_fun, a, b, epsilon) << endl;
  122.         cout << ("Miejsce zerowe funkcji (falsi): ") << regula_falsi(wsk_fun, a, b, epsilon) << endl;
  123.        
  124. }
  125.  
  126.