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)

Zasadę wyznaczanie miejsc zerowych tym sposobem przedstawia rys.2.

Rys.2. Wyznaczanie miejsca zerowego metodą stycznych.

Obieramy dowolny punkt początkowy x0, prowadzimy styczną do wykresu funkcji w punkcie (x0, f(x0)) i wyznaczamy punkt x1 przecięcia się tej stycznej z osią OX. W punkcie (x1,f(x1)) znów prowadzimy styczną i wyznaczamy punkt x2, itd. Po kilku operacjach otrzymujemy miejsce zerowe z wcześniej ustaloną dokładnością.

 

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.

Rys.4. Miejsce zerowe funkcji y = x/2-sin(x) wyznaczone przy pomocy programu Derive.

 

Sposób 6. (Przy pomocy arkusza kalkulacyjnego Excel)

Wypełniamy komórki A2..A12 wartościami od –2 do –1 z przyrostem 0,1 - rys.5. W komórkę B2 wpisujemy formułę „=A2/2-sin(A2)” i kopiujemy ją do pozostałych komórek B3..B12. Wśród otrzymanych wartości najbliższa zera jest wartość 0-.0036999123, uzyskana dla argumentu –1,9. Argument ten uznajemy za miejsce zerowe z dokładnością 0,1.

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.