PKow: Różnice pomiędzy wersjami

Z Studia Informatyczne
Przejdź do nawigacjiPrzejdź do wyszukiwania
Przykry (dyskusja | edycje)
m Zastępowanie tekstu – „,↵</math>” na „</math>,”
 
(Nie pokazano 14 wersji utworzonych przez 4 użytkowników)
Linia 1: Linia 1:
== Flash ==
<flash>file=Test19.swf|width=750|height=530</flash>
http://osilek.mimuw.edu.pl/images/2/29/Test19.swf
===Metoda iteracji prostej Banacha===
&#0025;
Zupełnie inne, i jak się okaże --- przy odrobinie sprytu bardzo skuteczne ---
podejście do wyznaczania miejsca zerowego jest oparte na metodzie Banacha.
Najpierw nasze równanie nieliniowe
<center><math>
f(x) = 0
</math></center>
przekształcamy (dobierając odpowiednią funkcję <math>\phi</math>) do równania równoważnego
(tzn. mającego te same rozwiązania)
<center><math>
  x\,=\,\phi( x).
</math></center>
Następnie, startując z pewnego przybliżenia
początkowego <math>x_0</math>, konstruujemy ciąg kolejnych
przybliżeń <math>x_k</math> według wzoru
<center><math>x_k\,=\,\phi( x_{k-1}),\qquad k\ge 1</math></center>
{{twierdzenie|Banacha, o zbieżności iteracji prostej||
Niech <math>D_0</math> będzie domkniętym
podzbiorem dziedziny <math>D</math>,
<center><math>\overline D_0\,=\,D_0\subset D,
</math></center>
w którym <math>\phi</math> jest odwzorowaniem zwężającym.
To znaczy, <math>\phi(D_0)\subset D_0</math>, oraz istnieje stała
<math>0\le L<1</math> taka, że
<center><math>\|\phi( x)-\phi( y)\|\,\le\,L\,\| x- y\|,
    \qquad\forall x, y\in D_0. 
</math></center>
Wtedy równanie
<center><math>
  x\,=\,\phi( x).
</math></center>
ma dokładnie jedno
rozwiązanie <math>x^*</math>, oraz
<center><math>x^*\,=\,\lim_{k\to\infty} x_k,
</math></center>
dla dowolnego przybliżenia początkowego
<math>x_0\in D_0</math>.
}}
{{dowod|||
Wobec
<center><math>\begin{matrix} \| x_k- x_{k-1}\| & = &
  \|\phi( x_{k-1})-\phi( x_{k-2})\|
  & \le & L\| x_{k-1}- x_{k-2}\| \\
\ &\le& \cdots\;&\le&\;L^{k-1}\| x_1- x_0\|,
\end{matrix}</math></center>
dla <math>k\ge s</math> mamy
<center><math>\begin{matrix}  \| x_k- x_s\|
  & \le & \sum_{j=s+1}^k\| x_j- x_{j-1}\| 
    & \le & \sum_{j=s+1}^k L^{j-1}\| x_1- x_0\|
  & = & L^s(1+L+\cdots+L^{k-s-1})\| x_1- x_0\| \\ \
    & \le & \frac{L^s}{1-L}\| x_1- x_0\|.
\end{matrix}</math></center>
Ciąg <math>\{ x_k\}_k</math> jest więc ciągiem Cauchy'ego.
Stąd istnieje granica
<math>\vec\alpha=\lim_{k\to\infty} x_k</math>, która należy do
<math>D_0</math>, wobec domkniętości tego zbioru. Ponieważ
lipschitzowskość <math>\phi</math> implikuje jej ciągłość,
mamy też 
<center><math>\phi(\vec\alpha)\,=\,\phi\Big(\lim_{k\to\infty} x_k\Big)
  \,=\,\lim_{k\to\infty}\phi( x_k)
  \,=\,\lim_{k\to\infty} x_k\,=\,\vec\alpha</math>,</center>
tzn. <math>\vec\alpha</math> jest punktem stałym odwzorowania <math>\phi</math>.
Dla jednoznaczności zauważmy, że jeśliby istniał
drugi, różny od <math>\vec\alpha</math>, punkt stały <math>\vec\beta</math>,
to mielibyśmy
<center><math>\|\vec\alpha-\vec\beta\|\,=\,
  \|\phi(\vec\alpha)-\phi(\vec\beta)\|
  \,\le\,L\,\|\vec\alpha-\vec\beta\|.
</math></center>
Stąd <math>1<L</math>, co jest sprzeczne z założeniem, że
<math>\phi</math> jest zwężająca. }}
Z powyższych rozważań otrzymujemy natychmiastowy
wniosek dotyczący zbieżności iteracji prostych.
{{wniosek|||
Przy założeniach [[twit|Uzupe�nij: twierdzenia Banacha]],
metoda iteracji prostych jest zbieżna co
najmniej liniowo z ilorazem <math>L</math>, tzn.
<center><math>\| x_k- x^*\|\,\le\,L^k\,\| x_0- x^*\|</math></center>
}}
{{przyklad|||
Dla ilustracji, rozpatrzmy natępujące proste
równanie skalarne:
<center><math>
  x\,=\,\cos(x), \qquad \mbox{dla} \qquad x\in D= R.
</math></center>
W tym przypadku <math>\phi(x)=\cos(x)</math>. Zauważamy, że w
przedziale <math>[0,1]</math> funkcja <math>\phi</math> jest zwężająca ze
stałą
<center><math>L\,=\,\max_{0\le x\le 1}|\cos'(x)|\,=\,\sin(1)\,<\,1</math></center>
Stąd istnieje dokładnie jedno rozwiązanie naszego równania
w przedziale <math>[0,1]</math>. Rozwiązanie to może
być aproksymowane z dowolnie małym błędem przy pomocy
iteracji prostych, startując z dowolnego przybliżenia
początkowego <math>x_0\in [0,1]</math>.
}}
Zaletą iteracji prostych jest fakt, że zbieżność
nie zależy od wymiaru <math>n</math> zadania, ale tylko od stałej
Lipschitza <math>L</math> (jednak w praktyce czasem sama stała Lipschitza może zależeć od
wymiaru zadania...). Metoda Banacha ma szczególne zastosowanie w
przypadku, gdy funkcja <math>\phi</math> jest zwężająca na całym
zbiorze <math>D</math>, tzn. <math>D_0=D</math>. Jeśli ponadto <math>D</math> ma
skończoną średnicę <math>\mbox{diam} (D)</math>, to dla
osiągnięcia <math>\epsilon</math>-aproksymacji zera funkcji <math>f</math>
wystarczy wykonać
<center><math>k\,=\,k(\epsilon)\,=\,\Big\lceil\frac
  {\log(\| x_0- x^*\|/\epsilon)}{\log(1/L)}\Big\rceil
  \,=\,\Big\lceil\frac
  {\log( \mbox{diam} (D)/\epsilon)}{\log(1/L)}\Big\rceil
