równania nieliniowe, cz1 (Teoria)
Transkrypt
równania nieliniowe, cz1 (Teoria)
Zaawansowane Metody Modelowanie – Wykład 01 1 Równania nieliniowe z jedną niewiadomą Na tych zajęciach zajmiemy się numerycznym znajdowaniem miejsc zerowych funkcji jednej zmiennej rzeczywistej o wartościach rzeczywistych. Ogólnie problem taki można sformułować następująco: dla danej funkcji f : [a, b] szukamy takiej liczby x [a, b], że f ( x ) 0. Takich wartości może być wiele. Równania takie pojawiają się w wielu zastosowaniach, np. w problemach równowag jonowych. Przykłady f ( x) x 2 5. Wtedy f ( x ) 0 prowadzi do poszukiwania pierwiastka kwadratowego x 5. f ( x) x cos x. Wtedy f ( x ) 0 powadzi do równania x cos x 0, co można też zapisać jako równanie x cos x. f ( x) x5 3x 4 5x 2. Wtedy f ( x ) 0 powadzi do następującego równania algebraicznego (wielomianowego) piątego stopnia: x5 3x 4 5x 2 0. Równanie piątego stopnia może mieć do pięciu różnych pierwiastków.1 Numeryczne metody znajdowania pierwiastków równań nieliniowych to najczęściej metody iteracyjne. Oznacza to, że tworzymy wg pewnego algorytmu ciąg liczb rzeczywistych {xk }k 0 zbieżny do szukanego rozwiązania x lim xk x . k Wykonując odpowiednią liczbę iteracji możemy zbliżyć się do szukanego miejsca zerowego z potrzebną dokładnością. W praktyce jesteśmy ograniczeni czasem i dokładnością reprezentacji liczb w maszynie cyfrowej. Metoda bisekcji (połowienia) Metoda bisekcji opiera się na twierdzeniu zwanym własnością Darboux: jeśli funkcja ciągła na przedziale [a, b] przyjmuje na końcach tego przedziału wartości o przeciwnych znakach, to funkcja ta posiada miejsce zerowe w przedziale (a, b). Można to zapisać tak: jeżeli f C ([a, b]) oraz f (a) f (b) 0, to istnieje liczba x (a, b) taka, że f ( x ) 0. 1 Z teorii wielomianów wynika, że równanie algebraiczne stopnia n , n 1 an xn an1 xn1 a1 x a0 0, (gdzie an 0), może mieć co najwyżej n pierwiastków (różnych), które w ogólności są zespolone. Może też nie mieć żadnych pierwiastków w dziedzinie liczb rzeczywistych , na przykład x 2 1 0 nie posiada żadnego rozwiązania w zbiorze , ale posiada je w zbiorze , gdyż x2 1 ( x i)( x i), i . Zaawansowane Metody Modelowanie – Wykład 01 2 Opis metody 1) wybierz środek przedziału: x (a b) / 2, 2) jeżeli f ( x) 0, to x x jest szukanym pierwiastkiem i procedurę kończymy, 3) jeżeli f ( x) 0, to wybieramy ten przedział [a, x] albo [ x, b] , w którym funkcja zmienia znak na krańcach, 4) jeżeli nie uzyskaliśmy żądanej dokładności, to wracamy do punktu 1). Poniżej jest przedstawiony listing implementacji metody bisekcji w języku C++. Program został uruchomiony w środowisku Dev-C++. Został on użyty do znajdowania pierwiastka równania x cos x, tak więc f ( x) x cos x. Ponadto wykresy funkcji y x oraz y cos x przecinają się gdzieś na odcinku [0, / 2], więc „uruchamiając” metodę bisekcji startujemy od przedziału czyli a 0,0; b 1,6. Jak widać z kodu warunek zakończenia iteracji w pętli do {…} while() jest zapisany następująco: 0,5 | a b | eps (w kodzie użyto funkcji fabs(), która zwraca wartość bezwzględną z liczby). W metodzie bisekcji można łatwo kontrolować dokładność, z którą znajdujemy rozwiązanie. Bierze się to stąd, że pierwiastek znajduje się zawsze w przedziale (a, b), czyli znamy go z dokładnością do 0,5 | a b | (wystarczy za najlepsze przybliżenie wybrać środek przedziału (a b) / 2 ). Uruchomienie przedstawionego programu daje wartość x rozwiązania równania x cos x na przedziale [0, 1,6]. 0,739085 jako przybliżoną wartość Metoda Newtona W metodach numerycznych znajdowania rozwiązań równań nieliniowych (zarówno układów jaki i z jedną niewiadomą) metoda Newtona jest chyba najbardziej znaną i najczęściej używaną (zwłaszcza dla układów równań). W przypadku jednowymiarowym zwana jest także metodą stycznych ze względu na jej elegancką interpretacje geometryczną. Daje ona bardzo szybką zbieżność choć pewną jej słabością jest to, że − na ogół − iteracje są zbieżne, gdy punkt startu będzie wybrany dostatecznie blisko szukanego (a zatem nieznanego) rozwiązania. Zaawansowane Metody Modelowanie – Wykład 01 3 Idea jest następująca. Wybieramy punkt startu x0 możliwie najbliżej poszukiwanego rozwiązania, a następnie prowadzimy styczną do wykresu w tym punkcie. Styczna ta przecina oś OX w jakimś punkcie, który przyjmujemy za kolejne przybliżenie szukanego pierwiastka. Następnie możemy powtórzyć ten krok. Idea ta jest zilustrowana na rysunku poniżej. Rys. 1. Ilustracja do metody Newtona. Rysujemy styczną odpowiadająca punktowi x0 i jako kolejne przybliżenie miejsca zerowego x* przyjmujemy punkt przecięcia tej stycznej z osią OX – na rysunku jest to x1. Uzasadnienie wzoru na x1 z powyższego rysunku jest następujące. Prosta która przechodzi przez punkt ( x0 , f ( x0 )) ma równanie y a( x x0 ) f ( x0 ). Ale ma to być styczna, więc jej współczynnik kierunkowy a jest równy pochodnej funkcji y f ( x) w punkcie x x0 , czyli a f ( x0 ) co daje y f ( x0 ) ( x x0 ) f ( x0 ). Przyrównując do zera otrzymamy f ( x0 ) ( x x0 ) f ( x0 ) 0. Rozwiązując to równanie względem x uzyskamy podstawowy krok metody stycznych x1 x0 f ( x0 ) . f ( x0 ) Powtarzając ten schemat mamy następujący ciąg, który może zbiegać do rozwiązania xn 1 xn f ( xn ) f ( xn ) dla n 0,1, 2, Z punktu widzenia implementacji metody Newtona podstawowy problem polega na tym, że należy dostarczyć do procedury także pochodną f ( x). Poniżej zaprezentowano listing kodu realizującego metodę Newtona dla równań nieliniowych z jedną niewiadomą. W szczególności program został użyty do obliczenia pierwiastka równania x3 2 x2 5x 1 0. Widać, że do uruchomienia procedury musimy określić lewą stronę, czyli f ( x) x3 2 x 2 5x 1 oraz jej pochodną Df ( x) f ( x) 3x 4 x 5. Jako punkt startu wybrano Zaawansowane Metody Modelowanie – Wykład 01 4 x0 5, 0. Po dziesięciu iteracjach otrzymujemy przybliżenie rozwiązania x 0, 216757. Jednak analiza wyników działania programu pokazuje, że wartość tą uzyskano już w iteracji numer 7.