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