Facebook
From KarboN, 3 Years ago, written in Plain Text.
Embed
Download Paste or View Raw
Hits: 214
  1.  
  2. #include <iomanip>
  3. #include <iostream>
  4. #include <cstdlib>
  5.  
  6. using namespace std;
  7.  
  8.  
  9. double metoda_prostokatow(double x)
  10. {
  11.   return 1.8 * x * x * x + 3.1 * x * x - 8.5 * x + 4;
  12. }
  13.  
  14. double metoda_trapezow(double x)
  15. {
  16.   return 1.8 * x * x * x + 3.1 * x * x - 8.5 * x + 4;
  17. }
  18.  
  19. double metoda_Simpsona(double x)
  20. {
  21.   return 1.8 * x * x * x + 3.1 * x * x - 8.5 * x + 4;
  22. }
  23.  
  24.  
  25. int main()
  26. {
  27.   const int N = 1000; //liczba punktów/prostokątów podziałowych
  28.   double xp,xk,s,dx,sT,sS,x;
  29.   int i,j,k;
  30.  
  31.   cout << setprecision(3)      // 3 cyfry po przecinku
  32.        << fixed;               // format stałoprzecinkowy
  33.  
  34.   cout << "------------------------------------------------------\n";
  35.   cout << "Obliczanie calki oznaczonej za pomoca wybranych metod\n"
  36.           "------------------------------------------------------\n"
  37.           "1.8 * x * x * x + 3.1 * x * x - 8.5 * x + 4\n\n"
  38.           "Podaj poczatek przedzialu calkowania\n\n"
  39.           "xp = ";
  40.   cin >> xp;
  41.   cout << "\nPodaj koniec przedzialu calkowania\n\n"
  42.           "xk = ";
  43.   cin >> xk;
  44.   cout << endl;
  45.  
  46.   sT = 0;
  47.   dx = (xk - xp) / N;
  48.   for(j = 1; j < N; j++) sT += metoda_prostokatow(xp + j * dx);
  49.   sT = (sT + (metoda_prostokatow(xp) + metoda_prostokatow(xk)) / 2) * dx;
  50.  
  51.   cout << "Wartosc dokladna calki wynosi: " << setw(7) << sT
  52.        << endl << endl;
  53.  
  54.   cout << "Metoda prostokatow z niedomiarem: \n"; // Tu pewnie w pętli trzeba dać iterator = 0, a przy porównywaniu < N-1
  55.  
  56.   cout << "Metoda prostokatow z nadmiarem: \n"; // Tu pewnie w pętli musi być iterator = 1, a przy porównywaniu < N
  57.  
  58.   s = 0;
  59.   dx = (xk - xp) / (const int)N;
  60.   for(i = 1; i < N; i++)
  61.     s += metoda_trapezow(xp + i * dx);
  62.   s *= dx;
  63.   cout << "\nMetoda trapezow: \n"; // Jest tu jakiś mały błąd, bo źle liczy
  64.   cout << "Wartosc dokladna calki wynosi: " << setw(7) << s
  65.   << endl << endl;
  66.  
  67.   s = 0; sS = 0;
  68.   dx = (xk - xp) / N;
  69.   for(k = 1; k <= N; k++)
  70.   {
  71.     x = xp + k * dx;
  72.     sS += metoda_Simpsona(x - dx / 2);
  73.     if(k < N)
  74.         s += metoda_Simpsona(x);
  75.   }
  76.   s = dx / 6 * (metoda_Simpsona(xp) + metoda_Simpsona(xk) + 2 * s + 4 * sS);
  77.   cout << "Metoda Simpsona: \n";
  78.   cout << "Wartosc calki wynosi: " << setw(7) << s
  79.        << endl << endl;
  80.  
  81.  
  82.   system("pause");
  83.   return 0;
  84. }

Replies to całki rss

Title Name Language When
Re: całki KarboN text 3 Years ago.