</math></center>
iteracji, niezależnie od <math>x_0</math>. Metody zbieżne dla
dowolnego przybliżenia początkowego, nazywamy
''zbieżnymi globalnie''. Obie przedstawione dotychczas metody: bisekcji i
Banacha, przy rozsądnych
założeniach, są zbieżne globalnie.
Okazuje się, że metoda iteracji prostej może być --- w bardzo szczególnych
przypadkach --- zbieżna szybciej niż liniowo. Z taką sytuacją będziemy mieli,
gdy korzystać będziemy z metody Newtona.
==Wyznaczanie wektorów i wartości własnych==
==Wyznaczanie wektorów i wartości własnych==


Linia 4: Linia 165:
{{algorytm|Nie robiący nic||Leż}}
{{algorytm|Nie robiący nic||Leż}}


[[Image:MNkosztexpab.png|frame|400px|Wersja B]]
[[Image:MNkosztexpab.png|thumb|Wersja A]]
 
[[Image:MNkosztexpab.png|thumb|50px|Wersja B]]
 
[[Image:MNkosztexpab.png|frame|Wersja A]]
 
[[Image:MNkosztexpab.png|frame|200px|Wersja B]]


<div style="margin-top:1em; padding-top,padding-bottom:1em;">
<div style="margin-top:1em; padding-top,padding-bottom:1em;">
Linia 10: Linia 177:
<div class="exercise">
<div class="exercise">


