Serwis Edukacyjny w I-LO w Tarnowie ![]() Materiały dla uczniów liceum |
Wyjście Spis treści Wstecz Dalej
Autor artykułu: mgr Jerzy Wałaszek |
©2023 mgr Jerzy Wałaszek
|
SPIS TREŚCI |
|
Podrozdziały |
Opisana w poprzednim rozdziale metoda prostokątów nie jest zbyt dokładna, ponieważ pola użytych w niej prostokątów źle odwzorowują powierzchnię pola pod krzywą (dokładność odwzorowania rośnie wraz ze wzrostem liczby prostokątów). Dużo lepszym rozwiązaniem jest zastosowanie zamiast nich trapezów o wysokości dx i podstawach równych odpowiednio wartości funkcji w punktach krańcowych.. Sama zasada nie zmienia się.
Przedział całkowania
[
dla i =
0,1,2,...,n
Obliczamy odległość między dwoma sąsiednimi punktami - będzie to wysokość każdego trapezu:
Dla każdego wyznaczonego w ten sposób punktu obliczamy wartość
funkcji
Pole pod wykresem funkcji przybliżane jest polami n trapezów. Pole i-tego trapezu obliczamy wg wzoru:
dla i=1,2,...,n
Przybliżona wartość całki jest sumą pól wszystkich otrzymanych w ten sposób trapezów:
czyli
Wyprowadzony na końcu wzór jest podstawą przybliżonego wyliczania całki w metodzie trapezów.
![]() |
Przykład:
Obliczymy ręcznie przybliżoną wartość całki oznaczonej z funkcji
Przedział podzielimy na n+1 = 5 punktów:
Odległość między dwoma sąsiednimi punktami wynosi:
Dla każdego z wyznaczonych punktów obliczamy wartość funkcji
Obliczamy sumę pól trapezów:
Otrzymaliśmy wynik identyczny jak w przypadku metody prostokątów - dlaczego?
xp | - początek przedziału całkowania, xp ∈ R |
xk | - koniec przedziału całkowania, xk ∈ R |
n | - liczba punktów podziałowych, n ∈ N |
f (x) | - funkcja rzeczywista, której całkę liczymy |
s | - przybliżona wartość całki oznaczonej funkcji f (x) w przedziale [xp,xk], s ∈ R |
dx | - odległość między dwoma sąsiednimi punktami podziałowymi, dx ∈ R |
i | - licznik punktów podziałowych, i ∈ N |
K01: | s ← 0 |
K02: | ![]() |
K03: | Dla i = 1,2,...,n : wykonuj: s ← s + f (xp + i ·dx) |
K04: | ![]() |
K05: | Zakończ |
Po odczytaniu informacji o krańcach xp i xk przedziału całkowania ustawiamy sumę s na 0, obliczamy odległość dx pomiędzy sąsiednimi punktami podziałowymi i ustawiamy ich licznik na 1.
Rozpoczynamy pętlę iteracyjną, która wykona się
Po zakończeniu pętli do sumy s dodajemy średnią wartość funkcji na krańcach przedziału i całość przemnażamy przez dx Po tej operacji s zawiera wartość przybliżoną całki. Zwracamy ją użytkownikowi i kończymy algorytm.
C++//**************************************************** //** Obliczanie całki oznaczonej metodą trapezów ** //** ---------------------------------------------- ** //** (C)2004 mgr Jerzy Wałaszek I LO w Tarnowie ** //**************************************************** #include <iomanip> #include <iostream> #include <cstdlib> using namespace std; //******************************* //** Tutaj definiujemy funkcję ** //******************************* double f(double x) { return(x * x + 2 * x); } //******************** //** Program główny ** //******************** int main() { const int N = 1000; //liczba punktów/trapezów podziałowych double xp,xk,s,dx; int i; cout << setprecision(3) // 3 cyfry po przecinku << fixed; // format stałoprzecinkowy cout << "Obliczanie calki oznaczonej\n" " za pomoca metody trapezow\n" "----------------------------\n" "(C)2004 mgr J.Walaszek I LO\n\n" "f(x) = x * x + 2 * x\n\n" "Podaj poczatek przedzialu calkowania\n\n" "xp = "; cin >> xp; cout << "\nPodaj koniec przedzialu calkowania\n\n" "xk = "; cin >> xk; cout << endl; s = 0; dx = (xk - xp) / N; for(i = 1; i < N; i++) s += f(xp + i * dx); s = (s + (f(xp) + f(xk)) / 2) * dx; cout << "Wartosc calki wynosi : " << setw(8) << s << endl << endl; system("pause"); return 0; } |
Pascal//************************************************* //** Obliczanie całki oznaczonej metodą trapezów ** //** ------------------------------------------- ** //** (C)2004 mgr Jerzy Wałaszek I LO w Tarnowie ** //************************************************* program int_trapez; //******************************* //** Tutaj definiujemy funkcję ** //******************************* function f(x : double) : double; begin f := x * x + 2 * x; end; //******************** //** Program główny ** //******************** const N = 1000; //liczba punktów/trapezów podziałowych var xp,xk,s,dx : double; i : integer; begin writeln('Obliczanie calki oznaczonej'); writeln(' za pomoca metody trapezow'); writeln('----------------------------'); writeln('(C)2004 mgr J.Walaszek I LO'); writeln; writeln('f(x) = x * x + 2 * x'); writeln; writeln('Podaj poczatek przedzialu calkowania'); writeln; write('xp = '); readln(xp); writeln; writeln('Podaj koniec przedzialu calkowania'); writeln; write('xk = '); readln(xk); writeln; s := 0; dx := (xk - xp) / N; for i := 1 to N - 1 do s := s + f(xp + i * dx); s := (s + (f(xp) + f(xk)) / 2)* dx; writeln('Wartosc calki wynosi : ',s:8:3); writeln; writeln('Nacisnij klawisz Enter...'); readln; end. |
Basic'************************************************* '** Obliczanie całki oznaczonej metodą trapezów ** '** ------------------------------------------- ** '** (C)2004 mgr Jerzy Wałaszek I LO w Tarnowie ** '************************************************* Declare Function f(x as Double) As Double '******************** '** Program główny ** '******************** const N = 1000 'liczba punktów/trapezów podziałowych Dim As Double xp,xk,s,dx Dim As Integer i Print "Obliczanie calki oznaczonej" Print " za pomoca metody trapezow" Print "----------------------------" Print "(C)2004 mgr J.Walaszek I LO" Print Print "f(x) = x * x + 2 * x" Print Print "Podaj poczatek przedzialu calkowania" Print input "xp = ", xp Print Print "Podaj koniec przedzialu calkowania" Print Input "xk = ", xk Print s = 0 dx = (xk - xp) / N for i = 1 to N - 1: s = s + f(xp + i * dx): Next s = (s + (f(xp) + f(xk)) / 2) * dx print Using "Wartosc calki wynosi : #####.###";s Print Print "Nacisnij klawisz Enter..." Sleep End '******************************* '** Tutaj definiujemy funkcję ** '******************************* function f(x as Double) As Double f = x * x + 2 * x End Function |
JavaScript<html> <head> <title>Całkowanie numeryczne metodą trapezów</title> </head> <body> <script language="JavaScript"> //**************************************************** //** Obliczanie całki oznaczonej metodą trapezów ** //** ---------------------------------------------- ** //** (C)2004 mgr Jerzy Wałaszek I LO w Tarnowie ** //**************************************************** //******************************* //** Tutaj definiujemy funkcję ** //******************************* function f(x) { return(x * x + 2 * x); } function js_trapez() { var N = 1000; //liczba punktów/trapezów podziałowych var xp,xk,s,dx,i,t; xp = parseFloat(document.frm_trapez.xp_inp.value); xk = parseFloat(document.frm_trapez.xk_inp.value); if(isNaN(xp) || isNaN(xk)) t = "<font color=red><b>Popraw dane wejściowe!</b></font>"; else { s = 0; dx = (xk - xp) / N; for(i = 1; i < N; i++) s += f(xp + i * dx); s = (s + (f(xp) + f(xk)) / 2) * dx; t = Math.floor(s * 1000) / 1000; }; document.getElementById("t_out").innerHTML = t; } </script> <form method="POST" name="frm_trapez" style="border: 2px solid #FF9900; padding-left: 4px; padding-right: 4px; padding-top: 1px; padding-bottom: 1px; background-color: #FFFFCC"> <h2 style="text-align: center"> Obliczanie całki oznaczonej<br> za pomocą metody prostokątów </h2> <hr> <p style="text-align: center"> (C)2004 mgr Jerzy Wałaszek I LO w Tarnowie </p> <p style="text-align: center"> Całkowana funkcja: </p> <p style="text-align: center"> <i>f(x) = x<sup>2</sup> + 2x</i> </p> <p style="text-align: center"> Tutaj określ przedział całkowania </p> <p style="text-align: center"> Początek <i>x<sub>p</sub></i> = <input type="text" name="xp_inp" size="20" value="0"> i koniec <i>x<sub>k</sub> </i>= <input type="text" name="xk_inp" size="20" value="1"> </p> <p style="text-align: center"> <input onclick="js_trapez();" type="button" value="Oblicz całkę" name="B1"> </p> <p style="text-align: center"> Wartość całki wynosi </p> <p id="t_out" style="text-align: center">...</p> </form> </body> </html> |
Wynik: |
Obliczanie całki
oznaczonej za pomocą metody trapezów ---------------------------- (C)2006 mgr J.Wałaszek I LO f(x) = x * x + 2 * x Podaj początek przedziału całkowania xp = 0 Podaj koniec przedziału całkowania xk = 1 Wartość całki wynosi : 1,333 KONIEC. Naciśnij dowolny klawisz... |
![]() |
Zespół Przedmiotowy Chemii-Fizyki-Informatyki w I Liceum Ogólnokształcącym im. Kazimierza Brodzińskiego w Tarnowie ul. Piłsudskiego 4 ©2023 mgr Jerzy Wałaszek |
Materiały tylko do użytku dydaktycznego. Ich kopiowanie i powielanie jest dozwolone
pod warunkiem podania źródła oraz niepobierania za to pieniędzy.
Pytania proszę przesyłać na adres email: i-lo@eduinf.waw.pl
Serwis wykorzystuje pliki cookies. Jeśli nie chcesz ich otrzymywać, zablokuj je w swojej przeglądarce.
Informacje dodatkowe.