gdy tolerancję błędu zadasz na poziomie <math>\displaystyle 10^{-10}</math>.
gdy tolerancję błędu zadasz na poziomie <math>\displaystyle 10^{-10}</math>.
[[Image:MNbisekcjawblad.png|thumb|300px|Metoda bisekcji ma kłopoty, gdy funkcja zadana jest
wzorem D.]]
[[Image:MNbisekcjawresid.png|thumb|300px|Residuum też jest duże, gdy <math>\displaystyle f</math> zadana jest
wzorem D.]]
Jak wyjaśnić te wyniki? Czy możesz już być pewna, że masz dobrą implementację?
Jak wyjaśnić te wyniki? Czy możesz już być pewna, że masz dobrą implementację?
Linia 154:
Linia 158:
Wyjaśnieniem tego fenomenu jest zjawisko redukcji cyfr przy odejmowaniu.
Wyjaśnieniem tego fenomenu jest zjawisko redukcji cyfr przy odejmowaniu.
[[Image:MNbisekcjawblad.png|thumb|300px|Metoda bisekcji ma kłopoty, gdy funkcja zadana jest
wzorem D.]]
[[Image:MNbisekcjawresid.png|thumb|300px|Residuum też jest duże, gdy <math>\displaystyle f</math> zadana jest
wzorem D.]]
Jeśli chodzi o pewność... No cóż, sprawdziłaś, że działa w przypadkach, gdy
Jeśli chodzi o pewność... No cóż, sprawdziłaś, że działa w przypadkach, gdy
Wersja z 13:22, 29 sie 2006
Równania nieliniowe skalarne
Ćwiczenie: Metoda Newtona może być zbieżna globalnie
Wykaż, że jeśli jest rosnąca i wypukła na oraz dla , to metoda Newtona startująca z jest zbieżna.
Rozwiązanie
Powtarzając rachunki z dowodu lokalnej zbieżności, możemy łatwo stwierdzić, że kolejne
iteracje dają które także spełniają warunek . Ponadto
nietrudno sprawdzić, że , a więc mamy ciąg malejący i
ograniczony. Jego granicą musi być (dlaczego?).
Ćwiczenie: Fraktale
Ciekawy zbiór o charakterze fraktalnym powstaje w wyniku zastosowania metody
Newtona do rozwiązania równania w dziedzinie zespolonej. Punkt należy do basenu zbiezności metody, jeśli metoda Newtona jest
zeń zbieżna do (jakiegokolwiek) pierwiastka w/w równania. Kolor odpowiadający
jest określany na podstawie liczby iteracji potrzebnych metodzie do
zbieżności.
Zupełnie miłym (i estetycznie wartościowym) doświadczeniem, jest napisanie
programu w Octave, który wyświetla baseny zbieżności metody Newtona jak poniżej.
Basen zbiezności metody Newtona w okolicy początku układu współrzędnych, dla równania
Wskazówka
Bardzo wygodnie napisać taki program w postaci skryptu Octave. Pamiętaj
jednak, by uniknąć w nim pętli w rodzaju
for xpixels = 1:1024
for ypixels = 1:768
... wyznacz kolor pixela ....
end
end
Taka podwójnie zagnieżdżona pętla może skutecznie zniechęcić Cię do
Octave'a --- obrazek będzie liczyć się wieki --- zupełnie niepotrzebnie!
Wskazówka
Kluczem do efektywnej implementacji w Octave jest przeprowadzenie
iteracji Newtona na wszystkich pikselach jednocześnie. W tym celu musisz
skorzystać z prowadzenia działań na całych macierzach.
Ćwiczenie: Pierwiastkowanie
Niech . Aby wyznaczyć , można skorzystać z metody Newtona dla
równania . Zaprogramuj tę metodę i sprawdź, jak wiele dokładnych cyfr
wyniku dostajesz w kolejnych krokach. Czy to możliwe, by liczba dokładnych cyfr
znaczących z grubsza podwajała się na każdej iteracji? Wskaż takie dla
którego to nie będzie prawdą.
Wskazówka
Na pewno kusi Cię, by zaprogramować najpierw ogólnie funkcję "metoda
Newtona", a następnie przekazać jej jako parametr naszą funkcję. To oczywiście
będzie działać, i to praktycznie tak samo szybko jak drugi spsoób, w którym po prostu
wyliczysz na karteczce wzór na iterację dla tej konkretnej funkcji, i potem go zaimplementujesz. Jednak
drugie podejście jest tutaj godne polecenia, bo ma na sobie znak charakterystyczny dla numeryki: niech
wszystko, co programujesz będzie tak proste, jak tylko możliwe (ale nie
prostsze)!
Rozwiązanie
Nasza iteracja, którą chcemy zaprogramować, to
Dla , spełnione są założenia twierdzenia o zbieżności metody Newtona,
więc
co właśnie tłumaczy się jako podwajanie liczby dokładnych cyfr
znaczących wyniku.
Ale jeśli to metoda zbieżna jest już tylko liniowo (z ilorazem 0.5 --- bo
jaki wtedy jest wzór na iterację?), więc co mniej więcej trzy kroki będziemy
dostawali kolejne zero dokładnego wyniku .
Ćwiczenie: Odwrotność bez dzielenia
Aby wyznaczyć dla bez dzielenia(!), można zastosować metodę Newtona
do funkcji . Pokaż, że na -tym kroku iteracji,
Dla jakich metoda będzie zbieżna do , a dla jakich nie?
Oceń, ile iteracji potrzeba do spełnienia warunku , gdy ,
Rozwiązanie
Proste ćwiczenie z analizy. Warunkiem zbieżności jest oczywiście (ze względu na
równość w wyrażeniu na błąd iteracji powyżej) , to znaczy
Ćwiczenie
Zaimplementuj metodę bisekcji. Sprawdź, jak będzie działać m.in. dla funkcji
,
,
(wzór A),
(wzór B),
(wzór C),
(wzór D),
gdy tolerancję błędu zadasz na poziomie .
Metoda bisekcji ma kłopoty, gdy funkcja zadana jest wzorem D.Residuum też jest duże, gdy zadana jest wzorem D.
Jak wyjaśnić te wyniki? Czy możesz już być pewna, że masz dobrą implementację?
Rozwiązanie
Jeśli nie pomylisz się, metoda powinna zbiegać bez problemów do zera funkcji
, dawać komunikat o błędzie dla (bo nie ma przeciwnych znaków).
Zapewne zauważyłaś, że wzory A i B są matematycznie równoważne, podobnie zresztą
jak wzory C i D. Niestety, tylko wzór A i C dają w efekcie dobre przybliżenia
miejsca zerowego, podczas gdy wzory B i D prowadzą do oszacowania na miejsce
zerowe, które w ogóle nie zawierają prawdziwego miejsca zerowego.
Wyjaśnieniem tego fenomenu jest zjawisko redukcji cyfr przy odejmowaniu.
Jeśli chodzi o pewność... No cóż, sprawdziłaś, że działa w przypadkach, gdy
spodziewałaś się, że będzie działać. Że tam, gdzie spodziewałaś się kłopotów,
lub komunikatu o błędzie --- tak rzeczywiście się stało. Wreszcie,
potwierdziłaś, że zachowanie metody jest zgodne z jej znanymi właściwościami.
Tak więc, można przypuszczać, że implementacja jest poprawna.
Ćwiczenie
Wskaż wszystkie wartości , dla jakich metoda Newtona będzie zbieżna
do rozwiązania równania
Wyznacz wartość , z którego startując powinieneś dostać ciąg oscylujący .
Sprawdź eksperymentalnie, czy tak jest rzeczywiście.
Wskazówka
Aby znaleźć graniczne , czyli takie, dla którego dostaniesz
oscylacje , musisz rozwiązać równanie nieliniowe:
To łatwe.
Rozwiązanie
Dla mamy zbieżność. Dla oscylacje, dla
większych wartości --- rozbieżność. Jednak w eksperymencie wszystko zależy od
tego, jak dokładnie wyznaczyliśmy . Na przykład, mój solver w Octave
wyznaczył wartość , dla której metoda Newtona dała następujący ciąg:
Iteracja: 1, x = -1.39175
Iteracja: 2, x = 1.39175
Iteracja: 3, x = -1.39175
Iteracja: 4, x = 1.39175
Iteracja: 5, x = -1.39175
.. itd ..
Iteracja: 25, x = -1.39176
Iteracja: 26, x = 1.39178
Iteracja: 27, x = -1.39183
Iteracja: 28, x = 1.39197
Iteracja: 29, x = -1.39235
Iteracja: 30, x = 1.39333
Iteracja: 31, x = -1.39594
Iteracja: 32, x = 1.40283
Iteracja: 33, x = -1.42117
Iteracja: 34, x = 1.47061
Iteracja: 35, x = -1.60867
Iteracja: 36, x = 2.03161
Iteracja: 37, x = -3.67722
Iteracja: 38, x = 15.2779
Iteracja: 39, x = -337.619
Iteracja: 40, x = 178376
Iteracja: 41, x = -4.99792e+10
Iteracja: 42, x = 3.92372e+21
Iteracja: 43, x = -2.41834e+43
Iteracja: 44, x = 9.18658e+86
Iteracja: 45, x = -1.32565e+174
Iteracja: 46, x = inf
Iteracja: 47, x = nan