#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; }