![]() |
Autor artykułu: mgr Jerzy Wałaszek, wersja 1.0 |
©2008 mgr
Jerzy Wałaszek
|
Miejscem zerowym funkcji
f(x)
będziemy nazywali argument xo,
dla którego funkcja przyjmuje wartość 0:
|
xo jest miejscem zerowym wtedy i tylko wtedy, gdy f(xo) = 0 |
|
Uwaga: Często uczniowie (nawet ci lepsi) mylą to proste pojęcie i twierdzą, iż miejsce zerowe to argument xo = 0. Prawdopodobnie zamęt wprowadza indeks przy literce x. Zastanów się, jeśli by tak było, to po co potrzebna jest nam ta cała procedura znajdowania czegoś, co jest przecież równe 0...? |
Przykład:
Funkcja f(x) = 2x - 4 posiada miejsce zerowe dla xo = 2, ponieważ:
| f(xo) | = 2xo - 4 |
| f(2) | = 2
|
Miejsce zerowe często nazywamy pierwiastkiem funkcji.
Funkcja może posiadać więcej niż jeden pierwiastek:
Przykład:
Funkcja f(x) = x2 - 1 posiada dwa pierwiastki: xo = -1 oraz xo = 1, gdyż:
| f(xo) | = (xo)2 - 1 |
| f(-1) | = (-1)2 - 1 = 1 - 1 = 0 |
| f(1) | = 12 - 1 = 1 - 1 = 0 |
Funkcja może posiadać nieskończenie wiele pierwiastków:
Przykład:
Funkcja f(x) = sin(x - 2) posiada pierwiastki dla każdego xo = kπ + 2, gdzie k = 0, ±1, ±2 ...
Graficznie miejsce zerowe funkcji możemy interpretować jako punkt przecięcia osi współrzędnych OX przez wykres funkcji:
Znajdowanie miejsc zerowych ma olbrzymie znaczenie w matematyce, fizyce, astronomii, technice itp. Dlatego już dawno temu matematycy opracowali wiele metod rozwiązywania tego zagadnienia. Zasadniczo istnieją dwa podejścia:
Mamy daną funkcję f(x) oraz przedział <a,b>, w którym będziemy poszukiwali miejsca zerowego (czyli pierwiastka funkcji f(x)). W przedziale <a,b> muszą być spełnione poniższe warunki:
| 1. | Funkcja f(x)
jest określona - uczniowie często nie rozumieją
tego pojęcia. Określoność funkcji oznacza, iż dla każdej wartości argumentu
x z przedziału
<a,b>
potrafimy policzyć wartość funkcji. W trakcie pracy algorytm
wyszukiwania pierwiastka oblicza wartości funkcji dla argumentów należących
do tego przedziału
<a,b>.
Jeśli przypadkowo trafi na punkt, dla którego wartość funkcji jest
nieokreślona, obliczenia się załamią. W praktyce konsekwencje mogą być
tragiczne, np. zmiana lotu samolotu z poziomego na pionowy w kierunku
ziemi... Dla przykładu rozważmy prostą funkcję:
Ile wynosi wartość tej funkcji dla x = 1? Musimy dzielić przez 0, a jak wiadomo jest to zadanie niewykonalne. W punkcie x = 1 tak podana funkcja ma nieokreśloną wartość.
|
| 2. | Funkcja f(x)
jest ciągła. Ciągłość funkcji oznacza z kolei, iż
jej wartości nie "wykonują" nagłych skoków. Funkcja
przebiega przez wszystkie wartości pośrednie - nie istnieją zatem przerwy w
kolejnych wartościach funkcji. Dla przykładu rozważmy taką oto funkcję:
Funkcja w przedziale <-2,1> posiada następujący wykres:
Nieciągłość występuje w punkcie x = 0, czyli w miejscu zmiany przepisu funkcji. Zwróć uwagę, iż funkcja jest określona w tym punkcie - nieciągłość i nieokreśloność to dwie różne sprawy - nie myl ich!!! |
| 3. | Funkcja f(x)
na krańcach przedziału
<a,b>
przyjmuje różne znaki. Ponieważ funkcja, zgodnie
z poprzednim podpunktem, jest ciągła, to przyjmuje w przedziale
<a,b>
wszystkie wartości pośrednie pomiędzy f(a)
i f(b).
Wartości te mają różne znaki (czyli leżą po różnych
stronach osi OX), zatem musi być taki punkt xo
w przedziale <a,b>,
dla którego funkcja przyjmuje wartość pośrednią:
f(a) < f(xo) = 0 < f(b) lub f(a) > f(xo) = 0 > f(b) |
Gdy funkcja f(x) spełnia powyższe trzy warunki, to w przedziale <a,b> zagwarantowane jest istnienie pierwiastka i możemy go wyszukać algorytmem połowienia (bisekcji). Zasada jest następująca:
Sprawdzamy, czy długość przedziału <a,b> jest mniejsza od założonego εx. Jeśli tak, to kończymy obliczenia z informacją o przekroczeniu precyzji. Inaczej wyznaczamy punkt xo jako środek przedziału <a,b> zgodnie ze wzorem:

