Wyznaczanie miejsc zerowych funkcji Piotr Modliński 6 października 010 Spis treści 1 Wstęp 1 Metody iteracyjne 1.1 Zbieżność metody............ Lokalizacja zer.............3 Metody odnajdywania zer.......3.1 Metoda bisekcji.........3. Metoda regula falsi...... 3.3.3 Metoda stycznych Newtona 3.3.4 Metoda siecznych....... 4.3.5 Metoda iteracji prostej.... 5 3 Praktyczne warunki stopu 5 4 Uwagi 6 4.1 Zera wielokrotne........... 6 4. Przybliżenia pochodnych....... 6 5 Zadania kontrolne 6 5.1 Zadanie 1............... 6 5. Zadanie............... 6 5.3 Zadanie 3............... 6 1 Wstęp Przy wszelkiego rodzaju obliczeniach, rozwiązywaniu równań itp. spotykamy się z bardzo podstawowym problemem wyznaczenia miejsc zerowych danej funkcji. Warto zwrócić uwagę na fakt, że zadanie to jest równoważne rozwiązywaniu równań nieliniowych każde równanie przekształcić można do postaci f(x) = 0. Czasami, w bardzo specyficznych przypadkach, jesteśmy w stanie wyznaczyć rozwiązanie w sposób analityczny, jednak nie zawsze tak jest. Przykładem takiego problemu może być tzw. równanie Keplera (f(x) x ɛ sin(x) M = 0), które jest bardzo istotnym narzędziem w astronomii, gdyż pozwala wyznaczyć przyszłe położenie planety, jednak poza paroma prostymi przypadkami, w ogólności nie daje się rozwiązać w prosty sposób za pomocą funkcji elementarnych. Bardzo wiele problemów sprowadza się do znalezienia miejsc zerowych wielomianów, a nawet wśród nich wystarczy, że stopień jest nieco większy i już mamy duże problemy z wyznaczeniem wyniku. Kolejnym przykładem może być wyznaczenie pierwiastka kwadratowego określonej liczby a, które także można przekształcić do rozwiązania równania postaci f(x) = x a = 0. Podobnie rozwiązanie równania wykorzystać można dla wyznaczenia odwrotności liczby a bez wykonywania dzielenia 1. Często jednak nie jest konieczne wyznaczenie miejsca zerowego w sposób dokładny, a wystarczy pewne ( bardzo dobre nie gorsze niż ɛ) przybliżenie np. w większości zastosowań inżynierskich nie interesuje nas wartość dokładna, a jedynie wystarczająco bliska skoro i tak mamy do czynienia z błędami pomiarów. Wówczas do przybliżonego rozwiązania takiego zadania posłużyć się możemy komputerem. Na zajęciach zajmiemy się jedynie grupą tzw. metod iteracyjnych które w kolejnych krokach (iteracjach) coraz dokładniej przybliżają nam poszukiwane miejsce zerowe. Nie będziemy też koncentrować się na metodach najbardziej efektywnych, czy wykorzystywanych w specjalizowanych algorytmach, a na tych najprostszych, które owszem umożliwiają znalezienie rozwiązania, jednak są na tyle proste, że opanowanie ich nie powinno stanowić problemu. Metody iteracyjne Jak zaznaczono we wstępie, metody te pozwalają w kolejnych krokach na coraz dokładniejsze przybliżanie miejsc zerowych. Każde kolejne oszacowanie 1 które jest niepożądane w pewnych sytuacjach np. w 18-bitowym rejestrze wektorowym procesorów AMD wynik jest obardzony znaczącym błędem, który jest ponoszony jako cena zwiększonej szybkości obliczeń w ogólności pod nazwą metod iteracyjnych występują różne algorytmy pozwalające w kolejnych iteracjach zbliżać się do rozwiązania różnych problemów, czy to szukania miejsc 1
(kolejny krok) wykonywany jest na podstawie jednego, lub kilku poprzednich: x (k+1) = Φ k (x (k),..., x (k+1 m) ) Ilość kroków wykorzystywanych do wyznaczenia kolejnego określana jest jako m-krokowość metody (w ten sposób metoda wykorzystująca tylko jeden punkt jest metodą jednokrokową, dwa ostatnie potrzebuje dwukrokowa itd)..1 Zbieżność metody Określa się tzw. rząd metody p definiowany następująco: x k x A x k+1 x p gdzie x jest poszukiwanym miejscem zerowym, a A współczynnikiem zbieżności. Rząd metody określa szybkość, z jaką kolejne przybliżenia zbiegają do rozwiązania rzeczywistego. W przypadku w którym p = 1 mówimy o zbieżności liniowej, kiedy p 1 o zbieżności ponadliniowej, która jest szybsza od liniowej.. Lokalizacja zer Metody iteracyjne w znakomitej większości dobrze działają w przypadku, w którym badana funkcja posiada jedno miejsce zerowe. Zazwyczaj jednak nie jest tak pięknie i bywa z tym różnie. Stąd pierwszym krokiem jest tzw. lokalizacja miejsc zerowych wyznaczenie przedziału, w którym takie miejsce jest tylko jedno. Ułatwi to znacznie działanie algorytmom, skróci czas ich działania (ilość iteracji), a w skrajnych przypadkach będzie wręcz niezbędne dla uzyskania poprawnych rezultatów. Po wyznaczeniu przedziału po prostu traktujemy go jako dziedzinę funkcji na której działamy, przez co w samym algorytmie iteracyjnym nie musimy już martwić się wieloma miejscami zerowymi. Metod lokalizacji zer można wymyślić wiele, najprostsze i najbardziej chyba intuicyjne to: Tablicowanie Utwórzmy tablicę wartości funkcji wyznaczanych co pewien stały krok i sporządźmy przybliżony wykres łącząc kolejne punkty. W okolicy przecięcia wykresu z osią y = 0 powinno znaleźć się nasze miejsce zerowe. Analiza matematyczna Określenie metodami analitycznymi np. zerowych, sortowania, czy wielu innych zmiana znaku wartości funkcji ciągłej. Dodatkowo jeśli znak pochodnej się nie zmienia, mamy tylko jedno miejsce zerowe. Metoda graficzna Rozłożenie badanej funkcji na dwie składowe f(x) = f 1 (x) f (x) i określanie liczby przecięć (np. f(x) = x 4 (x + 1)). W niniejszym opracowaniu nie będę metodom lokalizacji poświęcał większej uwagi..3 Metody odnajdywania zer W poniższych rozważaniach zakładamy, że na rozważanym przedziale [a, b] mamy funkcję ciągłą, klasy C 1, która ma jedno miejsce zerowe które oznaczamy przez x. Ewentualne dalsze założenia opisane przy konkretnych metodach..3.1 Metoda bisekcji Znana także pod innymi nazwami (metoda równego podziału, metoda połowienia itp.) jest podstawową i najbardziej chyba intuicyjną z metod rozwiązywania równań nieliniowych poszukiwania miejsc zerowych. Opiera się na twierdzeniu Bolzano-Cauchy: Jeżeli funkcja ciągła f(x) ma na końcach przedziału domkniętego wartości różnych znaków, to wewnątrz tego przedziału, istnieje co najmniej jeden pierwiastek równania f(x) = 0 Poza ciągłością na przedziale [a, b] mamy dodatkowe założenie, że na krańcach przedziału funkcja ma przeciwne znaki, zatem: f(a) f(b) < 0 Całość algorytmu przedstawiona jest na rysunku 1 i w poniższych punktach (zaczyna się od k = 1): 1. Sprawdź, czy punkt x (k) = a+b jest pierwiastkiem równania f(x (k) ) = 0. Jeżeli tak, algorytm kończy się, a punkt x (k) jest szukanym miejscem zerowym. 3. Jeżeli nie, x (k) dzieli przedział [a, b] na dwa mniejsze przedziały: [a, x (k) ], oraz [x (k), b]. Proces powtarzany jest od początku dla przedziału, który spełnia założenie przeciwnych znaków, tj. f(a) f(x (k) ) < 0 (wówczas b = x (k) ), lub f(x (k) ) f(b) < 0 (wtedy a = x (k) ).
punktów 3 ). Algorytm powtarza się dla nowego przedziału. Rysunek 1: Metoda bisekcji kolejne kroki Działanie algorytmu kończy się po znalezieniu pierwiastka, lub po osiągnięciu żądanej dokładności ɛ. Warto zwrócić uwagę, że dokładność można oszacować jeszcze przed rozpoczęciem obliczeń ponieważ z każdym krokiem przedział [a, b] zmniejsza się dwukrotnie, błąd popełniany w k-tej iteracji można szacować przez b a ɛ. k Dla metody bisekcji można przyjąć, że A = 0, 5, zaś p = 1. Za pomocą prostych przekształceń można pokazać, że dla znalezienia pierwiastka z zadaną dokładnością ɛ trzeba wykonać co najmniej k iteracji, gdzie: k = k(ɛ) =.3. Metoda regula falsi log b a ɛ Drugą z metod, którymi się zajmiemy będzie tzw. regula falsi (łac: fałszywa reguła, lub łac: fałszywa [linia] prosta). W porównaniu z metodą bisekcji metoda różni się tym, że inaczej wyznaczany jest punkt x (k). Potrzeba tych samych założeń, co w przypadku metody bisekcji, tj. założenia o istnieniu jednego pierwiastka na przedziale [a, b], oraz różnych znakach na jego końcach. Przebieg algorytmu przedstawiono w kolejnych punktach, oraz na rysunku : 1. Poprowadź cięciwę przez punkty A(a, f(a)) i B(b, f(b)).. Punkt przecięcia x (k) cięciwy z osią OX jest brany jako przybliżenie rozwiązania. 3. Jeśli przybliżenie jest wystarczająco dobre, algorytm kończy się 4. W przeciwnym razie punkt x (k) staje się nowym punktem a, lub b (w zależności od tego, jaki jest znak wartości funkcji w każdym z tych Rysunek : Metoda regula falsi kolejne kroki Stosowanie reguły można uprościć wyprowadzając wzory na kolejne punkty: x (1) = a f(b) b f(a) f(b) f(a) x (k+1) = x (k) f(a) a f(x(k) ) f(a) f(x (k) ) gdyf(a)f(x (k) ) 0 x (k) f(b) b f(x(k) ) f(b) f(x (k) ) gdyf(b)f(x (k) ) < 0 Rząd metody szacować można na liniowy (p = 1), przy czym metoda jest skuteczna zwłaszcza przy funkcjach zbliżonych do liniowych..3.3 Metoda stycznych Newtona Metoda ta, nazywana także metodą Newtona- Raphsona polega na wyznaczaniu kolejnych przybliżeń miejsca zerowego (x (k+1) ) jako miejsc zerowych stycznych do wykresu w poprzednm punkcie (x (k) ). Metoda podobnie jak każda inna, posiada pewne założenia niezbędne do poprawnego działania. Założenia te są bardzo podobne do metody regula falsi: dokładnie jeden pierwiastek na przedziale [a, b], różne znaki na krańcach przedziału (f(a) f(b) < 0), oraz dodatkowo stały znak pierwszej i drugiej pochodnej na całym przedziale. Przebieg pokazany jest na rysunku 3, oraz w punktach poniżej: pierwszy krok Wybierz punkt startowy x (0) (zazwyczaj jest to jedna z wartości a, b, 0, 1, a+b). k = 1 3 jeśli badana funkcja ma stały znak pierwszej i drugiej pochodnej, za każdym razem zastępowany jest ten sam koniec przedziału 3
k-ty krok Wyprowadź styczną f(x (k 1) ) do wykresu funkcji w punkcie x (k 1). Oznacz punkt przecięcia stycznej z osią OX przez x (k) jest to kolejne (k-te) przybliżenie punktu x. Jeśli wyznaczone przybliżenie jest satysfakcjonujące, algorytm się w tym momencie kończy, jeśli nie, k jest zwiększane o 1 i następuje kolejna iteracja. jest w połączeniu z innymi np. z metodą bisekcji i po osiągnięciu pewnego przybliżenia miejsca zerowego dopiero następuje przełączenie na Newtona, żeby szybko znaleźć z dużą dokładnością szukane rozwiązanie. x3 - x + Rysunek 4: Cykl w metodzie Newtona funkcja x 3 x + w punktach 0 i 1.3.4 Metoda siecznych Rysunek 3: Metoda stycznych kolejne kroki Stosowanie reguły można uprościć wyprowadzając wzory na kolejne punkty: x (k+1) = x (k) f(x(k) ) f (x (k) ) Oszacowanie błędu Błąd k-tego przybliżenia można oszacować na jeden z następujących sposobów: x x (k) f(x (k) ) x x (k) M m m ( x x (k 1)) gdzie m = min x [a,b] f (x), oraz M = max x [a,b] f (x) Problemy Metoda nie jest narzędziem doskonałym z kilku powodów. Metoda nie w każdym przypadku jest zbieżna w szczególności jeśli punkt startowy jest zbyt daleko od miejsca zerowego, bardzo często algorytm się rozbiega. Innymi słowy nie jest zbieżna globalnie. Może wpaść w swoisty cykl (por. rys. 4) bądź w ogóle nie wystartować jeśli źle wybierzemy punkt początkowy (np. dla funkcj f(x) = 1 x jeśli początkowym punktem będzie x (0) = 0 to kolejny punkt będzie w nieskończoności!!!). Dlatego metoda ta często wykorzystywana Od sposobu działania nazywana też metodą interpolacji liniowej, bądź także metodą Eulera opiera się na przyjęciu założenia, że na dostatecznie małym przedziale [a, b] funkcja zmienia się w przybliżeniu w sposób liniowy, zatem krzywa y = f(x) może na odcinku [a, b] zostać zastąpiona sieczną (prostą przechodzącą przez punkty A(a, f(a)) i B(b, f(b))). Za (kolejną) przybliżoną wartość pierwiastka przyjmuje się wówczas punkt przecięcia siecznej z osią OX. Oczywiście jeśli pożądana jest większa dokładność, punkt przecięcia staje się po prostu nową granicą przedziału i operację się powtarza. Kolejne iteracje wykorzystują nie jeden punkt (jak w poprzednio rozważanych metodach), ale dwa, stąd jest to metoda drugiego rzędu. Granicami przedziału w kolejnej iteracji są dwie ostatnio wyznaczone wartości. Metoda siecznych klasyfikowana jest jako pewien wariant metody Newtona, gdyż dla dostatecznie bliskich punktów na podstawie których wyznaczany jest kolejny, iloraz różnicowy jest bliski pochodnej, zatem kolejne punkty generowane są w ten sam sposób. Powoduje to niestety przenoszenie zasadniczej wady metody Newtona, jaką jest brak zbieżności globalnej, za to nie wymaga obliczania pochodnych. Na rysunku 5 przedstawiono kolejne dwa kroki algorytmu. Najpierw na podstawie wartości x 1 i x wyznaczono wartość x 3, a następnie na podstawie x i x 3 wyznaczono x 4. x (k+1) = x (k) f(x (k) ) ( x (k) x (k 1)) f(x (k) ) f(x (k 1) ) Jeśli f(x) C [a, b] to p = 1+ 5 1, 618... 4
Źródło: en.wikipedia.org bezwzględna długość kroku W każdej iteracji wyznaczany jest kolejny krok, który jest bliżej rozwiązania optymalnego od poprzedniego. Jeśli kolejne kroki będą zbyt blisko siebie, założyć można, że jesteśmy wystarczająco blisko zera 4 : x (k+1) x (k) ɛ Rysunek 5: Metoda siecznych dwa pierwsze kroki.3.5 Metoda iteracji prostej Zupełnie inną od poprzednio omówionych jest tzw. metoda iteracji prostej oparta na twierdzeniu Banacha o kontrakcji. Nie jest to metoda powstała na skutek inżynierskich przybliżeń, ale jej uzasadnienie tkwi w analizie funkcji i nie będziemy szczegółowo się w nią zagłębiać (tylko tyle, ile jest niezbędne). Przekształćmy nasze równanie f(x) = 0 w równanie równoważne wprowadzając funkcję φ(x) taką, że: x = φ(x) f(x) = 0 Następnie miejsce zerowe znajdziemy przez ciąg kolejnych przybliżeń, gdzie: x (k) = φ(x (k 1) ) Cały problem polega na tym, że funkcja φ(x) nie może być dowolnym przekształceniem, ale tzw. odwzorowaniem zwężającym, tj. dla D 0 [a, b] będącym domkniętym podzbiorem dziedziny mamy: φ(d 0 ) D 0 L [0,1] x,y D0 φ(x) φ(y) L x y Wówczas równanie x = φ(x) ma dokładnie jedno rozwiązanie x, oraz x = lim k x (k) dla dowolnego początkowego przybliżenia x (0) D 0. 3 Praktyczne warunki stopu Nazbyt optymistycznym byłoby zakładać, że metoda w końcu wstrzeli się dokładnie w miejsce zerowe. Ponieważ dziedzina rozważanej funkcji jest zbiorem mocy C, a przy nieskończonej liczbie kroków mamy tylko ℵ 0 sprawdzonych punktów, szansa trafienia jest statystycznie równa 0. W praktyce potrzebujemy jednak wystarczająco dokładnego przybliżenia miejsca zerowego. Jak je uzyskać? Istnieje kilka sposobów określenia chwili, w której algorytm powinien już się zatrzymać: względna długość kroku Analogicznie jak w poprzednim wypadku, ale tym razem nie patrzymy na bezwzględną wielkość kroku, tylko bierzemy pod uwagę stosunek długości kroku do wartości wyznaczonego punktu. To podejście jest znacznie lepsze pod względem numerycznym od poprzedniego (podobne cechy), jak i organoleptycznym (różnicę między 0, 1 a 0, 0001 łatwiej dostrzec niż między 1.000.000.000 a 1.000.000.000, 1 mimo, że w tym drugim przypadku bezwzględna różnica jest większa niż w pierwszym.) Problem ze stromymi funkcjami analogiczny jak w poprzednim przypadku. Formalnie można to więc zapisać następująco: x (k+1) x (k) ɛ x (k+1) najlepsza znaleziona wartość Przyjmujemy wartość jaką będziemy uważać za wystarczająco bliską zera i jeśli bezwzględna wartość funkcji jest od niej mniejsza zakładamy, że trafiliśmy w miejsce zerowe. UWAGA! Dla bardzo płaskich funkcji może powodować bardzo duże różnice! Np. znajdzie zera dla funkcji f(x) = 1! Formalnie zapisując: x f(x (k) ) ɛ maksymalna ilość iteracji Najprostsza chyba możliwość kiedy k osiągnie graniczną wartość, czyli obliczenia trwają już zbyt długo, kończymy działanie. Pozostaje tylko określenie czy udało się znaleźć miejsce zerowe, czy nie. Można więc ten warunek dać jako nadrzędny kolejne są sprawdzane tylko pod warunkiem, że: k < k max 4 jednak jeśli pochodna funkcji w otoczeniu zera ma dużą wartość bezwzględną, czyli funkcja jest bardzo stroma, wartości mogą się znacznie różnić! Np. f(x) = ctg(x) 10 10 dla x 0 5
4 Uwagi 4.1 Zera wielokrotne W przypadku występowania na danym przedziale więcej niż jednego miejsca zerowego (bądź zer wielokrotnych) pewne metody nie działają poprawnie, inne wymagają dodatkowych warunków dla poprawności działania. Często także dochodzi do obniżenia rzędu metody (działa wolniej). Istnieją różne modyfikacje przedstawionych metod pozwalające wyznaczać pierwiastki wielokrotne, czy w wielu wymiarach, w dziedzinie zespolonej itd, ale nie będziemy się nimi tutaj zajmować. 1. x = x 3 4, 5. x = 4,5+x x 3. x = 3 4, 5 + x 5.3 Zadanie 3 Proszę zlokalizować zera, a następnie wyznaczyć pierwiastki równania: 64x 3 11x + 8x + 15 = 0 4. Przybliżenia pochodnych Pochodne funkcji w punkcie wyznacza się za pomocą ilorazów różnicowych: f (x) f(x + h) f(x h) h f f(x + h) f(x) + f(x h) (x) h Tak zdefiniowane ilorazy są wystarczająco dobrym oszacowaniem. Oczywiście z jednej strony im mniejsze h, tym oszacowanie jest dokładniejsze, jednak z zajęć poświęconych błędom numerycznym wiemy, że nie można dowolnie tej wartości zmniejszać, gdyż jesteśmy ograniczeni błędami zaokrągleń wówczas nastąpi skokowe pogorszenie oszacowania do tego poziomu, że będzie ono zupełnie nieprzydatne. 5 Zadania kontrolne 5.1 Zadanie 1 Proszę znaleźć rozwiązania następujących równań nieliniowych metodami przedstawionymi w niniejszym opracowaniu: 1. x 3 x 4, 5 = 0 na przedziale [1, ]. ctg(x) x = 0 na przedziale [π/4, π/] 3. x α = 0 dla wybranej wartości parametru α 5. Zadanie Dla metody iteracji prostej proszę określić, które przekształcenia równania x 3 x 4, 5 = 0 na przedziale [1, ] są zbieżne i dlaczego (proszę uzasadnić), a następnie sprawdzić eksperymentalnie poprawność wniosków: 6