Spróbuj obniżyć koszt wyznaczania <math>\displaystyle \exp(x)</math> dla dużych <math>\displaystyle x</math>!
Spróbuj obniżyć koszt wyznaczania <math>\exp(x)</math> dla dużych <math>x</math>!


<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"> Rzecz w tym, że dla dużych <math>\displaystyle x</math>, trzeba wziąć bardzo dużo wyrazów w szeregu
<div style="font-size:smaller; background-color:#efe"> Rzecz w tym, że dla dużych <math>x</math>, trzeba wziąć bardzo dużo wyrazów w szeregu
Taylora. Czy można tak wykombinować, by w rezultacie wziąć ich mniej? </div>
Taylora. Czy można tak wykombinować, by w rezultacie wziąć ich mniej? </div>
</div></div>
</div></div>
Linia 21: Linia 188:
<div class="mw-collapsible mw-made=collapsible mw-collapsed"><span class="mw-collapsible-toogle mw-collapsible-toogle-default style="font-variant:small-caps">Rozwiązanie </span><div class="mw-collapsible-content" style="display:none"><div style="margin-left:1em">   
<div class="mw-collapsible mw-made=collapsible mw-collapsed"><span class="mw-collapsible-toogle mw-collapsible-toogle-default style="font-variant:small-caps">Rozwiązanie </span><div class="mw-collapsible-content" style="display:none"><div style="margin-left:1em">   


Bez zmieniejszenia ogólności, załóżmy, że <math>\displaystyle x\geq 0</math>.
Bez zmieniejszenia ogólności, załóżmy, że <math>x\geq 0</math>.


Jeśli <math>\displaystyle x = k + t</math>, gdzie <math>\displaystyle t \in [0,1)</math>, a <math>\displaystyle k</math> jest całkowite, to oczywiście  
Jeśli <math>x = k + t</math>, gdzie <math>t \in [0,1)</math>, a <math>k</math> jest całkowite, to oczywiście  
<center><math>\displaystyle
<center><math>
e^x = e^{k+t} = e^k e^t = e^k \exp(t).
e^x = e^{k+t} = e^k e^t = e^k \exp(t)</math></center>
</math></center>


Tak więc zadanie redukuje się do wyznaczenia <math>\displaystyle \exp(t)</math> dla ''małego'' <math>\displaystyle t</math> oraz
Tak więc zadanie redukuje się do wyznaczenia <math>\exp(t)</math> dla ''małego'' <math>t</math> oraz
do co najwyżej <math>\displaystyle k</math> dodatkowych mnożeń potrzebnych do wyznaczenia całkowitej
do co najwyżej <math>k</math> dodatkowych mnożeń potrzebnych do wyznaczenia całkowitej
potęgi <math>\displaystyle e^k</math> (ile mnożeń ''naprawdę'' wystarczy?). Pamiętaj, przyjęliśmy, że
potęgi <math>e^k</math> (ile mnożeń ''naprawdę'' wystarczy?). Pamiętaj, przyjęliśmy, że
znamy reprezentację numeryczną liczby <math>\displaystyle e</math>.
znamy reprezentację numeryczną liczby <math>e</math>.


<div class="code" style="background-color:#e8e8e8; padding:1em"><pre>
<div class="code" style="background-color:#e8e8e8; padding:1em"><pre>

Aktualna wersja na dzień 21:48, 11 wrz 2023

Flash

<flash>file=Test19.swf|width=750|height=530</flash> http://osilek.mimuw.edu.pl/images/2/29/Test19.swf

Metoda iteracji prostej Banacha

&#0025; Zupełnie inne, i jak się okaże --- przy odrobinie sprytu bardzo skuteczne --- podejście do wyznaczania miejsca zerowego jest oparte na metodzie Banacha.

Najpierw nasze równanie nieliniowe

f(x)=0

przekształcamy (dobierając odpowiednią funkcję ϕ) do równania równoważnego (tzn. mającego te same rozwiązania)

x=ϕ(x).

Następnie, startując z pewnego przybliżenia początkowego x0, konstruujemy ciąg kolejnych przybliżeń xk według wzoru

xk=ϕ(xk1),k1

Twierdzenie Banacha, o zbieżności iteracji prostej

Niech D0 będzie domkniętym podzbiorem dziedziny D,

D0=D0D,

