[C++] Całka metoda trapezów, błąd względny obliczeń.

zabsontoziomal
Użytkownik
Użytkownik
Posty: 1
Rejestracja: 28 gru 2015, o 12:01
Płeć: Mężczyzna
Lokalizacja: Szczebrzow

[C++] Całka metoda trapezów, błąd względny obliczeń.

Post autor: zabsontoziomal »

Witam, mam napisać program który liczy pole powierzchni danej figury - całkuje pewną funkcję metodą trapezów. No to spoko, umiem to napisać. Mam podawać z klawiatury takie dane jak: przedział początkowy i końcowy xp, xk raz EPSILON czyli względny błąd obliczeń. Ale nie mam pojęcia jak go zrobić w programie. We wszystkim co czytałem o całkach, patrzyłem algorytmy to jedyna rzecz którą można podawać oprócz przedziałów to jest dokładność n.
A na zajęciach zostało mi tylko podane że ten błąd to \(\displaystyle{ \frac{|P_n+P_{n+1}|}{P_n} \le \varepsilon}\) gdzie Pn to kolejne całkowane pole.
Jak mogę to zaaplikować do tego programu?

Kod: Zaznacz cały

#include <iostream>
#include <cstdlib>

using namespace std;

// funkcja do scalkowania
double f1( double x ) { return - x * x - x + 10; }

int main()
{
    float xp, xk, h, calka;
    int n;
    
    // przedzialy
    xp = - 2;
    xk = 1;
    
    // im wieksze n tym wieksza dokladnośc (np. n=1000)
    n = 3;
    
    h =( xk - xp ) /( float ) n;
    
    cout << "krok: h=" << h << endl;
    
    calka = 0;
    for( int i = 1; i < n; i++ )
    {
        calka += f1( xp + i * h );
    }
    calka += f1( xp ) / 2;
    calka += f1( xk ) / 2;
    calka *= h;
    
    cout << "Wynik calkowania: " << calka << endl;
    
    system( "PAUSE" );
    
    return 0;
}
Ostatnio zmieniony 29 gru 2015, o 11:10 przez Dasio11, łącznie zmieniany 1 raz.
Powód: Poprawa wiadomości.
Awatar użytkownika
Dasio11
Moderator
Moderator
Posty: 10225
Rejestracja: 21 kwie 2009, o 19:04
Płeć: Mężczyzna
Lokalizacja: Wrocław
Podziękował: 40 razy
Pomógł: 2362 razy

[C++] Całka metoda trapezów, błąd względny obliczeń.

Post autor: Dasio11 »

zabsontoziomal pisze:A na zajęciach zostało mi tylko podane że ten błąd to \(\displaystyle{ \frac{|P_n+P_{n+1}|}{P_n} \le \varepsilon}\) gdzie Pn to kolejne całkowane pole.
Na pewno? Wydaje mi się, że tam powinien być minus.

Wtedy powinieneś po kolei obliczać przybliżenia całki dla \(\displaystyle{ n = 1, 2, 3, 4, \ldots}\) i na każdym kroku sprawdzać, czy \(\displaystyle{ \frac{|P_n-P_{n+1}|}{P_n} \le \varepsilon.}\) W pierwszym kroku, w którym ta nierówność będzie spełniona, można się zatrzymać i zwrócić wynik.
ODPOWIEDZ