Miejsca zerowe funkcji


Na lekcji zapoznasz się ze sposobami przybliżonego wyznaczania miejsc zerowych funkcji.

Uwaga: Program wyznacza miejsca zerowe funkcji tylko dla takiego fragmentu funkcji, który jest widoczny na ekranie. Końce przedziału można zmieniać, wpisując odpowiednie wartości do okienek oznaczonych symbolem: " < x < ".

Wpisz do okienka oznaczonego symbolem "y=" wzór x^2-x-2 i naciśnij "Czyść" oraz "Zera".

Otrzymałeś wykres funkcji kwadratowej z zaznaczonymi na osi Ox miejscami zerowymi oraz wartości liczbowe tych miejsc zerowych: x1 = -1, x2 = 2.

W jaki sposób można wyznaczyć miejsca zerowe?

Jednym ze sposobów jest metoda stycznych. W tej metodzie należy najpierw ustalić dokładność, z jaką chcemy wyznaczyć miejsce zerowe, np. 0,0001, oraz wybrać punkt startowy, od którego rozpoczniemy obliczenia, np. x0 = -3. Kolejne kroki tej metody są następujące:

1. Wyznaczamy równanie stycznej do funkcji w punkcie x0.
2. Obliczamy punkt x1 przecięcia tej stycznej z osią Ox.
3. Obliczamy wartość y1 funkcji w punkcie x1.
4. Jeżeli wartość bezwzględna y1 jest mniejsza od przyjętej dokładności, to punkt x1 uznajemy za miejsce zerowe, w przeciwnym przypadku podstawiamy za x0 wartość x1 i przechodzimy do punktu 1.

Poniższy rysunek przedstawia graficzną ilustrację tej metody:

ilustracja-metody.gif (5045 bytes)
Startując z punktu x0, prowadząc styczne, dochodzimy do miejsca zerowego.

A oto ciąg obliczeń, jakie wykonuje program dla funkcji y = x^2-x-2 i punktu startowego x0 = -3:

krok 1:  x0 krok 2:   styczna krok 3:   x0 krok 4:   y1
-3 y = -7x - 11 -1,571429 2,040816
-1,571429 y = -4,142857x - 4,469388   -1,078818   0,242665
-1,078818 y = -3,157635x - 3,163848   -1,001967   0,005906
-1,001967 y = -3,003935x - 3,003939   -1,000001   0,000004

Wartość y1 w ostatnim wierszu jest mniejsza od przyjętej dokładności 0,0001, zatem miejscem zerowym jest x1 = -1,00001 w-przyblizeniu.gif (844 bytes)-1.

Drugie miejsce zerowe można wyznaczyć analogicznie, startując z innego punktu osi Ox. Oto ciąg obliczeń dla punktu startowego x0 = 1:

krok 1:  x0 krok 2:   styczna krok 3:   x1 krok 4:   y1
1 y = x - 3 3 4
3 y = 5x - 11 2,2 0,64
2.2 y = 3,4x - 6,84 2,011765 0,035433
2.011765 y = 3,023529x - 6,047197 2,000046 0,000137
2.000046 y = 3,000092x - 6,000183 2 0

Wartość y1 w ostatnim wierszu jest równa 0, więc x1 = 2 jest miejscem zerowym.


Uwaga: Metoda stycznych nie jest uniwersalną metodą wyznaczania miejsc zerowych funkcji. Istnieją funkcje, dla których kolejne punkty przecięcia stycznych z osią Ox oddalają się do nieskończoności lub oscylują pomiędzy kilkoma punktami i nie zbliżają się do miejsca zerowego.
W podręczniku Matematyka przyjemna i pożyteczna możesz przeczytać o innej metodzie przybliżonego rozwiązywania równań, zwanej metodą podziału lub metodą bisekcji.
Stosując metody przybliżonego wyznaczania miejsc zerowych, należy zachować szczególną ostrożność przy końcowym ustalaniu wartości tych miejsc. Metody te wyszukują miejsca zerowe z zadaną dokładnością i może się zdarzyć, że podane zostanie miejsce zerowe, które mieści się w przedziale dokładności, np. (-0.0001, 0.0001), ale faktycznie wartość funkcji w tym miejscu nie jest równa zero.  
Może też zajść sytuacja odwrotna, kiedy program nie znajdzie miejsca zerowego, które istnieje. Spowodowane to jest tym, że program nie może obliczyć wartości we wszystkich punktach (jest ich nieskończenie wiele) i w czasie przeszukiwania może niektóre miejsca zerowe opuścić.


Programowanie miejsc zerowych w języku Pascal

Metodę stycznych, opisaną powyżej, można zrealizować w komputerze, pisząc odpowiedni program w języku Pascal.

program Miejsca_zerowe_Metoda_stycznych;
uses crt;
var x0,x1,d,a,b,f1:real;
function f(x:real):real;
   begin
      f:=x*x-x-2;
   end;
