Całka oznaczona.

Do wprowadzenia pojęcia całki oznaczonej wykorzystamy pojęcie funkcji pierwotnej i pojęcie pola pod funkcją. Przez funkcję pierwotną funkcji f(x) rozumiemy taką funkcję F(x), której pochodna jest równa f(x). Np. funkcją pierwotną funkcji f(x)=2x jest funkcja F(x)=x2, ponieważ (x2)’=2x. Wyznaczanie funkcji pierwotnych polega zazwyczaj na odgadywaniu lub wyszukiwaniu odpowiednich funkcji w tablicach. Nas interesuje jednak coś znacznie ważniejszego. Chodzi o uzyskanie głębokiego zrozumienia funkcji pierwotnej, tzn. chcemy zbudować funkcję pierwotną krok po kroku, odwołując się tylko do tego, że jej pochodna wynosi f(x). Chcemy ukształtować to pojęcie w taki sposób, aby uczniowie dostrzegali je w różnych sytuacjach i aby mogli stosować je w swojej działalności matematycznej.

Pokażemy to na przykładzie funkcji f(x)=cos(x). Rysujemy wykres tej funkcji na komputerze, przy pomocy poniższego programu “Funkcja_pierwotna”. Program ten rysuje tylko wykres funkcji f(x), ale zmienimy go tak, że narysuje również wykres funkcji pierwotnej (program znajduje się w pliku calka.zip).

Program Funkcja_pierwotna;
uses graph; var karta,tryb,n,j:integer; x,Dx:real;
function f(x:real):real;
begin
f:=cos(x); {deklaracja funkcji}
end;
begin
karta:=detect; initgraph(karta,tryb,'');
j:=50; setColor(darkGray);
for n:=-320 div j to 320 div j do line(320+n*j,0,320+n*j,479);
{rysowanie układu współrzędnych}
for n:=-240 div j to 240 div j do line(0,240+n*j,639,240+n*j);
setColor(white); line(0,240,639,240); line(320,0,320,479);
x:=-314/j; Dx:=0.001;
repeat
x:=x+Dx;
putPixel(round(x*j+320),round(-f(x)*j+240),lightBlue); {rysowanie wykresu funkcji}
until x>314/j;
readln; closegraph;
end.

Rys.1. Wykres funkcji f(x)=cos(x) w przedziale (-2p, 2p).

Budowanie funkcji pierwotnej do funkcji f(x)=cos(x) rozpoczniemy od punktu -2p=-6.28 zaznaczonego na osi OX - rys.1. W programie jest to wartość -314/j, gdzie j=50. Przyjmijmy, że funkcja pierwotna ma w tym punkcie wartość zero (można przyjąć inną wartość, co nie ma znaczenia dla omawianego sposobu) i obliczmy jej wartość w następnym punkcie x1=x+Dx, czyli w punkcie -6.28+0.001. To będzie najważniejszy moment budowania wykresu funkcji pierwotnej.

Wiemy, że pochodna szukanej funkcji pierwotnej w nowym punkcie x1, wynosi f(x1)=cos(x1). Wartość f(x1), jako pochodna, jest współczynnikiem kierunkowym prostej wzdłuż której przebiega wykres szukanej funkcji pierwotnej w małym otoczeniu punktu x1. Z kolei taki współczynnik kierunkowy informuje, ile przyrasta wartości funkcji na jedną jednostkę przyrostu argumentu. Zatem, na jedną jednostkę przyrostu argumentu, przybyłoby f(x1) wartości szukanej funkcji pierwotnej. My wzięliśmy jednak nie całą jednostkę, tylko Dx przyrostu argumentu, i dla niego przybędzie f(x1).Dx wartości funkcji pierwotnej. To właśnie jest najważniejsze, że wartość funkcji wzrośnie o f(x1).Dx. Konkretnie przybędzie cos(-6.28+0.001) .0.001=0.009 wartości. W taki sposób można obliczać przyrosty funkcji pierwotnej w każdym punkcie, pamiętając, aby dodawać je do wcześniej obliczonych wartości tej funkcji.

Można więc powiedzieć, że w każdym punkcie x zachodzi zależność:

pierwotna:=pierwotna + f(x).Dx,

gdzie znak “:=“ jest symbolem przypisania a nie znakiem równości.

Wpisując do programu wyrażenie: pierwotna:=pierwotna + f(x).Dx,

oraz wyrażenie: putPixel(round(x*j+320),round(-pierwotna*j+240),lightRed);

rysujące punkt funkcji pierwotnej, otrzymujemy wykres funkcji pierwotnej - Rys.2.

Rys.2. Wykres funkcji f(x)=cos(x) oraz wykres jej funkcji pierwotnej y=sin(x).