Obliczamy wartość funkcji w punkcie xo. Sprawdzamy, czy f(xo) znajduje się dostatecznie blisko 0:

Jeśli nierówność jest spełniona, to xo jest poszukiwaną wartością pierwiastka. Zwracamy wynik i kończymy algorytm. Inaczej za nowy przedział poszukiwań pierwiastka przyjmujemy tą połówkę <a,xo> lub <xo,b>, w której funkcja zmienia znak na krańcach. Algorytm powtarzamy od początku.
Dane wejściowe:
| a,b | - krańce przedziału poszukiwań pierwiastka |
| εo | - dokładność porównania z zerem wartości funkcji |
| εx | - założona precyzja wyznaczenia pierwiastka na osi x |
| f(x) | - funkcja, której pierwiastka poszukujemy |
Dane wyjściowe:
xo - wartość pierwiastka funkcji lub informacja, iż nie można go wyliczyć
Lista kroków:
| K01: | Czytaj a,b,εo,εx | |||
| K02: | fa ← f(a) | |||
| K03: | fb ← f(b) | |||
| K04: | Jeśli fa × fb < 0, to idź do K07 | |||
| K05: | Pisz "Funkcja nie spełnia założeń" | |||
| K06: | Zakończ | |||
| K07: | Dopóki |a - b| > εx, wykonuj K08...K18 | |||
| K08: |
|
|||
| K09: | fo ← f(xo) | |||
| K10: | Jeśli |fo| > εo, to idź do K13 | |||
| K11: | Pisz xo | |||
| K12: | Zakończ | |||
| K13: | Jeśli fa × fo < 0, to idź do K17 | |||
| K14: | a ← xo | |||
| K15: | fa ← fo | |||
| K16: | Następny obieg pętli K07 | |||
| K17: | b ← xo | |||
| K18: | fb ← fo | |||
| K19: | Pisz "Przekroczona precyzja" | |||
| K20: | Zakończ |
Schemat blokowy:
Ćwiczenie na lekcji
Program:
Ćwiczenie na lekcji
Mamy daną funkcję f(x) oraz przedział <a,b> poszukiwań pierwiastka. W przedziale tym funkcja musi spełniać następujące warunki:
Funkcja f(x) jest określona - dla każdej wartości argumentu x z przedziału <a,b> potrafimy policzyć wartość funkcji.
Funkcja f(x) jest ciągła - jej wartości nie "wykonują" nagłych skoków. Funkcja przebiega przez wszystkie wartości pośrednie - nie istnieją zatem przerwy w kolejnych wartościach funkcji.
Funkcja f(x) na krańcach przedziału <a,b> przyjmuje różne znaki. Ponieważ funkcja, zgodnie z poprzednim wymogiem, jest ciągła, to przyjmuje w przedziale <a,b> wszystkie wartości pośrednie pomiędzy f(a) i f(b). Wartości te mają różne znaki (czyli leżą po różnych stronach osi OX), zatem musi być taki punkt xo w przedziale <a,b>, dla którego funkcja przyjmuje wartość pośrednią:
f(a)
< f(xo)
= 0 < f(b)
lub f(a)
> f(xo)
= 0 > f(b)
Gdy funkcja f(x) spełnia podane warunki, to w przedziale <a,b> zagwarantowane jest istnienie pierwiastka i możemy go wyszukać algorytmem regula falsi.

W języku łacińskim regula falsi oznacza fałszywą prostą. Ideą tej metody jest założenie, iż funkcja w coraz mniejszych przedziałach wokół pierwiastka zaczyna przypominać funkcję liniową. Skoro tak, to przybliżenie pierwiastka otrzymujemy prowadząc linię prostą (sieczną) z punktów krańcowych przedziału. Sieczna przecina oś OX w punkcie xo, który przyjmujemy za przybliżenie pierwiastka - gdyby funkcja faktycznie była liniowa, otrzymany punkt xo byłby rzeczywistym pierwiastkiem.
Wzór dla xo można wyprowadzić na kilka sposobów. My wybierzemy znane twierdzenie Talesa, które mówi, iż jeżeli ramiona kąta przetniemy dwiema prostymi równoległymi, to długości odcinków wyznaczonych przez te proste na jednym ramieniu kąta będą proporcjonalne do długości odpowiednich odcinków wyznaczonych przez te proste na ramieniu drugim. Poniższy rysunek obrazuje tę sytuację:

