![]() |
Autor artykułu: mgr Jerzy Wałaszek |
©2014 mgr
Jerzy Wałaszek
|
Definicja miejsca zerowegoMiejscem zerowym funkcji f(x) będziemy nazywali argument xo, dla którego funkcja przyjmuje wartość 0:
Przykład: Funkcja f(x) = 2x - 4 posiada miejsce zerowe dla xo = 2, ponieważ:
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ż:
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:
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||
Metoda połowienia - bisekcjiMamy daną funkcję f(x) oraz przedział <a,b>, w którym będziemy poszukiwali miejsca zerowego (czyli pierwiastka funkcji f(x)). Aby można było zastosować algorytm połowienia (zwany również algorytmem bisekcji), w przedziale <a,b> muszą być spełnione poniższe warunki:
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:
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. W przeciwnym razie 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 dotąd, aż znajdziemy pierwiastek
Algorytm wyznaczania miejsca zerowego metodą bisekcjiWejście:
Wyjście:
xo – pierwiastek funkcji f() lub
informacja, że w przedziale <xa,xb> brak
pierwiastka.
Dane pomocnicze:
Na podstawie powyższego algorytmu napisz odpowiedni program w języku C++. Przykładowa funkcja do testów f(x) = x3(x + sin(x2 - 1) - 1) - 1. Pierwiastków należy poszukiwać w przedziałach <-1,0> i <1,2>.
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||
Metoda Fałszywej Prostej - Regula FalsiMamy daną funkcję f(x) oraz przedział <a,b> poszukiwań pierwiastka. W przedziale tym funkcja musi spełniać następujące warunki:
f(a)
< f(xo)
= 0 < f(b)
lub f(a)
> f(xo)
= 0 > f(b)
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ę:
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ę:
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.
Algorytm wyznaczania miejsca zerowego metodą regula falsiWejście:
Wyjście:xo – pierwiastek funkcji
f() lub informacja, że w przedziale <xa,xb>
brak pierwiastka.
Dane pomocnicze:
Na podstawie powyższego algorytmu napisz odpowiedni program w języku C++. Przykładowa funkcja do testów f(x) = x3(x + sin(x2 - 1) - 1) - 1. Pierwiastków należy poszukiwać w przedziałach <-1,0> i <1,2>. Więcej na temat metod znajdowania miejsc zerowych funkcji znajdziesz tutaj. |
||||||||||||||||||||||||||||||||||||||||||||||||||||||
Zastosowania w fizyceNa wysokości h umieszczono działo z lufą skierowaną poziomo. Z działa oddajemy strzał. Pocisk opuszcza lufę działa z prędkością V i uderza we wzgórze, którego zbocze zdefiniowane jest funkcją:
Dla danych h, V wyznaczyć punkt xo zderzenia pocisku ze wzgórzem. Pominąć wszelkie opory ruchu. Przyjąć stałe przyspieszenie grawitacyjne g = 9,81 [m/s2]. Jest to przypadek rzutu poziomego. Ruch odbywa się w dwóch kierunkach. W kierunku poziomym na pocisk nie działa żadna siła, zatem ruch jest jednostajny ze stałą prędkością V. W kierunku pionowym działa siła przyciągania grawitacyjnego Ziemi, zatem ruch jest jednostajnie przyspieszony. W trakcie ruchu pocisk obniża swoją wysokość hP. Z drugiej strony wzgórze wraz ze wzrostem x powiększa swoją wysokość hW. W pewnej odległości xo wysokość pocisku hP zrówna się z wysokością wzgórza hW, nastąpi zderzenie. Naszym zadaniem jest wyznaczenie tego punktu. Aby rozwiązać to zadanie, musimy wyznaczyć wysokość wzgórza hW oraz wysokość pocisku hP w zależności od x. Ponieważ wzgórze opisane jest funkcją, otrzymujemy bezpośrednio:
W kierunku pionowym pocisk wykonuje spadek swobodny, pokonując drogę:
Zatem jego wysokość obliczymy jako:
Czas ruchu t nie jest dany, lecz obliczymy go łatwo ze wzorów na drogę w kierunku poziomym:
Wzór na czas wstawiamy do wzoru na wysokość pocisku hP:
Z warunku:
Otrzymujemy funkcję:
Funkcja f(x) przyjmuje wartość 0 dla xo, w którym wysokość pocisku i wzgórza jest taka sama. Wartość xo znajdziemy metodą regula falsi. W metodzie tej musimy określić przedział poszukiwań pierwiastka. Dla naszego zadania będzie to przedział <a,b> zawierający punkt xo. Punkt a otrzymujemy bez liczenia:
Natomiast punkt b niech będzie odległością rzutu poziomego - czyli odległością, w jakiej pocisk przeciąłby oś OX, gdyby nie było wzgórza. Ponieważ wzgórze jest, to punkt xo pojawi się wcześniej. Punkt b to droga w kierunku poziomym, jaką pokona pocisk w czasie spadku swobodnego z wysokości h:
Na podstawie powyższych wzorów przekształć program z lekcji, tak aby rozwiązywał to zadanie.
|
![]() | 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