Facebook
From KarboN, 3 Years ago, written in Plain Text.
This paste is a reply to całki from KarboN - go back
Embed
Viewing differences between całki and Re: całki
\n#include 
#include 
#include 
 
using namespace std;
 
 
double metoda_prostokatow(double x)
{
  return 1.8 * x * x * x + 3.1 * x * x - 8.5 * x + 4;
}
 
double metoda_trapezow(double x)
{
  return 1.8 * x * x * x + 3.1 * x * x - 8.5 * x + 4;
}
 
double metoda_Simpsona(double x)
{
  return 1.8 * x * x * x + 3.1 * x * x - 8.5 * x + 4;
}
 
 
int main()
{
  const int N = 1000; //liczba punktów/prostokątów podziałowych
  double xp,xk,s,dx,sT,sS,x;
  int i,j,k;
 
  cout << setprecision(3)      // 3 cyfry po przecinku
       << fixed;               // format stałoprzecinkowy
 
  cout << "------------------------------------------------------\n";
  cout << "Obliczanie calki oznaczonej za pomoca wybranych metod\n"
          "------------------------------------------------------\n"
          "1.8 * x * x * x + 3.1 * x * x - 8.5 * x + 4\n\n"
          "Podaj poczatek przedzialu calkowania\n\n"
          "xp = ";
  cin >> xp;
  cout << "\nPodaj koniec przedzialu calkowania\n\n"
          "xk = ";
  cin >> xk;
  cout << endl;
 
  sT = 0;
  dx = (xk - xp) / N;
  for(j = 1; j < N; j++) sT += metoda_prostokatow(xp + j * dx);
  sT = (sT + (metoda_prostokatow(xp) + metoda_prostokatow(xk)) / 2) * dx;
 
  cout << "Wartosc dokladna calki wynosi: " << setw(7) << sT
       << endl << endl;
 
  cout << "Metoda prostokatow z niedomiarem: \n"; // Tu pewnie w pętli trzeba dać iterator = 0, a przy porównywaniu < N-1
//
 
  cout << "Metoda prostokatow z nadmiarem: \n"; // Tu pewnie w pętli musi być iterator = 1, a przy porównywaniu < N
//
 
  s = 0;
  dx = (xk - xp) / (const int)N;
  for(i = 1; i < N; i++)
    s += metoda_trapezow(xp + i * dx);
  s *= dx;
  cout << "\nMetoda trapezow: \n"; // Jest tu jakiś mały błąd, bo źle liczy
  cout << "Wartosc dokladna calki wynosi: " << setw(7) << s
  << endl << endl;
 
  s = 0; sS = 0;
  dx = (xk - xp) / N;
  for(k = 1; k <= N; k++)
  {
    x = xp + k * dx;
    sS += metoda_Simpsona(x - dx / 2);
    if(k < N)
        s += metoda_Simpsona(x);
  }
  s = dx / 6 * (metoda_Simpsona(xp) + metoda_Simpsona(xk) + 2 * s + 4 * sS);
  cout << "Metoda Simpsona: \n";
  cout << "Wartosc calki wynosi: " << setw(7) << s
       << endl << endl;
 
 
  system("pause");
  return 0;
}