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 |
©2024 mgr Jerzy Wałaszek
|
SPIS TREŚCI |
|
Podrozdziały |
W metodzie prostokątów (ang. rectangular integration) korzystamy z definicji całki oznaczonej Riemanna , w której wartość całki interpretowana jest jako suma pól obszarów pod wykresem krzywej w zadanym przedziale całkowania [xp,xk]. Sumę tę przybliżamy przy pomocy sumy pól odpowiednio dobranych prostokątów. Sposób postępowania jest następujący:
Przedział całkowania [xp,xk] dzielimy na n równo odległych punktów x1,x2,...,xn. Punkty te wyznaczamy w prosty sposób wg wzoru:
dla i =
1,2,...,n
Obliczamy odległość między dwoma sąsiednimi punktami - będzie to podstawa każdego prostokąta:
Dla
każdego wyznaczonego w ten sposób punktu obliczamy wartość funkcji
Obliczamy sumę iloczynów wyznaczonych wartości funkcji przez odległość dx między dwoma sąsiednimi punktami - da to sumę pól poszczególnych prostokątów ograniczonych wykresem funkcji:
a po wyprowadzeniu wspólnego czynnika przed nawias:
Otrzymana suma jest przybliżoną wartością całki oznaczonej funkcji f(x) w przedziale [xp,xk].
Przykład:
Obliczymy ręcznie przybliżoną wartość całki oznaczonej z funkcji
Przedział podzielimy na n = 4 punkty:
Odległość między dwoma sąsiednimi punktami wynosi:
Dla każdego z wyznaczonych punktów obliczamy wartość funkcji
Obliczamy sumę pól prostokątów:
Dokładna wartość takiej całki oznaczonej wynosi wg tablic:
Zatem popełniliśmy błąd równy: 2 - 1,8961 = 0,1039, co stanowi nieco ponad 5% wartości dokładnej. W sumie nie jest to zły wynik, zważywszy na ilość wykonanych przez nas rachunków. Jeśli chcemy zwiększyć dokładność, to musimy zsumować więcej prostokątów, ale to zostawimy już komputerom.
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: | s ← s·dx |
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 sumę s musimy jeszcze pomnożyć przez szerokość podstawy prostokątów, czyli odległość dx Po tej operacji s zawiera wartość przybliżoną całki. Zwracamy ją użytkownikowi i kończymy algorytm.
Prezentowane poniżej programy wyliczają całkę oznaczoną funkcji
C++//**************************************************** //** Obliczanie całki oznaczonej metodą prostokątó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/prostokątó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 prostokatow\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 *= dx; cout << "Wartosc calki wynosi : " << setw(8) << s << endl << endl; system("pause"); return 0; } |
Pascal//**************************************************** //** Obliczanie całki oznaczonej metodą prostokątów ** //** ---------------------------------------------- ** //** (C)2004 mgr Jerzy Wałaszek I LO w Tarnowie ** //**************************************************** program int_rect; //******************************* //** Tutaj definiujemy funkcję ** //******************************* function f(x : real) : real; begin f := x * x + 2 * x; end; //******************** //** Program główny ** //******************** const N = 1000; //liczba punktów/prostokątów podziałowych var xp,xk,s,dx : double; i : integer; begin writeln('Obliczanie calki oznaczonej'); writeln('za pomoca metody prostokatow'); 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 do s := s + f(xp + i * dx); s := s * dx; writeln('Wartosc calki wynosi : ',s:8:3); writeln; writeln('Nacisnij klawisz Enter...'); readln; end. |
Basic'**************************************************** '** Obliczanie całki oznaczonej metodą prostokątów ** '** ---------------------------------------------- ** '** (C)2006 mgr Jerzy Wałaszek I LO w Tarnowie ** '**************************************************** Declare Function f(ByVal x As Double) As Double '******************** '** Program główny ** '******************** Const N = 1000 'liczba punktów/prostokątów podziałowych Dim As Double xp, xk, s, dx Dim i As Integer Print "Obliczanie calki oznaczonej" Print "za pomoca metody prostokatow" Print "----------------------------" Print "(C)2006 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 : s += f(xp + i * dx) : Next s *= dx Print Using "Wartosc calki wynosi : ####.###"; s ' Gotowe Print Print "KONIEC. Nacisnij dowolny klawisz..." Sleep End '******************************* '** Tutaj definiujemy funkcję ** '******************************* Public Function f(ByVal x As Double) As Double Return x * x + 2 * x End Function |
JavaScript<html> <head> <title>Całkowanie numeryczne metodą prostokątów</title> </head> <body> <script language="JavaScript"> //**************************************************** //** Obliczanie całki oznaczonej metodą prostokątów ** //** ---------------------------------------------- ** //** (C)2004 mgr Jerzy Wałaszek I LO w Tarnowie ** //**************************************************** //******************************* //** Tutaj definiujemy funkcję ** //******************************* function f(x) { return(x * x + 2 * x); } function js_rectangle() { var N = 1000; //liczba punktów/prostokątów podziałowych var xp,xk,s,dx,i,t; xp = parseFloat(document.frm_rectangle.xp_inp.value); xk = parseFloat(document.frm_rectangle.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 *= dx; t = Math.floor(s * 1000) / 1000; }; document.getElementById("t_out").innerHTML = t; } </script> <form method="POST" name="frm_rectangle" 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_rectangle();" 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 prostokątó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,335 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 ©2024 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:
Serwis wykorzystuje pliki cookies. Jeśli nie chcesz ich otrzymywać, zablokuj je w swojej przeglądarce.
Informacje dodatkowe.