w którym ϕ jest odwzorowaniem zwężającym. To znaczy, ϕ(D0)D0, oraz istnieje stała 0L<1 taka, że

ϕ(x)ϕ(y)Lxy,x,yD0.

Wtedy równanie

x=ϕ(x).

ma dokładnie jedno rozwiązanie x*, oraz

x*=limkxk,

dla dowolnego przybliżenia początkowego x0D0.

Dowód

Wobec

xkxk1=ϕ(xk1)ϕ(xk2)Lxk1xk2 Lk1x1x0,

dla ks mamy

Parser nie mógł rozpoznać (nieznana funkcja „\begin{matrix}”): {\displaystyle \begin{matrix} \| x_k- x_s\| & \le & \sum_{j=s+1}^k\| x_j- x_{j-1}\| & \le & \sum_{j=s+1}^k L^{j-1}\| x_1- x_0\| & = & L^s(1+L+\cdots+L^{k-s-1})\| x_1- x_0\| \\ \ & \le & \frac{L^s}{1-L}\| x_1- x_0\|. \end{matrix}}

Ciąg {xk}k jest więc ciągiem Cauchy'ego. Stąd istnieje granica α=limkxk, która należy do D0, wobec domkniętości tego zbioru. Ponieważ lipschitzowskość ϕ implikuje jej ciągłość, mamy też

ϕ(α)=ϕ(limkxk)=limkϕ(xk)=limkxk=α,

tzn. α jest punktem stałym odwzorowania ϕ. Dla jednoznaczności zauważmy, że jeśliby istniał drugi, różny od α, punkt stały β, to mielibyśmy

αβ=ϕ(α)ϕ(β)Lαβ.

Stąd 1<L, co jest sprzeczne z założeniem, że

ϕ jest zwężająca.

Z powyższych rozważań otrzymujemy natychmiastowy wniosek dotyczący zbieżności iteracji prostych.

Wniosek

Przy założeniach Uzupe�nij: twierdzenia Banacha, metoda iteracji prostych jest zbieżna co najmniej liniowo z ilorazem L, tzn.

xkx*Lkx0x*

Przykład

Dla ilustracji, rozpatrzmy natępujące proste równanie skalarne:

x=cos(x),dlaxD=R.

W tym przypadku ϕ(x)=cos(x). Zauważamy, że w przedziale [0,1] funkcja ϕ jest zwężająca ze stałą

L=max0x1|cos(x)|=sin(1)<1

Stąd istnieje dokładnie jedno rozwiązanie naszego równania w przedziale [0,1]. Rozwiązanie to może być aproksymowane z dowolnie małym błędem przy pomocy iteracji prostych, startując z dowolnego przybliżenia początkowego x0[0,1].

Zaletą iteracji prostych jest fakt, że zbieżność nie zależy od wymiaru n zadania, ale tylko od stałej Lipschitza L (jednak w praktyce czasem sama stała Lipschitza może zależeć od wymiaru zadania...). Metoda Banacha ma szczególne zastosowanie w przypadku, gdy funkcja ϕ jest zwężająca na całym zbiorze D, tzn. D0=D. Jeśli ponadto D ma skończoną średnicę diam(D), to dla osiągnięcia ϵ-aproksymacji zera funkcji f wystarczy wykonać

k=k(ϵ)=log(x0x*/ϵ)log(1/L)=log(diam(D)/ϵ)log(1/L)

iteracji, niezależnie od x0. Metody zbieżne dla dowolnego przybliżenia początkowego, nazywamy zbieżnymi globalnie. Obie przedstawione dotychczas metody: bisekcji i Banacha, przy rozsądnych założeniach, są zbieżne globalnie.

Okazuje się, że metoda iteracji prostej może być --- w bardzo szczególnych przypadkach --- zbieżna szybciej niż liniowo. Z taką sytuacją będziemy mieli, gdy korzystać będziemy z metody Newtona.

Wyznaczanie wektorów i wartości własnych

Przykład Moj przykład

Tekst

Algorytm Nie robiący nic


 Leż
Wersja A
Wersja B
Wersja A
Wersja B

Ćwiczenie: Ciag dalszy

Spróbuj obniżyć koszt wyznaczania exp(x) dla dużych x!

Wskazówka
Rozwiązanie