Z wykresu łatwo odczytać, że funkcją pierwotną do funkcji f(x)=cos(x) jest funkcja y=sin(x). Najważniejsze jednak jest to, że funkcja pierwotna nie została wyszukana na liście pochodnych funkcji, ale została zbudowana krok po kroku, na podstawie głębokiej analizy pojęcia pochodnej funkcji w punkcie.

Należy jeszcze zwrócić uwagę na to, że mogliśmy rozpocząć budowanie funkcji pierwotnej nie od wartości 0, ale np. od wartości 2. Otrzymalibyśmy tę samą funkcję pierwotną różniącą się o stałą, tzn. przesuniętą wzdłuż osi OY o 2. Aby program to wykonał należy przed pętlą repeat wpisać wartość pierwotna:=2;. Wynika stąd wniosek, że jeżeli funkcja F(x) jest funkcją pierwotną funkcji f(x), to każda funkcja F(x)+C jest też funkcją pierwotną funkcji f(x).

Proponujemy teraz wykonać wykresy funkcji pierwotnych dla różnych funkcji, np. f(x)=2x, f(x)=x2, f(x)=tg(x), f(x)=1/x; itp. Jeśli wykres funkcji pierwotnej “ucieka” za ekran, należy dobrać inną wartość początkową zmiennej pierwotna lub zmienić wartość zmiennej j. Jeżeli natomiast dziedziną funkcji f(x) nie jest cały zbiór R, to należy odpowiednio zmienić zakres zmiennej x. Ciekawym sprawdzianem rozumienia funkcji pierwotnej jest program test-f-p.exe dostępny w pliku calka.zip.

Przejdźmy teraz do omówienia sposobu przybliżonego obliczania pola pomiędzy wykresem funkcji a osią OX w przedziale <0, b>. Zakładamy, że wykres funkcji przebiega nad osią OX. Pole obliczymy metodą prostokątów - Rys.3.

Rys.3. Podział pola pod funkcją y=f(x) na prostokąty.

Dzielimy przedział <0, b> na równe podprzedziały o szerokości Dx. Wybieramy środek xi każdego podprzedziału i obliczamy wartość funkcji f(xi) w tym punkcie. Pole całkowite będzie więc sumą pól prostokątów o podstawie Dx i wysokościach f(xi) i będzie tym dokładniejsze, im na większą ilość podprzedziałów podzielimy przedział <0, b>. Mamy zatem sposób na obliczanie pola pod funkcją krok po kroku. Pole jednego prostokąta wynosi P1=f(x1)Dx, pole dwóch prostokątów razem wynosi P2= P1+f(x2)Dx, pole trzech prostokątów wynosi P3= P2 +f(x3)Dx, itd.

Stosując symbol przypisania “:=“ można zapisać wzór na pole w dowolnym punkcie x w postaci:

pole := pole + f(x)Dx;

Zobaczmy jak to działa dla funkcji f(x)=cos(x) w przedziale <0, p/2>.

Program Pole_pod_funkcja;
uses Graph; var karta,tryb,n,k,iPrz,j:integer; x,a,b,Dx,pole:real;
function f(x:real):real;
begin
f:=cos(x) {deklaracja funkcji}
end;
begin
karta:=detect; initGraph(karta,tryb,''); j:=100; setColor(darkGray);
for n:=-320 div j to 320 div j do line(320+n*j,0,320+n*j,479);
{rysowanie układu współrzędnych}
for n:=-240 div j to 240 div j do line(0,240+n*j,639,240+n*j);
setColor(white); line(0,240,639,240); line(320,0,320,479);
x:=-320/j; Dx:=0.001; a:=0; b:=pi/2; setColor(yellow);
repeat
x:=x+Dx;
putPixel(round(x*j+320),round(240-f(x)*j),yellow); {rysowanie wykresu funkcji}
if (x>=a)and(x<=b) then
line(round(x*j+320),round(240-f(x)*j),round(x*j+320),240);
{zaznaczanie pola pod funkcją}
until x>320/j;
setColor(lightRed); iPrz:=10; pole:=0; Dx:=(b-a)/iprz;
for n:=1 to iPrz do
begin
x:=a+n*Dx-Dx/2;
pole:=pole+f(x)*Dx; {obliczanie pola
pod funkcją}
rectangle(round(j*(a+(n-1)*Dx)+320),round(-j*f(x)+240),round(j*(a+n*Dx)+320),240); {prostokąty}
end;
writeLn(' Pole = ',pole:1:10);
readln; closeGraph;
end.

Rys.4. Obliczanie pola pod funkcją f(x)=cos(x), w przedziale <0, p/2> metodą prostokątów.

Dla 10 podprzedziałów pole pod funkcją f(x)=cos(x) wynosi 1.001, zaś dla 100 podprzedziałów pole to wynosi 1.00001. Jest to wartość prawie dokładna, o czym przekonamy się za chwilę.

