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.

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

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 | ![]() | ![]() |
![]() ![]() ![]() ![]() / 2 |
| Tomasz Lubiński | C/C++ | ![]() | ![]() |
![]() ![]() ![]() ![]() / 1 | |
| Tomasz Lubiński | Delphi/Pascal | ![]() | ![]() |
![]() ![]() ![]() ![]() / 2 | |
| Tomasz Lubiński | Java | ![]() | ![]() |
![]() ![]() ![]() ![]() / 3 | |
| Jakub Konieczny | Java Block | ![]() | ![]() |
![]() ![]() ![]() ![]() / 1 | |
| Jakub Konieczny | Python | Python 2.6 | ![]() | ![]() |
![]() ![]() ![]() ![]() / 1 |
Poprawiony: wtorek, 21 czerwca 2011 17:44



/ 2