begin
   clrScr;
   x0:= 1; d:=0.0001;
   repeat
      f1:=(f(x0+0.000001)-f(x0))/0.000001;
      a:=f1; b:=-f1*x0+f(x0); x1:=-b/a;
      write('x0=',x0:1:6,',  y=',a:1:6,'x+',b:1:6);
      WriteLn(',  x1=',x1:1:6,',  y1=',f(x1):1:6);
      x0:=x1;
   until abs(f(x1))<d;
   readLn;
end.

Po uruchomieniu tego programu dla funkcji f = x*x - x - 2, punktu startowego x0 = 1 i dokładności 0.0001, otrzymujemy następujące wyniki:

x0=1.000000, y=1.000002x+-3.000002, x1=2.999996, y1=3.999978
x0=2.999996, y=4.999987x+-10.999961, x1=2.199998, y1=0.639993
x0=2.199998, y=3.399997x+-6.839993, x1=2.011765, y1=0.035432
x0=2.011765, y=3.023531x+-6.047201, x1=2.000046, y1=0.000137
x0=2.000046, y=3.000096x+-6.000191, x1=2.000000, y1=0.000000


Ponieważ wartość y1 w ostatnim wierszu jest równa 0, więc miejscem zerowym jest x1 = 2.

Metodę bisekcji, polegającą na kolejnych podziałach odcinka na dwie sekcje, można zaprogramować w sposób następujący:

program Miejsca_zerowe_Metoda_bisekcji;
uses crt;
var x0,x1,x2,d,a,b,f1:real;
function f(x:real):real;
   begin
      f:=exp(x*ln(2))+x*x*x/32-6;
   end;
begin
   clrScr;
   x1:=2; x2:=3;  d:=0.01;
   repeat
      x0:=(x1+x2)/2;
      write('f(',x1:1:6,')=',f(x1):1:6,',  f(',x2:1:6,')=',f(x2):1:6);
      writeLn(',  f(',x0:1:6,')=',f(x0):1:6);
      if f(x1)*f(x0)<0 then x2:=x0 else x1:=x0;
   until abs(f(x0))<d;
   readLn;
end.

Po uruchomieniu tego programu dla funkcji f = 2-do-x-p-1-32x-do-3-6.gif (218 bytes) (w języku Pascal funkcję tę wpisuje się w postaci: exp(x*ln(2))+x*x*x/32-6) i początkowego przedziału [2, 3] oraz dla dokładności 0.01, otrzymujemy następujące wyniki:
ilustracja-metody-2.gif (3124 bytes)

Ponieważ ostatnia wartość 0.005838 jest mniejsza niż ustalona dokładność 0.01, więc miejscem zerowym jest 2.468750. Aby uzyskać lepszą dokładność, należy zmniejszyć wartość zmiennej d. Sprawdź, jakie miejsce zerowe tej funkcji wyznacza nasz program "Miejsca zerowe". 


Zadania

Wykorzystując program "Miejsca zerowe" rozwiąż następujące zadania:

Zadanie 1

Wyznacz miejsca zerowe funkcji y = 2x3 - 9x2 + 5x + 7 {2*x^3-9*x^2+5*x+7}.

Zadanie 2

Wyznacz punkt przecięcia wykresów funkcji: y = x2 {x^2} i y = 2x {2^x}.

Zadanie 3

Dla jakiej wartości parametru a miejscami zerowymi funkcji y = sin(ax)   {sin(a*x)} są liczby całkowite: 0, plus-minus.gif (58 bytes)1, plus-minus.gif (58 bytes)2, plus-minus.gif (58 bytes)3, plus-minus.gif (58 bytes)4, itd.?

Zadanie 4

Rozwiąż nierówność: log 0,5 x < 0,5 x     {log(x)/log(0.5)-0.5^x}.

Zadanie 5

Rysunek przedstawia wykresy funkcji  f(x) = 2x - 1 {2^x-1} i g(x) = ctg(x+1)+1,5   {ctg(x+1)+1.5} w przedziale [-5, 5].

2-fun-2-do-x-i-ctg.gif (5694 bytes)

Odczytaj z wykresu, z dokładnością do 0,1, przybliżone rozwiązania poniższych równań w przedziale (-5, 5) i sprawdź odpowiedzi za pomocą programu "Miejsca zerowe".

a) f(x) – g(x) = 0; b)* f(x) + g(x) = 0; c) f(x) . g(x) = 0; d)*  f-g.gif (178 bytes) = 0.


Odpowiedzi

1. x1 = -0,6183, x2 = 1,6181, x3 =3,5002.

2. (-0,7667, 0,5877), (2, 4), (4, 16).

3. a = pi.gif (846 bytes).

4. x > 0,6414.

5.  
a) x1 = -4.5, x2 = -1.4, x3 = 1,  x4 = 2.5
b)* x1 = -1.9, x2 = 1.9
c) x1 = -4.7, x2 = -1.6, x3 = 0,  x4 = 1.6, x5 = 4.7
d)* x1 = 0.   Uwaga: Program podaje również inne rozwiązania, ponieważ dla nich wartości funkcji są bliskie zera i program uznał je za miejsca zerowe. Z analizy funkcji wynika jednak, że funkcja ma wartość dokładnie równą zero tylko dla x = 0.