StartAlgorytmyProcedury numeryczneCałkowanie numeryczne - metoda trapezów
Baza Wiedzy
Wersja offline serwisu przeznaczona na urządzenia z systemem Android.

Darowizny
darowiznaWspomóż rozwój serwisu


Nagłówki RSS
Kanał artykuły
Kanał implementacje
Kanał komentarze
Kanał forum


Bookmarki









Sonda
Implementacji w jakim języku programowania poszukujesz?
 
Całkowanie numeryczne - metoda trapezów
Ocena użytkowników:++++- / 14
SłabyŚwietny 
Wpisany przez Tomasz Lubiński
niedziela, 27 maja 2007 19:48
Załóżmy, że chcemy obliczyć całkę z funkcji f(x) w przedziale <xp; xk>. Definicja całki oznaczonej Riemana, mówi nam, że wartość całki równa jest sumie pól obszarów pod wykresem krzywej w zadanym przedziale całkowania. Sumę taką możemy obliczyć w przybliżeniu dzieląc obszar całkowania na n równych części. Dla każdej takiej części możemy wyznaczyć trapez, który w przybliżeniu będzie odpowiadał polu obszaru pod wykresem krzywej.
Całkowanie numeryczne - metoda trapezów

Jak już wspomnieliśmy przedział całkowania <xp; xk> podzielimy na n równych części. Szerokość każdej z nich wynosić będzie zatem:
dx = ( xk - xp ) / n.
Taka też będzie wysokość każdego z trapezów. Podstawy i-tego trapezu będą wynosić odpowiednio:
f( xi-1 ) oraz f( xi ) dla i = 1, 2, ..., n, gdzie xi = xp + i*dx.
Pole i-tego trapezu zgodnie ze wzorem wynosić będzie:
Pi = ((f( xi-1 ) + f( xi )) / 2) * dx
Całkę w zadanym przedziale uzyskamy dodając do siebie pola wszystkich wyznaczonych trapezów, wynosić będzie ona zatem:
((f( x0 ) + f( x1 )) / 2) * dx + ((f( x1 ) + f( x2 )) / 2) * dx + ... + ((f( xn-1 ) + f( xn )) / 2) * dx =
= (dx/2) * (f( x0 ) + 2f( x1 ) + 2f( x2 ) + ... + 2f( xn-1 ) + f( xn )) =
= dx * (f( x0 ) / 2 + f( x1 ) + f( x2 ) + ... + f( xn-1 ) + f( xn ) / 2)

W praktyce w pętli dodajemy do siebie wszystkie wartości funkcji od 1 do n-1, a potem dwie wartości brzegowe podzielone przez dwa. Całość mnożymy przez dx i otrzymujemy w ten sposób wynik.

Takie postępowanie daje wyniki lepsze niż całkowanie metodą prostokątów, ale i tutaj otrzymany wynik nie będzie zawsze idealny - zakładamy przecież, że funkcja w obrębie przedziałów jest liniowa, co w ogólności nie musi być prawdą. Na schemacie powyżej widać, że metoda dość dobrze (ale nie idealnie) odwzorowywuje naszą przykładową funkcję w dwóch pierwszych przedziałach, natomiast w ostatnim przedziale widać wyraźnie różnicę pomiędzy polem pod wykresem a wyznaczonym trapezem. Warto zauważyć, iż im większa liczba przedziałów n z tym większą dokładnością wyznaczymy interesującą nas całkę.

Przykład:
Obliczymy przybliżoną wartość całki dla funckji f(x) = x2 + 3 w przedziale <2, 5> z dokładnością n = 3.
Obliczmy najpierw szerokość przedziału dx = ( xk - xp ) / n = (5 - 2) / 3 = 3 / 3 = 1.
Teraz obliczymy całkę.
dx * (f( x0 ) / 2 + f( x1 ) + f( x2 ) + f( x3 ) / 2) = dx * (f(2 + 0*1)/2 + f(2 + 1*1) + f(2 + 2*1) + f(2 + 3*1)/2) = dx * (f(2)/2 + f(3) + f(4) + f(5)/2) = 1 * (3.5 + 12 + 19 + 14) = 48.5.
Zatem przybliżona wartość całki wynosi 48.5



Autor Język programowania Komentarz Otwórz Pobierz Ocena
Tomasz Lubiński C# MS Visual Studio .net
Implementacja w C#
Implementacja w C#
++++- / 2
Tomasz Lubiński C/C++
Implementacja w C/C++
Implementacja w C/C++
++++- / 1
Tomasz Lubiński Delphi/Pascal
Implementacja w Delphi/Pascal
Implementacja w Delphi/Pascal
++++- / 2
Tomasz Lubiński Java
Implementacja w Java
Implementacja w Java
+++-- / 3
Jakub Konieczny Java Block
Implementacja w Java Block
Implementacja w Java Block
++++- / 1
Jakub Konieczny Python Python 2.6
Implementacja w Python
Implementacja w Python
++++- / 1
 
Dodaj własną implementację tego algorytmu
  • Zaloguj się na stronie
Plik:
Język programowania:
Komentarz:
  By móc dodać implementacje zaloguj się na stronie



Poprawiony: wtorek, 21 czerwca 2011 17:44

Dodaj komentarz

Kod antysapmowy
Odśwież