MN02LAB: Różnice pomiędzy wersjami
mNie podano opisu zmian |
mNie podano opisu zmian |
||
Linia 1: | Linia 1: | ||
= | |||
<!-- | |||
Konwertowane z pliku LaTeX przez latex2mediawiki, zob. http://www.ii.uj.edu.pl/ pawlik1/latex2mediawiki.php | |||
--> | |||
=Ćwiczenia: równania nieliniowe skalarne= | |||
<div style="margin-top:1em; padding-top,padding-bottom:1em;"> | <div style="margin-top:1em; padding-top,padding-bottom:1em;"> | ||
Linia 21: | Linia 26: | ||
Ciekawy zbiór o charakterze fraktalnym powstaje w wyniku zastosowania metody | Ciekawy zbiór o charakterze fraktalnym powstaje w wyniku zastosowania metody | ||
Newtona do rozwiązania równania <math>\displaystyle z^n-1=0</math> w dziedzinie zespolonej. Punkt <math>\displaystyle z_0 = | Newtona do rozwiązania równania <math>\displaystyle z^n-1=0</math> w dziedzinie zespolonej. Punkt <math>\displaystyle z_0 = | ||
(x_0,y_0)</math> należy do | (x_0,y_0)</math> należy do <strong>basenu zbiezności metody</strong>, jeśli metoda Newtona jest | ||
zeń zbieżna do (jakiegokolwiek) pierwiastka w/w równania. Kolor odpowiadający | zeń zbieżna do (jakiegokolwiek) pierwiastka w/w równania. Kolor odpowiadający | ||
<math>\displaystyle z_0</math> jest określany na podstawie liczby iteracji potrzebnych metodzie do | <math>\displaystyle z_0</math> jest określany na podstawie liczby iteracji potrzebnych metodzie do | ||
Linia 29: | Linia 34: | ||
programu w Octave, który wyświetla baseny zbieżności metody Newtona jak poniżej. | programu w Octave, który wyświetla baseny zbieżności metody Newtona jak poniżej. | ||
[[Image:MNfraktal.png|thumb| | [[Image:MNfraktal.png|thumb|450px|center|Basen zbieżności metody Newtona w okolicy początku układu | ||
współrzędnych, dla równania <math>\displaystyle z^5-1=0</math>]] | współrzędnych, dla równania <math>\displaystyle z^5-1=0</math>]] | ||
Linia 36: | Linia 41: | ||
jednak, by uniknąć w nim pętli w rodzaju | jednak, by uniknąć w nim pętli w rodzaju | ||
< | <code>for xpixels = 1:1024, for ypixels = 1:768,... wyznacz kolor pixela ....</code> | ||
for xpixels | |||
</ | |||
Taka podwójnie zagnieżdżona pętla może skutecznie zniechęcić Cię do | 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! | Octave'a --- obrazek będzie liczyć się wieki --- zupełnie niepotrzebnie! | ||
Linia 52: | Linia 50: | ||
<div class="mw-collapsible mw-made=collapsible mw-collapsed"><span class="mw-collapsible-toogle mw-collapsible-toogle-default style="font-variant:small-caps">Wskazówka </span><div class="mw-collapsible-content" style="display:none"> | <div class="mw-collapsible mw-made=collapsible mw-collapsed"><span class="mw-collapsible-toogle mw-collapsible-toogle-default style="font-variant:small-caps">Wskazówka </span><div class="mw-collapsible-content" style="display:none"> | ||
<div style="font-size:smaller; background-color:#efe"> Kluczem do efektywnej implementacji w Octave jest przeprowadzenie | <div style="font-size:smaller; background-color:#efe"> Kluczem do efektywnej implementacji w Octave jest przeprowadzenie | ||
iteracji Newtona na | iteracji Newtona na <strong>wszystkich pikselach jednocześnie</strong>. W tym celu musisz | ||
skorzystać z prowadzenia działań na całych macierzach. </div> | skorzystać z prowadzenia działań na całych macierzach. </div> | ||
</div></div> | </div></div> | ||
Linia 72: | Linia 70: | ||
Newtona", a następnie przekazać jej jako parametr naszą funkcję. To oczywiście | 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 | 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 | wyliczysz na karteczce wzór na iterację dla <strong>tej konkretnej funkcji, <math>\displaystyle F(x) = | ||
x^2-a</math> | x^2-a</math></strong> i potem go zaimplementujesz. Jednak | ||
drugie podejście jest tutaj godne polecenia, bo ma na sobie znak charakterystyczny dla numeryki: niech | 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 | wszystko, co programujesz będzie tak proste, jak tylko możliwe (ale nie | ||
Linia 87: | Linia 85: | ||
</math></center> | </math></center> | ||
Jest to, znana już w starożytności, metoda Herona. Teraz jest jasne, dlaczego | |||
zbiega tak szybko do <math>\displaystyle \sqrt{a}</math>. | |||
Dla <math>\displaystyle a\neq 0</math>, spełnione są założenia twierdzenia o zbieżności metody Newtona, | Dla <math>\displaystyle a\neq 0</math>, spełnione są założenia twierdzenia o zbieżności metody Newtona, | ||
więc | więc | ||
Linia 132: | Linia 132: | ||
* <math>\displaystyle f(x) = \sin^2(x)</math>, | * <math>\displaystyle f(x) = \sin^2(x)</math>, | ||
* <math>\displaystyle f(x) = (x-1)^5</math> (wzór A), | * <math>\displaystyle f(x) = (x-1)^5</math> (wzór A), | ||
* <math>\displaystyle f(x) = (x-1) | * <math>\displaystyle f(x) = (x-1)\cdot (x^4 - 4x^3 + 6x^2 - 4x + 1)</math> (wzór B), | ||
* <math>\displaystyle f(x) = (x-2)^{13}</math> (wzór C), | * <math>\displaystyle f(x) = (x-2)^{13}</math> (wzór C), | ||
* <math>\displaystyle f(x) = x^{13} - 26x^{12} + 312x^{11} - 2288x^{10} + ... - 8192</math> (wzór D), | * <math>\displaystyle f(x) = x^{13} - 26x^{12} + 312x^{11} - 2288x^{10} + ... - 8192</math> (wzór D), | ||
Linia 138: | Linia 138: | ||
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| | [[Image:MNbisekcjawblad.png|thumb|450px|center|Metoda bisekcji ma kłopoty, gdy funkcja zadana jest | ||
wzorem D.]] | wzorem D.]] | ||
[[Image:MNbisekcjawresid.png|thumb| | [[Image:MNbisekcjawresid.png|thumb|450px|center|Residuum też jest duże, gdy <math>\displaystyle f</math> zadana jest | ||
wzorem D.]] | wzorem D.]] | ||
Linia 155: | Linia 155: | ||
jak wzory C i D. Niestety, tylko wzór A i C dają w efekcie dobre przybliżenia | 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 | miejsca zerowego, podczas gdy wzory B i D prowadzą do oszacowania na miejsce | ||
zerowe, które | zerowe, które <strong>w ogóle nie zawierają</strong> prawdziwego miejsca zerowego. | ||
Wyjaśnieniem tego fenomenu jest zjawisko redukcji cyfr przy odejmowaniu. | Wyjaśnieniem tego fenomenu jest zjawisko redukcji cyfr przy odejmowaniu. | ||
Jeśli chodzi o pewność... No cóż, sprawdziłaś, że działa w przypadkach, | Jeśli chodzi o pewność... No cóż, sprawdziłaś, że <strong>działa</strong> w przypadkach, | ||
spodziewałaś się, że będzie działać. Że tam, gdzie spodziewałaś się kłopotów, | dla których spodziewałaś się, że będzie działać. Że tam, gdzie spodziewałaś się | ||
lub komunikatu o błędzie --- tak rzeczywiście się stało. Wreszcie, | 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. | potwierdziłaś, że zachowanie metody jest zgodne z jej znanymi właściwościami. | ||
Tak więc, można | Tak więc, można <strong>przypuszczać</strong>, że implementacja jest poprawna.... | ||
</div></div></div> | </div></div></div> | ||
Linia 172: | Linia 172: | ||
<div class="exercise"> | <div class="exercise"> | ||
Wskaż | Wskaż <strong>wszystkie</strong> wartości <math>\displaystyle x_0</math>, dla jakich metoda Newtona będzie zbieżna | ||
do rozwiązania <math>\displaystyle x^*</math> równania | do rozwiązania <math>\displaystyle x^*</math> równania | ||
Linia 201: | Linia 201: | ||
<div class="output" style="background-color:#e0e8e8; padding:1em"><pre> | <div class="output" style="background-color:#e0e8e8; padding:1em"><pre> | ||
Iteracja: 1, x | Iteracja: 1, x = -1.39175 | ||
Iteracja: 2, x | Iteracja: 2, x = 1.39175 | ||
Iteracja: 3, x | Iteracja: 3, x = -1.39175 | ||
Iteracja: 4, x | Iteracja: 4, x = 1.39175 | ||
Iteracja: 5, x | Iteracja: 5, x = -1.39175 | ||
.. itd .. | .. itd .. | ||
Iteracja: 25, x | Iteracja: 25, x = -1.39176 | ||
Iteracja: 26, x | Iteracja: 26, x = 1.39178 | ||
Iteracja: 27, x | Iteracja: 27, x = -1.39183 | ||
Iteracja: 28, x | Iteracja: 28, x = 1.39197 | ||
Iteracja: 29, x | Iteracja: 29, x = -1.39235 | ||
Iteracja: 30, x | Iteracja: 30, x = 1.39333 | ||
Iteracja: 31, x | Iteracja: 31, x = -1.39594 | ||
Iteracja: 32, x | Iteracja: 32, x = 1.40283 | ||
Iteracja: 33, x | Iteracja: 33, x = -1.42117 | ||
Iteracja: 34, x | Iteracja: 34, x = 1.47061 | ||
Iteracja: 35, x | Iteracja: 35, x = -1.60867 | ||
Iteracja: 36, x | Iteracja: 36, x = 2.03161 | ||
Iteracja: 37, x | Iteracja: 37, x = -3.67722 | ||
Iteracja: 38, x | Iteracja: 38, x = 15.2779 | ||
Iteracja: 39, x | Iteracja: 39, x = -337.619 | ||
Iteracja: 40, x | Iteracja: 40, x = 178376 | ||
Iteracja: 41, x | Iteracja: 41, x = -4.99792e+10 | ||
Iteracja: 42, x | Iteracja: 42, x = 3.92372e+21 | ||
Iteracja: 43, x | Iteracja: 43, x = -2.41834e+43 | ||
Iteracja: 44, x | Iteracja: 44, x = 9.18658e+86 | ||
Iteracja: 45, x | Iteracja: 45, x = -1.32565e+174 | ||
Iteracja: 46, x | Iteracja: 46, x = inf | ||
Iteracja: 47, x | Iteracja: 47, x = nan | ||
</pre></div> | </pre></div> | ||
</div></div></div> | </div></div></div> |
Wersja z 16:45, 2 wrz 2006
Ćwiczenia: 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.
Ć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.

Ć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ą.
Ć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 ,
Ć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 .


Jak wyjaśnić te wyniki? Czy możesz już być pewna, że masz dobrą implementację?
Ć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.