Teraz następuje najważniejszy moment całego wykładu. Zauważmy, że wzory na obliczanie kolejnych wartości funkcji pierwotnej i obliczanie kolejnych wartości pola pod funkcją są identyczne. Aby przekonać się o tym dobitnie, należy uruchamiać na przemian oba programy dla tych samych funkcji i dla tych samych przedziałów. W programie Funkcja_pierwotna należy ustalić punkt początkowy x:=0 i wartość pierwotna:=0. Przykłady należy dobierać tak, aby wykres funkcji przebiegał nad osią OX. Czytelnik biegły w programowaniu może z tych dwóch programów zrobić jeden program, który będzie rysował wykres funkcji pierwotnej do funkcji f(x) i obliczał pole pod wykresem funkcji f(x).

Po serii ćwiczeń, przy przyjętym założeniu, że F(0)=0, dostrzegamy, że:

  • Suma pól prostokątów, będąca przybliżoną wartością pola pomiędzy wykresem funkcji f(x) a osią OX, w przedziale <0, b>, jest równa wartości funkcji pierwotnej na końcu przedziału, czyli F(b).
  • Wniosek ten można zapisać symbolicznie w postaci: .

    Zatem, możemy powiedzieć, że pojęcia funkcja pierwotna i pole są równoważne, albo inaczej, że pole zmienia się tak, jak zmieniają się wartości funkcji pierwotnej.

    Dla nieskończenie gęstego podziału odcinka <0, b>, czyli dla Dx dążącego do 0 przyjęto w matematyce pisać wyrażenie Dx w postaci dx a całe wyrażenie sumy w postaci: . To ostatnie wyrażenie pozwala obliczać dokładną wartość pola pod funkcją.

    Symbol został zbudowany przez rozciągnięcie litery i nazywa się całką, od słowa scalanie (sumowanie).

    Sprawdźmy, ile wynosi dokładna wartość pola pod funkcją f(x)=cos(x), w przedziale <0,p/2>, wiedząc, że funkcją pierwotną do funkcji f(x)=cos(x) jest funkcja F(x)=sin(x). Mamy . Wynik ten potwierdza obliczenia wykonane przy pomocy programu Pole_pod_funkcją.

    Dla innego przykładu funkcji, np. f(x)=2x+3 w przedziale <0, 5> otrzymujemy funkcję pierwotną F(x)=x2+3x, która w zerze ma wartość zero. Stąd otrzymujemy wartość pola pod funkcją:

    Sposób obliczania pola pod funkcją f(x), w dowolnym przedziale <a, b> wynika z prostej zależności geometrycznej: . Zatem

    Jeżeli funkcja f(x) przyjmuje w przedziale <a, b>, zarówno wartości dodatnie jak i ujemne, a chcemy obliczyć pole zawarte między wykresem a osią OX, to możemy funkcję f(x) zastąpić funkcją ˝f(x)˝, która przyjmuje tylko wartości dodatnie, a jej pole pod funkcją nie zmienia się.

    Podsumowanie.

    Przedstawiona metoda wprowadzenia pojęcia funkcji pierwotnej i całki polega na zastosowaniu języka programowania, czyli na układaniu i ingerencji w treść tekstu źródłowego. Stosując tę metodę, dajemy uczniom możliwość wprowadzania i manipulowania wyrażeniami oraz natychmiastowego potwierdzenie słuszności lub niesłuszności swojego rozumowania. Widzą oni bezpośredni efekt swoich działań, świadomie wpływają na wyniki i zbliżają się, lub są naprowadzani, do odpowiednich rezultatów. Porównanie wyników dwóch programów doprowadziło do odkrycia, że funkcja pierwotna i pole są równoważne, a przede wszystkim, do uświadomienia, dlaczego są równoważne. Tak ukształtowane pojęcie całki pozwoli uczniom dostrzegać sytuacje w których całkowanie (scalanie) występuje i stosować ze zrozumieniem poznane wzory.

    Eugeniusz Jakubas

    Literatura.

    1. Browkin K. - “Matematyka kl. IV”, WSiP, 1994r.
    2. Jenike M. - “Fizyka I”, WSiP, 1996r.
    3.
    Praca zbiorowa -”Matematyka w szkole średniej” t.I, The School Mathematics Project, WSiP, 1992r.
    4. Ralston A. - “Program nauczania matematyki w roku 2000” - “Komputer w Szkole nr 1/1990”
    5.
    Tall D. - “Rachunek różniczkowy może być zrozumiały” - “Komputer w Szkole nr 12/1991”
    6. Tall D. - “Wizualne przedstawianie pojęć rachunku różniczkowego”- “Komputer w Szkole nr 11/1991”