|
W naszym przypadku postępujemy następująco:
Kąt utworzą odpowiednie odcinki:
pionowo FA = (a,0)-(a,f(a)) powiększony o odcinek FB = (b,0)-(b,-f(b)) poziomo XAB = (a,0)-(b,0) |
Prostymi równoległymi będzie cięciwa z punktów krańcowych przedziału, oraz ta sama cięciwa przesunięta pionowo w górę o długość odcinka FB.
Poniższy rysunek obrazuje otrzymaną sytuację:

| Zgodnie z twierdzeniem Talesa mamy:
Jeśli podstawimy do tego wzoru długości odcinków:
FA = f(a)
Otrzymamy:
a dalej:
|
Ostatnie przekształcenie ma na celu otrzymanie wzoru o lepszej "zapamiętywalności". Mnożymy mianownik przez (-1), dzięki czemu staje się on spójny z licznikiem ułamka. Sam ułamek zmienia znak na minus.
Algorytm regula falsi jest bardzo podobny do opisanego w poprzednim rozdziale algorytmu bisekcji. Założenia wstępne dla badanej funkcji w obu algorytmach są identyczne. Różnią się one sposobem wyznaczania punktu xo. W algorytmie bisekcji punkt ten zawsze wyznaczany był w środku przedziału <a,b>. Z tego powodu algorytm bisekcji jest "nieczuły" na przebieg funkcji - zawsze zbliża się do pierwiastka w ten sam sposób.
W algorytmie regula falsi jest inaczej. Punk xo wyznaczany jest w zależności od wartości funkcji na krańcach przedziału poszukiwań. W efekcie w każdej iteracji otrzymujemy lepsze przybliżenie do rzeczywistej wartości pierwiastka. Zatem w większości przypadków algorytm regula falsi szybciej osiągnie założoną dokładność pierwiastka od algorytmu bisekcji (chociaż można oczywiście podać kontrprzykłady).
Po wyznaczeniu przybliżonego pierwiastka postępowanie w obu algorytmach jest w zasadzie takie samo. Sprawdzamy, czy wartość modułu różnicy pomiędzy dwoma ostatnimi przybliżeniami pierwiastka jest mniejsza od zadanego minimum. Jeśli tak, obliczenia kończymy zwracając xo.
Obliczamy wartość funkcji w punkcie xo i sprawdzamy, czy jest ona dostatecznie bliska zeru. Jeśli tak, zwracamy xo i kończymy. Jeśli nie, za nowy przedział przyjmujemy tą część przedziału <a,b> rozdzielonego przez xo, w której funkcja zmienia znak. Całą procedurę powtarzamy, aż do osiągnięcia pożądanego wyniku.
Dane wejściowe:
| a,b | - krańce przedziału poszukiwań pierwiastka |
| εo | - dokładność porównania z zerem wartości funkcji |
| εx | - założona precyzja wyznaczenia pierwiastka na osi x |
| f(x) | - funkcja, której pierwiastka poszukujemy |
Dane wyjściowe:
xo - wartość pierwiastka funkcji lub informacja, iż nie można go wyliczyć
Lista kroków:
| K01: | Czytaj a,b,εo,εx | |||
| K02: | fa ← f(a) | |||
| K03: | fb ← f(b) | |||
| K04: | Jeśli fa × fb < 0, to idź do K07 | |||
| K05: | Pisz "Funkcja nie spełnia założeń" | |||
| K06: | Zakończ | |||
| K07: | Dopóki |a - b| > εx, wykonuj K08...K18 | |||
| K08: |
|
|||
| K09: | fo ← f(xo) | |||
| K10: | Jeśli |fo| > εo, to idź do K13 | |||
| K11: | Pisz xo | |||
| K12: | Zakończ | |||
| K13: | Jeśli fa × fo < 0, to idź do K17 | |||
| K14: | a ← xo | |||
| K15: | fa ← fo | |||
| K16: | Następny obieg pętli K07 | |||
| K17: | b ← xo | |||
| K18: | fb ← fo | |||
| K19: | Pisz "Przekroczona precyzja" | |||
| K20: | Zakończ |
Schemat blokowy:
(zadanie domowe)
Program:
(do realizacji na lekcji)
![]() | I Liceum Ogólnokształcące |
Pytania proszę przesyłać na adres email: i-lo@eduinf.waw.pl
W artykułach serwisu są używane cookies. Jeśli nie chcesz ich otrzymywać,
zablokuj je w swojej przeglądarce.
Informacje dodatkowe