MN02LAB: Różnice pomiędzy wersjami

Z Studia Informatyczne
Przejdź do nawigacjiPrzejdź do wyszukiwania
Przykry (dyskusja | edycje)
mNie podano opisu zmian
Przykry (dyskusja | edycje)
mNie podano opisu zmian
Linia 1: Linia 1:
==Równania nieliniowe skalarne==
 
<!--
Konwertowane  z pliku LaTeX przez latex2mediawiki, zob. http://www.ii.uj.edu.pl/&nbsp;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 ''basenu zbiezności metody'', jeśli metoda Newtona jest
(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|300px|Basen zbiezności metody Newtona w okolicy początku układu
[[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


<div class="code" style="background-color:#e8e8e8; padding:1em"><pre>
<code>for xpixels = 1:1024, for ypixels = 1:768,... wyznacz kolor pixela ....</code>
 
for xpixels <nowiki>=</nowiki> 1:1024
for ypixels <nowiki>=</nowiki> 1:768
... wyznacz kolor pixela ....
end
end
</pre></div>
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 ''wszystkich pikselach jednocześnie''. W tym celu musisz
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 ''tej konkretnej funkcji, <math>\displaystyle F(x) =
wyliczysz na karteczce wzór na iterację dla <strong>tej konkretnej funkcji, <math>\displaystyle F(x) =
x^2-a</math>'' i potem go zaimplementujesz. Jednak
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)*(x^4 - 4x^3 + 6x^2 - 4x + 1)</math> (wzór B),
* <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|300px|Metoda bisekcji ma kłopoty, gdy funkcja zadana jest
[[Image:MNbisekcjawblad.png|thumb|450px|center|Metoda bisekcji ma kłopoty, gdy funkcja zadana jest
wzorem D.]]
wzorem D.]]
[[Image:MNbisekcjawresid.png|thumb|300px|Residuum też jest duże, gdy <math>\displaystyle f</math> zadana jest
[[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 ''w ogóle nie zawierają'' prawdziwego miejsca zerowego.
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, gdy
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 ''przypuszczać'', że implementacja jest poprawna.
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ż ''wszystkie'' wartości <math>\displaystyle x_0</math>, dla jakich metoda Newtona będzie zbieżna
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 <nowiki>=</nowiki> -1.39175
Iteracja:  1,  x = -1.39175
Iteracja:  2,  x <nowiki>=</nowiki> 1.39175
Iteracja:  2,  x = 1.39175
Iteracja:  3,  x <nowiki>=</nowiki> -1.39175
Iteracja:  3,  x = -1.39175
Iteracja:  4,  x <nowiki>=</nowiki> 1.39175
Iteracja:  4,  x = 1.39175
Iteracja:  5,  x <nowiki>=</nowiki> -1.39175
Iteracja:  5,  x = -1.39175


.. itd ..
.. itd ..


Iteracja:  25,  x <nowiki>=</nowiki> -1.39176
Iteracja:  25,  x = -1.39176
Iteracja:  26,  x <nowiki>=</nowiki> 1.39178
Iteracja:  26,  x = 1.39178
Iteracja:  27,  x <nowiki>=</nowiki> -1.39183
Iteracja:  27,  x = -1.39183
Iteracja:  28,  x <nowiki>=</nowiki> 1.39197
Iteracja:  28,  x = 1.39197
Iteracja:  29,  x <nowiki>=</nowiki> -1.39235
Iteracja:  29,  x = -1.39235
Iteracja:  30,  x <nowiki>=</nowiki> 1.39333
Iteracja:  30,  x = 1.39333
Iteracja:  31,  x <nowiki>=</nowiki> -1.39594
Iteracja:  31,  x = -1.39594
Iteracja:  32,  x <nowiki>=</nowiki> 1.40283
Iteracja:  32,  x = 1.40283
Iteracja:  33,  x <nowiki>=</nowiki> -1.42117
Iteracja:  33,  x = -1.42117
Iteracja:  34,  x <nowiki>=</nowiki> 1.47061
Iteracja:  34,  x = 1.47061
Iteracja:  35,  x <nowiki>=</nowiki> -1.60867
Iteracja:  35,  x = -1.60867
Iteracja:  36,  x <nowiki>=</nowiki> 2.03161
Iteracja:  36,  x = 2.03161
Iteracja:  37,  x <nowiki>=</nowiki> -3.67722
Iteracja:  37,  x = -3.67722
Iteracja:  38,  x <nowiki>=</nowiki> 15.2779
Iteracja:  38,  x = 15.2779
Iteracja:  39,  x <nowiki>=</nowiki> -337.619
Iteracja:  39,  x = -337.619
Iteracja:  40,  x <nowiki>=</nowiki> 178376
Iteracja:  40,  x = 178376
Iteracja:  41,  x <nowiki>=</nowiki> -4.99792e+10
Iteracja:  41,  x = -4.99792e+10
Iteracja:  42,  x <nowiki>=</nowiki> 3.92372e+21
Iteracja:  42,  x = 3.92372e+21
Iteracja:  43,  x <nowiki>=</nowiki> -2.41834e+43
Iteracja:  43,  x = -2.41834e+43
Iteracja:  44,  x <nowiki>=</nowiki> 9.18658e+86
Iteracja:  44,  x = 9.18658e+86
Iteracja:  45,  x <nowiki>=</nowiki> -1.32565e+174
Iteracja:  45,  x = -1.32565e+174
Iteracja:  46,  x <nowiki>=</nowiki> inf
Iteracja:  46,  x = inf
Iteracja:  47,  x <nowiki>=</nowiki> nan
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 f jest rosnąca i wypukła na [a,b] oraz dla x*[a,b]f(x*)=0, to metoda Newtona startująca z x0>x* jest zbieżna.

Rozwiązanie

Ćwiczenie: Fraktale

Ciekawy zbiór o charakterze fraktalnym powstaje w wyniku zastosowania metody Newtona do rozwiązania równania zn1=0 w dziedzinie zespolonej. Punkt z0=(x0,y0) 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 z0 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 zbieżności metody Newtona w okolicy początku układu współrzędnych, dla równania z51=0
Wskazówka
Wskazówka

Ćwiczenie: Pierwiastkowanie

Niech a0. Aby wyznaczyć a, można skorzystać z metody Newtona dla równania x2=a. 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 a dla którego to nie będzie prawdą.

Wskazówka
Rozwiązanie

Ćwiczenie: Odwrotność bez dzielenia

Aby wyznaczyć 1/a dla a>0 bez dzielenia(!), można zastosować metodę Newtona do funkcji f(x)=1/xa. Pokaż, że na k-tym kroku iteracji,

|axk1|=|axk11|2.

Dla jakich x0 metoda będzie zbieżna do 1a, a dla jakich nie? Oceń, ile iteracji potrzeba do spełnienia warunku |xk1a||a|ϵ, gdy |x01a||a|γ<1,

Rozwiązanie

Ćwiczenie

Zaimplementuj metodę bisekcji. Sprawdź, jak będzie działać m.in. dla funkcji

  • f(x)=sin(x),
  • f(x)=sin2(x),
  • f(x)=(x1)5 (wzór A),
  • f(x)=(x1)(x44x3+6x24x+1) (wzór B),
  • f(x)=(x2)13 (wzór C),
  • f(x)=x1326x12+312x112288x10+...8192 (wzór D),

gdy tolerancję błędu zadasz na poziomie 1010.

Metoda bisekcji ma kłopoty, gdy funkcja zadana jest wzorem D.
Residuum też jest duże, gdy f zadana jest wzorem D.

Jak wyjaśnić te wyniki? Czy możesz już być pewna, że masz dobrą implementację?

Rozwiązanie

Ćwiczenie

Wskaż wszystkie wartości x0, dla jakich metoda Newtona będzie zbieżna do rozwiązania x* równania

arctan(x)=0.

Wyznacz wartość X0, z którego startując powinieneś dostać ciąg oscylujący X0,X0,. Sprawdź eksperymentalnie, czy tak jest rzeczywiście.

Wskazówka
Rozwiązanie