0 fx

Transkrypt

0 fx
Antoni M. Zajączkowski: Rozwiązywanie skalarnych, nieliniowych równań algebraicznych
8 kwietnia 2015
ROZWIĄZYWANIE SKALARNYCH, NIELINIOWYCH RÓWNAŃ ALGEBRAICZNYCH
RozwaŜamy metody numeryczne wyznaczania miejsc zerowych (pierwiastków) równania
f (x ) = 0 ,
(1)
w którym f jest funkcją rzeczywistą określoną w pewnym przedziale liczb rzeczywistych
(Dahlquist, Bjöck, 2008; Kincaid, Cheney, 2005)
W ogólnym przypadku nie moŜna znaleźć wzorów na miejsca zerowe równania (1) i dlatego
stosujemy metody iteracyjne w celu obliczania tych miejsc. Dokładniej, przyjmując jedną lub
kilka wartości początkowych generujemy ciąg (x n ) , który powinien dąŜyć do prawdziwej
wartości miejsca zerowego.
Warto zaznaczyć, Ŝe funkcja f nie musi być dana w postaci pewnych wyraŜeń. W metodach
które mogą być uŜyteczne, wystarczy, Ŝe moŜemy wyznaczyć wartość f (x ) i być moŜe,
pewne pochodne rozwaŜanej funkcji dla danych wartości zmiennej x . W przypadku niektórych metod, w celu zapewnienia zbieŜności wystarczy znać przedział [a, b ] , w którym znajduje się miejsce zerowe i w którym nie ma innych miejsc zerowych.
Metoda bisekcji, albo połowienia (Dahlquist, Bjöck, 2008; Fortuna, Macukow, Wąsowski,
2006; Kincaid, Cheney, 2005)
JeŜeli funkcja f jest ciągła w przedziale [a, b ] i f (a ) ≠ f (b) , a ξ jest liczbą pomiędzy f (a )
i f (b ) , to na podstawie własności Darboux wyraŜonej w twierdzeniu o wartości pośredniej
(Kuratowski, 1973, 82; Rudin, 1976, 93), w przedziale (a, b ) istnieje punkt c taki, Ŝe
f (c) = ξ . W szczególności jeŜeli f (a )f (b) < 0 , to równanie (1) ma przynajmniej jedno miejsce zerowe w przedziale (a, b ) .
Przykład (Dahlquist, Bjöck, 2008).
Tabela 1. Wartości funkcji danej wzorem (2) w przedziale [1.0, 3.0]
x
1.00
1.20
1.40
1.60
1.80
2.00
2.20
2.40
2.60
2.80
3.00
(x/2)^2
0.25
0.36
0.49
0.64
0.81
1.00
1.21
1.44
1.69
1.96
2.25
Sin(x)
0.84
0.93
0.99
1.00
0.97
0.91
0.81
0.68
0.52
0.33
0.14
(x/2)^2 - Sin(x)
-0.59
-0.57
-0.50
-0.36
-0.16
0.09
0.40
0.76
1.17
1.63
2.11
2.50
2.00
f (x )
1.50
1.00
0.50
0.00
1.00
-0.50
2.00
3.00
-1.00
x
Rysunek 1. Wykres funkcji danej wzorem (2) w przedziale [1.0, 3.0]
Weźmy pod uwagę równanie (1), w którym
1
Antoni M. Zajączkowski: Rozwiązywanie skalarnych, nieliniowych równań algebraicznych
8 kwietnia 2015
f (x ) = (x / 2)2 − sin x .
(2)
Z tabeli 1 i rysunku 1 widzimy, Ŝe przedziale [1.8,2.0] znajduje się miejsce zerowe rozwaŜanego równania. Przypuśćmy, Ŝe funkcja f jest ciągła w przedziale I 0 = [a 0, b0 ] i Ŝe f (a 0 )f (b0 ) < 0 . Wyznaczymy ciąg przedziałów Ik = [ak , bk ] takich, Ŝe
(a 0, b0 ) ⊃ (a1, b1 ) ⊃ (a2 , b2 ) ⊃ (a 3, b3 ) ⊃ ⋯
zawierających miejsce zerowe równania (1).
Przedziały tego ciągu wyznaczamy rekurencyjnie w następujący sposób: weźmy pod uwagę
k -ty przedział Ik = [ak , bk ] i wyznaczmy punkt środkowy mk wg wzoru
mk = (ak + bk )/ 2
(3)
i wartość f (mk ) funkcji f w tym punkcie.
Obliczamy f (mk )f (a k ) i jeŜeli iloczyn ten jest mniejszy od zera, to miejsce zerowe znajduje
się w przedziale [ak , mk ] i podstawiamy bk +1 := mk , ak +1 := a k . W przeciwnym przypadku
miejsce zerowe jest w przedziale [mk , bk ] i wtedy podstawiamy bk +1 := bk , ak +1 := mk . Łatwo widzieć, Ŝe w obydwu przypadkach nowy przedział [ak +1, bk +1 ] jest dwa razy krótszy od
poprzedniego i zawiera miejsce zerowe funkcji f , a więc opisany proces moŜna powtórzyć.
W przypadku, gdy f (mk )f (ak ) = 0 wnioskujemy, Ŝe f (mk ) = 0 , co oznacza, Ŝe mk jest
miejscem zerowym. W praktyce, ze względu na błędy zaokrągleń, otrzymanie f (mk ) = 0 jest
mało prawdopodobne, a więc kryterium zatrzymania obliczeń powinno być sformułowane w
postaci | f (mk ) | < ε , przy czym ε jest odpowiednio dobraną małą liczbą dodatnią, np.
ε = 10−5 .
Zadanie obliczeniowe. Napisać program w języku Ada wyznaczający miejsce zerowe danej
funkcji f określonej w przedziale I 0 = [a 0, b0 ] . Program powinien prezentować kolejne
przedziały w których znajduje się miejsce zerowe funkcji oraz wartości f (mk ) . Zakończenie
programu następuje w wyniku spełnienia jednego z trzech warunków:
1. Wartość | f (mk ) | < ε ,
2. Długość przedziału [ak , bk ] jest mniejsza od małej liczby dodatniej δ ,
3. Liczba zawęŜeń przedziału osiągnęła wartość Max_Iter > 0 .
Poza tym, program na początku powinien sprawdzić, czy w przedziale [a 0, b0 ] znajduje się
przynajmniej jeden pierwiastek równania f (x ) = 0 . Na zakończenie program powinien podać
wyniki: przedział w którym jest miejsce zerowe, miejsce zerowe, wartość funkcji w tym
miejscu oraz liczbę iteracji. Funkcje testowe
1. f (x ) = (x / 2)2 − sin x ,
2. f (x ) = 4 sin x + 1 − x ,
3. f (x ) = 1 − x − exp(−2x ) ,
2
Antoni M. Zajączkowski: Rozwiązywanie skalarnych, nieliniowych równań algebraicznych
8 kwietnia 2015
4. f (x ) = x cos x − ln x , (a 0, b0 ) = (0,1.6) ,
5. f (x ) = exp(−x ) − 2x , (a 0 , b0 ) = (0,1.6) .
Literatura
Dahlquist, G., Bjöck, A. (2008). Numerical Methods in Scientific Computing. SIAM.
Fortuna, Z., Macukow, B., Wąsowski, J. (2006). Metody numeryczne. WNT, Warszawa (wyd.
VII).
Kincaid, D., Cheney, W. (2005). Analiza numeryczna. WNT, Warszawa (tłum. z ang.).
Kuratowski, K. (1973). Rachunek róŜniczkowy i całkowy. Funkcje jednej zmiennej. PWN,
Warszawa, wyd. VI.
Rudin, W. (1976). Principles of Mathematical Analysis. McGraw-Hill, New York, (third
edition). Istnieje tłumaczenie polskie: Rudin, W. (2002). Podstawy analizy matematycznej.
PWN, Warszawa, (wyd. VI).
3