Całkowanie numeryczne - metoda trapezów

Bash, C, C++, Java, PHP, Ruby, GTK, Qt i wiele innych - wszystko tutaj.
patryk007@vp.pl

Całkowanie numeryczne - metoda trapezów

Post autor: patryk007@vp.pl »

Mam pytanie co do metody trapezów przy liczeniu pola pod wielomianem. Idea jest mi chyba znana. "Chyba", bo nie rozumiem czegoś.

Wg tej strony algorytm jest taki (przy dokładności podziału na tylko 3 części):

Kod: Zaznacz cały

dx * (f( x0 ) / 2 + f( x1 ) + f( x2 ) + f( x3 ) / 2)
Gdzie tu wzór na pole trapezu?!

Spróbowałem to zaimplementować http://wklej.org/id/55427/. Postanowiłem olać wszystkie algorytmy opisane na stronach, liczyłem tylko pola prostokącików pod wielomianem (widocznie tylko tak mi się zdaje) i za każdym razem, gdy porównywałem wynik z KmPlot'em moje liczone całki były zawsze mniejsze od tych poprawnych o połowę! Na jakiejś stronie wyczytałem, że trzeba dodatkowo wziąć skrajne wartości (u mnie w kodzie oznaczone jako a i b) i policzyć z nich

Kod: Zaznacz cały

(b-a)/dx
(20. linia kodu).

Dlaczego?! Dlaczego nie wystarczy zsumować wszystkich trapezów pod wielomianem?! Czegoś tu nie rozumiem. Ktoś wie skąd to (b-a)/dx?
Awatar użytkownika
Struchu
Serdeczny Borsuk
Serdeczny Borsuk
Posty: 116
Rejestracja: 23 mar 2008, 19:58
Płeć: Mężczyzna
Wersja Ubuntu: 11.04
Środowisko graficzne: GNOME
Architektura: x86

Odp: Całkowanie numeryczne - metoda trapezów

Post autor: Struchu »

Ten wzór jest de facto tzw. złożonym wzorem trapezów (przy podziale wyjściowego przedziału na 3 równe części i zastosowanie do każdej z nich wzoru trapezów, a następnie zsumowaniu wszystkich otrzymanych wyników - czyli tak, tylko sumujemy pola wszystkich trapezów pod wielomianem).

W wersji "podstawowej" ta kwadratura na przedziale <a, b> dla pewnej funkcji f ma postać:

Q(f) = (b-a)*(f(a) + f(b))/2

co jest niczym innym jak wzorem na pole trapezu.

I możesz mi jeszcze wyjaśnić, czemu obliczeń numerycznych dokonujesz na intach? Możliwe, że gdzieś po prostu masz dzielenie całkowite a nie rzeczywiste, i dlatego wychodzi dwa razy mniejsze.
Ma zielone, kocie oczy...
p4wcio
Piegowaty Guziec
Piegowaty Guziec
Posty: 4
Rejestracja: 22 lut 2009, 12:38
Płeć: Mężczyzna
Wersja Ubuntu: 8.04
Środowisko graficzne: GNOME

Odp: Całkowanie numeryczne - metoda trapezów

Post autor: p4wcio »

Kod: Zaznacz cały

double dx = 0.01 //dokladnosc
//fcja f1 zwraca wartosc funkcji dla zadanego argumentu

double calka_trapez() {

    double S = 0 ;

    

    for(double i = 0; i <= n-dx; i += dx)

        S += abs((f1(i)+f1(i+dx))/2*dx) ;
    
    return S ;

}
Metoda trapezów u mnie działa bez zarzutu :).
ODPOWIEDZ

Wróć do „Programowanie”

Kto jest online

Użytkownicy przeglądający to forum: Obecnie na forum nie ma żadnego zarejestrowanego użytkownika i 13 gości