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  an1 xn1 
 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.