Temat: Miejsca zerowe funkcji. (liceum)
miej-zer.doc – 75 kB
Celem lekcji jest omówienie sposobów wyznaczania
miejsc zerowych funkcji przy pomocy komputera.
Przebieg lekcji:
Zadanie.
Wyznaczyć miejsca zerowe funkcji
f(x) = x/2 – sin(x).
Omawiając to zadanie należy w
dyskusji z uczniami zwrócić uwagę na fakt, że nie istnieje metoda algebraiczna, taka
jak, np. dla funkcji kwadratowej lub taka jak dla równań trygonometrycznych,
pozwalająca rozwiązać to zadanie według jakichś wzorów lub jakiejś reguły.
Należy zaproponować uczniom
zastosowanie komputera, który wyposażony w odpowiedni program pozwoli wyznaczyć miejsca
zerowe tej i innych funkcji. W dalszej części lekcji będzie przedstawionych 5 sposobów
komputerowego wyznaczania miejsc zerowych; trzy pierwsze będą polegały na ułożeniu
odpowiednich programów w języku Pascal, pozostałe będą wykorzystywały programy Derive
i Excel.
Sposób 1. (Naturalne poszukiwanie wartości
zero)
Ten sposób polega na obliczaniu
wartości funkcji dla kolejnych argumentów x w danym przedziale. Jeżeli dla któregoś
argumentu wartość funkcji będzie równa (z pewną dokładnością) zero, to ten
argument uznamy za miejsce zerowe. Sposób ten realizuje następujący program, w którym
przyjęto przedział (-10, 8), przyrost argumentu 0.0001 i dokładność obliczeń
0,00001.
Program
Miejsca_zerowe_Metoda_naturalna;
var x,y:real;
begin
x:=-10;
repeat
x:=x+0.0001;
y:=x/2-sin(x);
if abs(y)<0.00001 then writeLn('x
=',x:12:10,', f(x) =',y:12:10);
until x>8;
readLn;
end.
Po uruchomieniu tego programu
otrzymujemy wyniki:
x
= -1.8954999846, f(x) =
-0.0000046828
x
= 0,0000000106
f(x) = -0.0000000053
x
= 1.8955000057, f(x) =
0.0000047001
W celu upoglądowienia lekcji można
program wzbogacić o rysowanie wykresu funkcji i wówczas jego postać będzie
następująca:
Program
Miejsca_zerowe_funkcji_Metoda_naturalna;
uses
crt, graph;
var karta, tryb, poz:integer;
x,
xpocz, xkon, y, Dx, sk:real;
xS, yS:string;
function
f (x: real): real;
begin
f :=x/2-sin(x);
end;
begin
karta:=detect; initGraph(karta,tryb,'');
xpocz:=-10; xkon:=8; Dx:=0.0001;
sk:=(xkon-xpocz)/640;
line(0,240,639,240);
line(round(-xpocz/sk),0,round(-xpocz/sk),479);
setColor(lightRed);
x:=xpocz;
repeat
x:=x+Dx;
y:=f(x);
if abs(240-y/sk)<480 then
putPixel(round((x-xpocz)/sk),round(240-y/sk),yellow);
if abs(y)<1e-5 then
begin
str(x:14:10,xS);
str(y:14:10,yS);
outTextXY(0,poz*10,'x
='+xS+', f(x) ='+yS);
fillEllipse(round((x-xpocz)/sk),round(240-y/sk),3,3);
poz:=poz+1;
end;
if
keyPressed then exit;
until x>xkon;
readLn;
end.
Rys.1. Miejsca zerowe funkcji y =
x/2-sin(x) wyznaczone metodą naturalną.
Sposób 2. (Metoda Monte Carlo)
Ten sposób jest podobny do naturalnego wyznaczania miejsc zerowych i polega na obliczaniu wartości funkcji dla losowo wybranych argumentów w danym przedziale. Jeżeli dla któregoś argumentu wartość funkcji będzie równa (z pewną dokładnością) zero, to ten argument uznamy za miejsce zerowe. Sposób ten realizuje następujący program, w którym przyjęto przedział (-3, -1), i dokładność obliczeń 0,000001.
Program
Miejsca_zerowe_Metoda_Monte_Carlo;
var x,y:real;
begin
repeat
x:=random*2-3;
y:=x/2-sin(x);
until abs(y)<0.000001;
writeLn('x = ',x:1:9,', f(x) = ',y:1:9);
readLn;
end.
Po uruchomieniu tego programu
otrzymujemy wynik: x = -1,895494662, f(x) = -0,00000324.
Sposób 3. (Metoda stycznych)
Rys.2. Wyznaczanie miejsca zerowego
metodą stycznych.
Poniższy program realizuje metodę stycznych, w którym przyjęto punkt startowy x = -2 i dokładność obliczeń 1e-10.
program
Miejsca_zerowe_Metoda_stycznych;
var x, y:real;
function
f(x:real):real;
begin
f:=x/2-sin(x);
end;
begin
x:=-2;
repeat
x:=x-f(x)/(f(x+0.000001)-f(x))*0.000001;
until (abs(f(x)) < 1e-10);
writeLn('x = ',x:1:9,', f(x) = ',y:1:9);
readLn;
end.
Po uruchomieniu tego programu
otrzymujemy wynik x = -1,8954942670,
f(x) = 0000000000.
Obliczenia numeryczne w metodzie
stycznych można wzbogacić o procedury rysowania wykresu, wówczas program przyjmie
postać:
program
Miejsca_zerowe_funkcji_Metoda_stycznych;
uses
graph;
var karta, tryb, poz:integer;
x_start,
x, xpocz, xkon, y, Dx, sk:real;
xS, yS:string;
function
f (x: real): real;
begin
f :=x/2-sin(x);
end;
begin
karta:=detect; initGraph(karta,tryb,'');
x_start:=-2;
xpocz:=x_start-3; xkon:=x_start+3; Dx:=0.0001;
sk:=(xkon-xpocz)/640;
line(0,240,639,240);
line(round(-xpocz/sk),0,round(-xpocz/sk),479);
setColor(lightRed);
x:=xpocz;
repeat
x:=x+Dx;
y:=x/2-sin(x);
if abs(240-y/sk)<480 then
putPixel(round((x-xpocz)/sk),round(240-y/sk),yellow);
until x>xkon;
x:=x_start;
repeat
x:=x-f(x)/(f(x+0.000001)-f(x))*0.000001;
until (abs(f(x)) < 1e-10);
str(x:14:10,xS); str(f(x):14:10,yS);
outTextXY(0,poz*10,'x ='+xS+', f(x) ='+yS);
fillEllipse(round((x-xpocz)/sk),round(240-f(x)/sk),3,3);
readLn;
end.
Rys.3. Miejsce zerowe funkcji y =
x/2-sin(x) wyznaczone metodą stycznych.
Sposób 4. (Przy pomocy programu Derive)
a) Wpisujemy do programu wyrażenie solve(x/2-sin(x),
x, -3, -1) i wybieramy
zlecenie simplify. Komputer podaje wynik x = -1,895494267.
Pierwsze wyrażenie w procedurze solve oznacza wzór funkcji, drugie oznacza
zmienną, a trzecie i czwarte oznacza przedział w którym szukamy miejsc zerowych.
b) Rysujemy wykres funkcji x/2-sin(x) i po narysowaniu powiększamy go
kilkakrotnie i odczytujemy wartość miejsca zerowego– rys.4.
Sposób 6. (Przy pomocy arkusza
kalkulacyjnego Excel)
Rys.5. Miejscem zerowym funkcji y =
x/2-sin(x), z dokładnością 0,1 jest x = -1,9.
W celu zwiększenia dokładności obliczeń należy w wziąć przedział (-2.0, -1.8) i obliczyć wartości funkcji z przyrostem argumentu 0,01 – rys.6. Po wykonaniu obliczeń otrzymujemy miejsce zerowe x = -1,90 z dokładnością 0,01.
Rys.6. Miejscem zerowym funkcji y = x/2-sin(x), z dokładnością 0,01, jest x = -1,90.
W celu dalszego zwiększenia dokładności obliczeń należy wziąć przedział (-1.91, -1.89) i obliczyć wartości funkcji z przyrostem argumentu 0,001 – rys.7. Po wykonaniu obliczeń otrzymujemy miejsce zerowe x = -1,895.
Rys.7. Miejscem zerowym funkcji y = x/2-sin(x), z dokładnością 0,001, jest x = -1,895.
Na zakończenie lekcji należy przedyskutować wszystkie otrzymane wyniki, pamiętając, że prawdziwymi miejscami zerowymi funkcji f(x) = x/2-sin(x) są:
x =
-1,895494267033980947144035738093, x = 0, x = -1,895494267033980947144035738093.