MN02: Różnice pomiędzy wersjami

Z Studia Informatyczne
Przejdź do nawigacjiPrzejdź do wyszukiwania
Przykry (dyskusja | edycje)
Przykry (dyskusja | edycje)
Nie podano opisu zmian
Linia 1: Linia 1:
=Równania nieliniowe=
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%% makrodefinicje latex2mediawiki %%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%


W wielu zadaniach, m.in. z matematyki stosowanej, spotykamy się z problemem
% \lstoct{..} zamiast \lstoct!...!
rozwiązania skalarnego równania nieliniowego postaci <math>\displaystyle f(x) = 0</math>:
%%  \\lstC!([^!]*)!
* rozwiązywanie równania Keplera
%% \\lstC\{\1\}


<center><math>\displaystyle f(x) \equiv x - \epsilon \sin(x) = 0</math></center>
%% co z algorytmami?


To równanie jest bardzo ważne w astronomii.
%% Dla niektorych dokumentow moze byc konieczne dostosowanie
* znajdowanie miejsc zerowych wielomianu:
%% ponizszych makr.


<center><math>\displaystyle f(x) \equiv a_nx^n + \ldots +
\newcommand{\gdef}{\def}
a_1x + a_0 = 0</math></center>
\newcommand{\newenvironment}[3]{\newcommand{\begin#1}{ #2 }\newcommand{\end#1}{ #3 }}
\newcommand{\begin}[1]{\begin#1 }
\newcommand{\end}[1]{\end#1 }


Bardzo wiele modeli matematycznych wymaga rozwiązania równania z wielomianową
nieliniowością. [[sec:kwadratury|Dodaj link: Piękne kwadratury]] (Gaussa) opierają się na węzłach będących
zerami pewnego wielomianu. Wielomiany są bardzo szczególnymi funkcjami i dla
nich istnieje szereg specjalizowanych metod znajdowania ich pierwiastków, m.in.
metoda Laguerre'a, metoda Bairstow'a (o nich tu nie będziemy mówić), a także
zaskakujące metody sprowadzające zadanie poszukiwania miejsc zerowych wielomianu
do zupełnie innego zadania matematycznego  --- o nich jednak
będzie mowa dopiero w wykładzie dotyczącym [[sec:eigenvalue|Dodaj link: znajdowania wartości własnych
macierzy]].
* znajdowanie miejsc zerowych trójmianu kwadratowego:


<center><math>\displaystyle f(x) \equiv a_2x^2 +
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
a_1x + a_0 = 0.
\newcommand{\maketemplate3}[2]{
</math></center>
\newcommand{\begin#1}{


Jest to szczególny, ale oczywiście bardzo ważny (takie równania m.in. trzeba
###{###{#2\PIPE \PIPE \PIPE
było kiedyś rozwiązywać w artylerii) przypadek poprzedniego zadania. Chociaż
}
wydawać by  się mogło, że to umiemy już robić (wszyscy znamy wzory "z deltą")
\newcommand{\begin#1}[1]{
ale --- jak wkrótce się przekonamy --- i tutaj mogą spotkać nas niespodzianki!
* obliczanie pierwiastka kwadratowego z zadanej liczby <math>\displaystyle a</math>: 


<center><math>\displaystyle f(x) \equiv
###{###{#2\PIPE ##1\PIPE ##1\PIPE
x^2 - a = 0</math></center>
}
\newcommand{\end#1}{###}###}


czyli sposób na implementację funkcji "<code>sqrt()</code>". Szybkie algorytmy
}
wyznaczania pierwiastka kwadratowego były znane już starożytnym. W wykładzie
}
zrozumiemy, dlaczego metoda Herona,


[[grafika:Heron.jpg|thumb|right|| Heron<br>  [[Biografia Heron|Zobacz biografię]]]]


<center><math>\displaystyle
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
x_{k+1} = \frac{1}{2}\left(x_k + \frac{a}{x_k}\right)
\newcommand{\maketemplatealg}[2]{
</math></center>
\newcommand{\begin#1}{


daje bardzo dobre przybliżenie <math>\displaystyle \sqrt{a}</math> już po kilku iteracjach.
###{###{#2\PIPE \PIPE \PIPE
* implementacja wyznaczania odwrotności liczby <math>\displaystyle a</math> (<strong>bez</strong> dzielenia!):
<pre>\EATWS}
\newcommand{\begin#1}[1]{


<center><math>\displaystyle f(x) \equiv
###{###{#2\PIPE ##1\PIPE \PIPE
\frac{1}{x} - a = 0</math></center>
<pre>\EATWS}
\newcommand{\end#1}{</pre>###}###}


Wciąż spotykane zadanie, np. tak można w praktyce poprawić precyzję
}
[http://www.amd.com/us-en/assets/content_type/white_papers_and_tech_docs/21928.pdf  funkcji
}
wektorowych stosowanych w niektórych procesorach AMD]. Instrukcja procesora służąca do obliczania
odwrotności sekwencji liczb umieszczonych w 128-bitowym rejestrze wektorowym
daje wynik z małą precyzją (oczywiście po to, by wykonywała się szybciej!).
Jeśli taka dokładność wyniku nie odpowiada nam, możemy ją --- zgodnie z manualem
procesora --- poprawić, rozwiązując właśnie takie równanie jak powyżej, metodą
korzystającą wyłącznie z (wektorowych) operacji mnożenia i dodawania.


==Bisekcja==
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\newcommand{\makeexe}[2]{
\newcommand{\begin#1}{


<strong>Metoda bisekcji</strong>, czyli <strong>połowienia</strong>, często stosowana w innych
<div style\EQUAL "margin-top:1em; padding-top,padding-bottom:1em;">
<span  style\EQUAL "display: block; background-color:#fefeee; border-bottom: 1px solid #E5E5E5; line-height: 1.1em; padding-bottom: 0.2em; font-variant:small-caps; color:\HASH{}1A6ABF;">#2</span>
<div class\EQUAL "exercise">
 
}
\newcommand{\begin#1}[1]{
 
<div style\EQUAL "margin-top:1em; padding-top,padding-bottom:1em;">
<span  style\EQUAL "display: block; background-color:#fefeee; border-bottom: 1px solid #E5E5E5; line-height: 1.1em; padding-bottom: 0.2em; font-variant:small-caps; color:\HASH{}1A6ABF;">#2: ##1</span>
<div class\EQUAL "exercise">
 
}
\newcommand{\end#1}{</div></div>
 
}
}
 
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\newcommand{\makesol}[2]{
\newcommand{\begin#1}{
 
<div style\EQUAL "margin-top:1em; padding-top,padding-bottom:1em;">
<span  style\EQUAL "font-variant:small-caps;">#2</span>
<div class\EQUAL "solution" style\EQUAL "margin-left,margin-right:3em;">
 
}
\newcommand{\begin#1}[1]{
 
<div style\EQUAL "margin-top:1em; padding-top,padding-bottom:1em;">
<span  style\EQUAL "font-variant:small-caps;">#2: ##1</span>
<div class\EQUAL "solution" style\EQUAL "margin-left,margin-right:3em;">
 
}
\newcommand{\end#1}{</div></div>
 
}
}
 
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\newcommand{\makehider}[2]{
\newcommand{\begin#1}{
 
<div class="mw-collapsible mw-made=collapsible mw-collapsed"><span class="mw-collapsible-toogle mw-collapsible-toogle-default style\EQUAL "font-variant:small-caps">#2 </span><div class="mw-collapsible-content" style="display:none"><div style\EQUAL "margin-left:1em"> }
\newcommand{\end#1}{</div></div></div>
 
}
\newcommand{#\#1}[1]{
 
<div class="mw-collapsible mw-made=collapsible mw-collapsed"><span class="mw-collapsible-toogle mw-collapsible-toogle-default style\EQUAL "font-variant:small-caps">#2 </span><div class="mw-collapsible-content" style="display:none">
<div style\EQUAL "margin-left:1em"> ##1 </div>
</div></div>
 
}
}
 
\newcommand{\makehidersmall}[2]{
\newcommand{\begin#1}{
 
<div class="mw-collapsible mw-made=collapsible mw-collapsed"><span class="mw-collapsible-toogle mw-collapsible-toogle-default style\EQUAL "font-variant:small-caps">#2 </span><div class="mw-collapsible-content" style="display:none"> }
\newcommand{\end#1}{</div></div>
 
}
\newcommand{#\#1}[1]{
 
<div class="mw-collapsible mw-made=collapsible mw-collapsed"><span class="mw-collapsible-toogle mw-collapsible-toogle-default style\EQUAL "font-variant:small-caps">#2 </span><div class="mw-collapsible-content" style="display:none">
<div style\EQUAL "font-size:smaller; background-color:#f9fff9; padding: 1em"> ##1 </div>
</div></div>
 
}
}
 
 
\newcommand{\maketemplate2}[2]{
\newcommand{\begin#1}{
 
###{###{#2\PIPE \PIPE
}
\newcommand{\begin#1}[1]{
 
###{###{#2\PIPE ##1\PIPE
}
\newcommand{\end#1}{###}###}
 
}
\newcommand{#\#1}[1]{
 
###{###{#2\PIPE \PIPE
##1
###}###}
 
}
}
 
%% UWAGA UWAGA UWAGA
%% Koniecznie prosze dopisac tutaj swoje srodowiska
%% tworzone za pomoca \newtheorem.
\maketemplate3{definicja}{definicja}
\maketemplate3{definition}{definicja}
\maketemplate3{def}{definicja}
\maketemplate3{defin}{definicja}
\maketemplate3{dfn}{definicja}
\maketemplate3{df}{definicja}
\maketemplate3{twierdzenie}{twierdzenie}
\maketemplate3{theorem}{twierdzenie}
\maketemplate3{theor}{twierdzenie}
\maketemplate3{thm}{twierdzenie}
\maketemplate3{tw}{twierdzenie}
\maketemplate3{stwierdzenie}{stwierdzenie}
\maketemplate3{stw}{stwierdzenie}
\maketemplate3{proposition}{stwierdzenie}
\maketemplate3{prop}{stwierdzenie}
\maketemplate3{lemat}{lemat}
\maketemplate3{lem}{lemat}
\maketemplate3{lemma}{lemat}
\maketemplate3{uwaga}{uwaga}
\maketemplate3{uwa}{uwaga}
\maketemplate3{obserwacja}{uwaga}%NOWE
\maketemplate3{remark}{uwaga}
% \maketemplate3{rem}{uwaga}
\maketemplate3{wniosek}{wniosek}
\maketemplate3{wn}{wniosek}
\maketemplate3{corollary}{wniosek}
\maketemplate3{corol}{wniosek}
\maketemplate3{conjecture}{wniosek}
\maketemplate3{cor}{wniosek}
\maketemplate3{con}{wniosek}
\maketemplate3{fakt}{fakt}
\maketemplate3{fa}{fakt}
\maketemplate3{fact}{fakt}
\maketemplate3{dowod}{dowod}
\maketemplate3{dw}{dowod}
\maketemplate3{proof}{dowod}
\maketemplate3{prf}{dowod}
\maketemplate3{przyklad}{przyklad}
\maketemplate3{prz}{przyklad}
\maketemplate3{kontrprzyklad}{kontrprzyklad}%NOWE
\maketemplate3{counterexample}{kontrprzyklad}%NOWE
% \maketemplate3{example}{przyklad}
\maketemplate3{exa}{przyklad}
\maketemplate3{exm}{przyklad}
\maketemplate3{cwiczenie}{cwiczenie}
\maketemplate3{zadanie}{cwiczenie}
\maketemplate3{zadan}{cwiczenie}
\maketemplate3{zad}{cwiczenie}
\maketemplate3{exercise}{cwiczenie}
% \maketemplate3{exe}{cwiczenie}
\makeexe{exe}{Ćwiczenie}
% \makesol{sol}{Rozwiązanie}
\makesol{example}{Przykład}
\makesol{rem}{Uwaga}
 
%\maketemplate3{ex}{cwiczenie}
\maketemplate3{ex}{przyklad}
 
\maketemplate3{EX}{cwiczenie}
\maketemplate3{cw}{cwiczenie}
\maketemplate3{zad}{cwiczenie}
\maketemplate3{zd}{cwiczenie}
\maketemplate3{obserwacja}{obserwacja}
\maketemplate3{obserwacje}{obserwacje}
\maketemplate3{obs}{obserwacja}
\makehidersmall{wskazowka}{Wskaz�wka}
\makehidersmall{hint}{Wskazówka}
\makehidersmall{wsk}{Wskaz�wka}
\maketemplate2{pytanie}{pytanie}%NOWE
\maketemplate2{question}{pytanie}%NOWE
\maketemplate3{odpowiedz}{odpowiedz}
\maketemplate3{odp}{odpowiedz}
\makehider{ans}{Odpowied�}
\maketemplate3{problem}{problem}
\makehider{rozwiazanie}{Rozwi�zanie}
\makehider{rozw}{Rozwi�zanie}
\makehider{solution}{Rozwi�zanie}
\makehider{sol}{Rozwiązanie}
\makehider{slv}{Rozwi�zanie}
 
%\maketemplate3{algorithm}{algorytm}
\maketemplate3{algorithmic}{algorytm}
 
 
\maketemplatealg{alg}{algorytm}
% \maketemplatealg{C}{kod}
% \maketemplatealg{F}{kod}
% \maketemplatealg{ux}{kod}
% \maketemplatealg{make}{kod}
% \maketemplatealg{oct}{kod}
% \maketemplatealg{outoct}{wyniki}
% \maketemplatealg{outux}{wyniki}
 
\newcommand{\beginC}{\NOCOMMENT <div style\EQUAL "margin: 1em; padding:1em; color: #000; background-color:#fcfcfc;"><pre>\EATWS}
\newcommand{\endC}{</pre></div>\NOCOMMENT
}
 
\newcommand{\beginF}{\NOCOMMENT <div style\EQUAL "margin: 1em; padding:1em; color: #903; background-color:#fcfcfc;"><pre>\EATWS}
\newcommand{\endF}{</pre></div>\NOCOMMENT
}
 
\newcommand{\beginoct}{\NOCOMMENT <div style\EQUAL "margin: 1em; padding:1em; color: #006; background-color:#fcfcfc;"><pre>\EATWS}
\newcommand{\endoct}{</pre></div>\NOCOMMENT
}
 
\newcommand{\beginux}{<div style\EQUAL "font-family: monospace; white-space: pre; border-style: dashed; border-width: thin; border-color: black; margin: 1em; padding:1em; color: #444; background-color:#fcfcfc;"><nowiki>\EATWS}
\newcommand{\endux}{</nowiki></div>
}
 
\newcommand{\beginmake}{\NOCOMMENT <div class\EQUAL "code" style\EQUAL "background-color:#e8e8e8; padding:1em; margin-top,margin-bottom: 1em; margin-left,margin-right:2em;"><pre>
}
\newcommand{\endmake}{</pre></div>\NOCOMMENT
}
 
\newcommand{\beginoutoct}{<div style\EQUAL "font-family: monospace; white-space: pre; border-style: dashed; border-width: thin; border-color: black; margin: 1em; padding:1em; color: #444; background-color:#fdfdfd;"><nowiki>\EATWS}
\newcommand{\endoutoct}{</nowiki></div>
}
 
\newcommand{\beginoutux}{<div style\EQUAL "font-family: monospace; white-space: pre; border-style: dashed; border-width: thin; border-color: black; margin: 1em; padding:1em; color: #444; background-color:#fdfdfd;"><nowiki>\EATWS}
\newcommand{\endoutux}{</nowiki></div>
}
 
%\newcommand{\beginalgorithmic}{
%}
%\newcommand{\endalgorithmic}{
%}
\newcommand{\STATE}{}
\newcommand{\STATE}[1]{ #1 }
\newcommand{\FOR}[1]{{\bf for} #1 }
\newcommand{\ENDFOR}{{\bf endfor}}
\newcommand{\IF}[1]{{\bf if} #1 }
\newcommand{\ELSE}{{\bf else}}
\newcommand{\ELSEIF}[1]{{\bf else if} #1 }
\newcommand{\ENDIF}{{\bf endif}}
\newcommand{\WHILE}[1]{{\bf while} #1 }
\newcommand{\ENDWHILE}{{\bf endwhile}}
\newcommand{\END}{{\bf end}}
\newcommand{\RETURN}{{\bf return}}
\newcommand{\RETURN}[1]{{\bf return } #1 }
 
 
\newcommand{\section}[1]{\EQUAL #1\EQUAL
 
 
}
\newcommand{\section*}[1]{\EQUAL #1\EQUAL
 
 
}
\newcommand{\cwiczenia*}[1]{\EQUAL #1\EQUAL
 
 
}
\newcommand{\subsection*}[1]{\EQUAL \EQUAL #1\EQUAL \EQUAL
 
 
}
\newcommand{\subsubsection*}[1]{\EQUAL \EQUAL \EQUAL #1\EQUAL \EQUAL \EQUAL
 
 
}
\newcommand{\subsection}[1]{\EQUAL \EQUAL #1\EQUAL \EQUAL
 
 
}
\newcommand{\subsubsection}[1]{\EQUAL \EQUAL \EQUAL \EQUAL #1\EQUAL \EQUAL \EQUAL \EQUAL
 
 
}
\newcommand{\paragraph}[1]{
 
 
}
\newcommand{\subparagraph}[1]{
 
 
}
\newcommand{\part}[1]{
 
 
}
 
%% TEGO SIE POZBYWAMY
\newcommand{\documentclass}[1]{}
\newcommand{\usepackage}[1]{}
\newcommand{\usepackage}[2]{}
\newcommand{\maketitle}{}
\newcommand*{\vspace}[1]{ }
\newcommand*{\color}[1]{ }
\newcommand{\pagestyle}[1]{}
\newcommand{\tableofcontents}{}
\newcommand{\theoremstyle}[1]{}
\newcommand{\documentenvironment}[]{}
\newcommand{\begindocument}[]{}
\newcommand{\enddocument}[]{}
\newcommand*{\rm}[0]{}
\newcommand{\Proof}[1]{ #1 }
\newcommand*{\bee}{}
\newcommand*{\ep}{}
\newcommand*{\hspace*}{}
\newcommand*{\fill}[1]{}
\newcommand*{\index}[1]{}
\newcommand*{\medskip}{
 
}
\newcommand*{\bigskip}{
 
}
\newcommand{\index}[1]{ }
 
%\newcommand{\newtheorem}[3]{
%\newcommand{\begin#1}{
%
%$\EQUAL \EQUAL \EQUAL \EQUAL #3\EQUAL \EQUAL \EQUAL \EQUAL
%
%}
%
%\newcommand{\end#1}{
%
%}
%}
%
%\newcommand{\newtheorem*}[2]{
%\newcommand{\begin#1}{
%
%\EQUAL \EQUAL \EQUAL \EQUAL #2\EQUAL \EQUAL \EQUAL \EQUAL
%
%}
%
%\newcommand{\end#1}{
%
%}
%}
 
%% FORMATOWANIE
\newcommand*{\it}[1]{\QUOTE \QUOTE #1\QUOTE \QUOTE }
\newcommand*{\sl}[1]{\QUOTE \QUOTE #1\QUOTE \QUOTE }
\newcommand*{\em}[1]{<strong>#1</strong>}
\newcommand*{\bf}[1]{\QUOTE \QUOTE \QUOTE #1\QUOTE \QUOTE \QUOTE }
\newcommand*{\tt}[1]{<tt>#1</tt>}
\newcommand*{\textrm}[1]{#1}
\newcommand*{\underline}[1]{#1}
\newcommand*{\textnormal}[1]{#1}
\newcommand*{\textsf}[1]{#1}
\newcommand*{\texttt}[1]{<tt>#1</tt>}
\newcommand*{\textmd}[1]{#1}
\newcommand*{\emph}[1]{<strong>#1</strong>}
%\newcommand*{\textsc}[1]{ <span style\EQUAL "font-variant:small-caps"> #1 </span> }
\newcommand*{\textsc}[1]{\QUOTE \QUOTE #1\QUOTE \QUOTE }
\newcommand*{\textbf}[1]{\QUOTE \QUOTE \QUOTE #1\QUOTE \QUOTE \QUOTE }
\newcommand*{\textup}[1]{#1}
\newcommand*{\textit}[1]{\QUOTE \QUOTE #1\QUOTE \QUOTE }
\newcommand*{\textsl}[1]{\QUOTE \QUOTE #1\QUOTE \QUOTE }
 
\newcommand*{\\}{<br>}
\newcommand*{\newline}{<br>}
% \newcommand*{\mbox}[1]{#1}
 
 
\newcommand*{\rysunek}[2]{[[Image:MN#1\PIPE thumb\PIPE 550px\PIPE center\PIPE #2]]}
\newcommand*{\wikirysunek}[2]{[[Image:#1\PIPE thumb\PIPE 400px\PIPE \PIPE #2]]}
\newcommand*{\rysunekmaly}[2]{[[Image:MN#1\PIPE thumb\PIPE 300px\PIPE center\PIPE #2]]}
\newcommand*{\flash}[2]{<div class\EQUAL "center"><div class\EQUAL "thumb tnone"><div style\EQUAL "width:552px;"><flash>file\EQUAL #1\PIPE width\EQUAL 550\PIPE height\EQUAL 300</flash> <div class\EQUAL "thumbcaption">#2</div></div></div></div>}
\newcommand*{\href}[2]{[#1  #2]}
\newcommand*{\url}[1]{#1}
\newcommand*{\link}[3]{[[#1\PIPE #3]]}
\newcommand{\thmlink}[3]{[[#1###2\PIPE #3]]}
\newcommand*{\wikilink}[2]{[[#1\PIPE #2]]}
\newcommand*{\lstC}[1]{<code>#1</code>}
\newcommand*{\lstF}[1]{<code style\EQUAL "color: #903">#1</code>}
\newcommand*{\lstCs}[1]{<code>#1</code>}
\newcommand*{\lstFs}[1]{<code style\EQUAL "color: #903">#1</code>}
\newcommand*{\lstoct}[1]{<code style\EQUAL "color: #006">#1</code>}
\newcommand*{\lstux}[1]{<code style\EQUAL "color: #666">#1</code>}
\newcommand*{\ang}[1]{\QUOTE \QUOTE #1\QUOTE \QUOTE }
\newcommand*{\CHECK}[1]{ }
% \newcommand*{\cite}[1]{\QUOTE \QUOTE \QUOTE (Uzupe�nij: #1)\QUOTE \QUOTE \QUOTE }
\newcommand*{\cite}[1]{}
 
\newcommand*{\biografia}[3]{[[grafika:#2.jpg\PIPE thumb\PIPE right\PIPE \PIPE #1 #2<br> #3 [[Biografia #2\PIPE Zobacz biografię]]]]}
 
\newcommand{\ksiazka}[3]{
* <span style="font-variant:small-caps">#1</span>, <cite>#2</cite>, #3}
 
\newcommand{\literatura}[1]{\EQUAL\EQUAL Literatura\EQUAL\EQUAL
 
W celu dogłębnego zapoznania się z omawianym na wykładzie materiałem, przeczytaj <b>rozdział #1</b> w
 
* D. Kincaid, W. Cheney <cite>Analiza numeryczna</cite>, Wydawnictwa Naukowo-Techniczne, Warszawa 2006, ISBN 83-204-3078-X.
}
 
% z dane.tex
 
\newcommand{\Dane}{F}
\newcommand{\Alg}{{\bf ALG}}
\newcommand{\Info}{N}
\newcommand{\Wyniki}{G}
\newcommand{\Oprozw}{S}
\newcommand{\dana}{f}
\newcommand{\wynik}{g}
\newcommand{\R}{R}
\newcommand{\rd}{rd_\nu}
\newcommand{\flo}{fl_\nu}
\newcommand{\cond}{\mbox{cond}}
\newcommand{\macheps}{\epsilon_{\mbox{mach}}}
\newcommand{\CHECK}[1]{({\bf Do sprawdzenia: #1})}
 
%% SYMBOLE
 
\newcommand*{\ldots}{...}
\newcommand*{\copyright}{(c)}
%\newcommand*{\pounds}{$}
\newcommand*{\LaTeXe}{LaTeX2e}
\newcommand*{\LaTeX}{LaTeX}
\newcommand*{\TeX}{TeX}
 
%% LISTY
 
%% IMPLEMENTACJA STOSU
\newcommand{\FIRST}[2]{#1}
\newcommand{\STACK}[1]{#1{}{}}
\newcommand{\APPEND1}[3]{\renewcommand{\STACK}[1]{##1{#1#3}{{#1}{#2}}}}
\newcommand{\APPEND}[1]{\STACK[\APPEND1][#1]}
\newcommand{\POP1}[2]{\renewcommand{\STACK}[1]{##1#2}}
\newcommand{\POP}{\STACK[\POP1]}
\newcommand{\TOP}{\STACK[\FIRST]}
\newcommand{\HASH}[1]{##} % potrzebne, bo hashe so redukowane przy instancjalizacji
 
\newcommand{\beginenumerate}{\APPEND[\HASH{}]}
\newcommand{\endenumerate}{\POP}
\newcommand{\beginitemize}{\APPEND[*]}
\newcommand{\enditemize}{\POP}
\newcommand{\begindescription}{\APPEND[:]}
\newcommand{\enddescription}{\POP}
\newcommand{\item}[1]{
\POP\TOP; #1
\TOP:\APPEND[:] }
\newcommand{\item}{
\TOP }
 
%% ROWNANIA
\newcommand{\beginequation}{
 
$$\EATWS }
\newcommand{\endequation}{$$
 
}
 
\newcommand{\begincomment}{<!--}
\newcommand{\endcomment}{-->
}
 
 
\newcommand{\beginlatexonly}{<!--}
\newcommand{\endlatexonly}{-->
}
 
 
\newcommand{\beginequation*}{
 
$$\EATWS }
\newcommand{\endequation*}{$$
 
}
 
\newcommand{\begindisplaymath}{
 
$$\EATWS }
\newcommand{\enddisplaymath}{$$
 
}
\newcommand{\beginmath}{$\EATWS }
\newcommand{\endmath}{$}
 
\newcommand{\beginquote}{<blockquote  style\EQUAL "background-color: #fefeee; padding:1em;  margin-left,margin-right:2em;  margin-top,margin-bottom: 1em;"> }
\newcommand{\endquote}{</blockquote>}
\newcommand{\beginbadquote}{<blockquote  style\EQUAL "background-color:#fefeee; text-decoration: line-through; border-style:dashed; border-color:red; border-width: thin; padding:1em;  margin-top,margin-bottom: 1em;"> }
\newcommand{\endbadquote}{</blockquote>}
 
\newcommand{\begineqnarray*}{
 
$$\aligned \EATWS }
\newcommand{\endeqnarray*}{\endaligned$$
 
}
\newcommand{\begineqnarray}{
 
$$\aligned \EATWS }
\newcommand{\endeqnarray}{\endaligned$$
 
}
\newcommand{\beginalign*}{
 
$$\aligned \EATWS }
\newcommand{\endalign*}{\endaligned$$
 
}
\newcommand{\beginalign}{
 
$$\aligned \EATWS }
\newcommand{\endalign}{\endaligned$$
 
}
\newcommand{\[}{
 
$$\EATWS }
\newcommand{\]}{$$
 
 
}
\newcommand{\(}{ $\EATWS }
\newcommand{\)}{ $ }
 
%% LINKI
%\newcommand*{\label}[1]{{{kotwica\PIPE #1\PIPE }}}
\newcommand{\label}[1]{}
\newcommand{\kotwa}[1]{<span id\EQUAL "#1"></span>
}
\newcommand{\ref}[1]{[[#####1\PIPE Uzupelnic: #1 ]]}
 
%% TABELKI
 
\renewcommand*{\begintabular}[1]{
\TABULARMODE
\renewcommand*{\\}{
\PIPE -
\PIPE  \EATWS }
\renewcommand*{\hline}{}
#{\PIPE  border\EQUAL 1
\PIPE + <span style\EQUAL "font-variant:small-caps"> </span>
\PIPE -
\PIPE  \EATWS }
 
\renewcommand*{\begintabular}[2]{
\TABULARMODE
\renewcommand*{\\}{
\PIPE -
\PIPE  \EATWS }
\renewcommand*{\hline}{}
#{\PIPE  border\EQUAL 1
\PIPE + <span style\EQUAL "font-variant:small-caps">Uzupelnij tytul</span>
\PIPE -
\PIPE  \EATWS }
 
\renewcommand*{\begintabular*}[3]{
\TABULARMODE
\renewcommand*{\\}{
\PIPE -
\PIPE  \EATWS }
\renewcommand*{\hline}{}
#{\PIPE  border\EQUAL 1
\PIPE + <span style\EQUAL "font-variant:small-caps">Uzupelnij tytul</span>
\PIPE -
\PIPE  \EATWS }
 
\renewcommand*{\endtabular}{
\TABULARMODE
\renewcommand*{\\}{<br>}
\PIPE #}
\renewcommand*{\hline}{
 
<hr>
 
}
}
 
\newcommand*{\hline}{
 
<hr>
 
}
 
\newcommand{\MATHEMBEDDEFSTRUE}{\renewcommandM{\textnormal}[1]{ $ #1 $ }\renewcommandM{\textrm}[1]{ $ #1 $ }\renewcommandM{\mbox}[1]{ \BACKSLASH mbox{#1} }\renewcommandM{\hbox}[1]{ $ #1 $ }}
\newcommand{\MATHEMBEDDEFSFALSE}{\renewcommandM{\textnormal}[1]{\BACKSLASH textnormal{#1}}\renewcommandM{\textrm}[1]{\BACKSLASH textrm{#1}}\renewcommandM{\mbox}[1]{\BACKSLASH mbox{#1}}\renewcommandM{\hbox}[1]{\BACKSLASH hbox{#1}}}
\newcommandM{\beginarray}{\MATHEMBEDDEFSFALSE\BACKSLASH begin{array}}
\newcommandM{\endarray}{\MATHEMBEDDEFSTRUE\BACKSLASH end{array}}
\newcommandM{\beginpmatrix}{\MATHEMBEDDEFSFALSE\BACKSLASH begin{pmatrix}}
\newcommandM{\endpmatrix}{\MATHEMBEDDEFSTRUE\BACKSLASH end{pmatrix}}
\MATHEMBEDDEFSTRUE
 
\newcommand{\enablenowiki}{\renewcommand{\beginnowiki}{<nowiki>}\renewcommand{\endnowiki}{</nowiki>}}
\newcommand{\disablenowiki}{\renewcommand{\beginnowiki}{}\renewcommand{\endnowiki}{}}
\enablenowiki
 
\newcommand*{\EQUALREAD}{\EQUAL}
 
\newcommand{\%}{&#37;} %%% zamienia znak \% na taki, ktory da sie przezyc
 
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\begin{comment}
Konwertowane  z pliku LaTeX przez latex2mediawiki, zob. http://www.ii.uj.edu.pl/~pawlik1/latex2mediawiki.php.
Niezb�dne rozszerzenia i modyfikacje oryginalnego latex2mediawiki
wprowadzi� przykry@mimuw.edu.pl
\end{comment}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 
\section{Równania nieliniowe}
\label{MN02}
 
 
W wielu zadaniach, m.in. matematyki stosowanej, spotykamy się z problemem
rozwiązania skalarnego równania nieliniowego postaci $f(x) = 0$. Oto kilka przykładów:
 
\begin{example}
Równanie Keplera
\[
f(x) \equiv x - \epsilon \sin(x) - M = 0
\]
jest bardzo ważne w astronomii, jego rozwiązanie pozwala wyznaczyć przyszłe położenie planety. Parametr $\epsilon$ odpowiada ekscentryczności orbity i przyjmuje wartości z przedziału $[0,1]$. Poza paru prostymi przypadkami, w ogólności równanie Keplera nie daje się rozwiązać w terminach funkcji elementarnych.
 
\biografia{Johann}{Kepler}{}
 
\end{example}
 
\begin{example}
Znajdowanie miejsc zerowych wielomianu
\[
f(x) \equiv a_nx^n + \ldots + a_1x + a_0 = 0.
\]
Bardzo wiele modeli matematycznych wymaga rozwiązania równania z wielomianową nieliniowością. Piękne \link{MN14}{MN14}{kwadratury} (Gaussa) opierają się na węzłach będących zerami pewnego wielomianu. Wielomiany są bardzo szczególnymi funkcjami i dla nich istnieje szereg wyspecjalizowanych metod znajdowania ich pierwiastków, m.in. metoda Laguerre'a, metoda Bairstow'a (o nich tu nie będziemy mówić), a także zaskakujące metody sprowadzające zadanie poszukiwania miejsc zerowych wielomianu do zupełnie innego zadania matematycznego  --- o nich jednak będzie mowa dopiero w wykładzie dotyczącym \link{MN13}{MN13}{znajdowania wartości własnych macierzy}.
\end{example}
 
\begin{example}
Obliczanie pierwiastka kwadratowego z zadanej liczby $a$, czyli sposób na implementację funkcji ,,\lstC{sqrt()}''.  Można to zadanie wyrazić, jako rozwiązywanie równania
\[
f(x) \equiv x^2 - a = 0.
\]
Szybkie algorytmy wyznaczania pierwiastka kwadratowego były znane już starożytnym. W wykładzie zrozumiemy, dlaczego \emph{metoda Herona},
 
%\biografia{}{Heron}{}
 
$$
x_{k+1} = \frac{1}{2}\left(x_k + \frac{a}{x_k}\right)
$$
daje bardzo dobre przybliżenie $\sqrt{a}$ już po kilku iteracjach.
\end{example}
 
\begin{example}
Implementacja wyznaczania odwrotności liczby $a$ (\emph{bez} dzielenia!) jest możliwa, gdy odpowiednią metodą będziemy poszukiwać rozwiązania równania
\[
f(x) \equiv \frac{1}{x} - a = 0.
\]
To zadanie jest ważne praktycznie, np. tak można poprawić precyzję
\href{http://www.amd.com/us-en/assets/content_type/white_papers_and_tech_docs/21928.pdf}{funkcji wektorowych stosowanych w niektórych procesorach AMD}. Okazuje się, że instrukcja procesora służąca do równoległego obliczania odwrotności sekwencji liczb umieszczonych w 128-bitowym rejestrze wektorowym daje wynik z małą precyzją (oczywiście po to, by wykonywała się szybciej!). Jeśli taka dokładność wyniku nie odpowiada nam, możemy ją --- zgodnie z manualem procesora --- poprawić, rozwiązując właśnie takie równanie jak powyżej, metodą korzystającą wyłącznie z (wektorowych) operacji mnożenia i dodawania.
\end{example}
 
\subsection{Bisekcja}
 
\emph{Metoda bisekcji}, czyli \emph{połowienia}, często stosowana w innych
działach informatyki, jest dość  
działach informatyki, jest dość  
naturalną metodą obliczania zer skalarnych funkcji  
naturalną metodą obliczania zer skalarnych funkcji  
ciągłych określonych na danym przedziale <math>\displaystyle [a,b]</math>
ciągłych określonych na danym przedziale $[a,b]$
i zmieniających znak. Dokładniej, rozpatrzmy klasę  
i zmieniających znak. Dokładniej, rozpatrzmy klasę  
funkcji  
funkcji  


<center><math>\displaystyle
\begin{equation}
   F\,=\,\{\,f\in C([a,b])\,:\;f(a)\cdot f(b) < 0\,\}.
\label{dfkl}
</math></center>
   F\,=\,\{\,f\in C([a,b])\,:\;f(a)\cdot f(b) < 0\,\},
\end{equation}


Oczywiście, każda funkcja <math>\displaystyle f\in F</math> ma co najmniej jedno  
to znaczy $f \in F$ przyjmują w krańcach przedziału wartości przeciwnego znaku. 
zero w <math>\displaystyle [a,b]</math>. Startując z przedziału <math>\displaystyle [a,b]</math>, w  
Oczywiście, każda funkcja $f\in F$ ma, na mocy twierdzenia Darboux, co najmniej jedno zero w $[a,b]$. Startując z przedziału $[a,b]$, w kolejnych krokach metody bisekcji obliczamy informację o wartości $f$ w środku przedziału, co pozwala nam w następnym kroku zmniejszyć o połowę przedział, w którym na pewno znajduje się zero funkcji.  
kolejnych krokach metody bisekcji obliczamy informację  
o wartości <math>\displaystyle f</math> w środku przedziału, co pozwala nam  
w zależności od znaku obliczonej wartości zmniejszyć  
o połowę przedział, w którym na pewno znajduje się  
zero funkcji.  


Bisekcję realizuje następujący ciąg  
Bisekcję realizuje następujący ciąg  
poleceń, po wykonaniu którego <math>\displaystyle x</math> jest przybliżeniem  
poleceń, po wykonaniu którego $x$ jest przybliżeniem  
zera funkcji <math>\displaystyle f</math> z zadaną dokładnością <math>\displaystyle \epsilon</math>.  
zera funkcji $f$ z zadaną dokładnością $\epsilon$.  
 
\begin{C}[Metoda bisekcji]
{{algorytm|Metoda bisekcji||
lewy = a; prawy = b;
<pre>
flewy = f(lewy); fprawy = f(prawy);
 
x = (a+b)/2; /* przybliżenie rozwiązania */
xl <nowiki> =</nowiki>    a; xr <nowiki> =</nowiki>    b;
e = (b-a)/2; /* przedział lokalizujący rozwiązanie dokładne */
x <nowiki> =</nowiki>    (a+b)/2; e <nowiki> =</nowiki>    (b-a)/2;
while (e > $\epsilon$)  
while (e > <math>\displaystyle \epsilon</math>)  
{
{
if (f(x)*f(xl) < 0)
fx = f(x);  /* reszta */
xr <nowiki> =</nowiki>    x;
if ( signbit(fx) != signbit(flewy) )
{
prawy = x;
fprawy = fx;
}
else
else
xl <nowiki> =</nowiki>    x;
{
x <nowiki> =</nowiki>    (xl+xr)/2; e <nowiki> =</nowiki>    e/2;
lewy = x;
flewy = fx;
}
x = (lewy+prawy)/2; e = e/2;
}  
}  
</pre>}}
\end{C}


Z konstrukcji metody wyraźnie wynika, że po wykonaniu  
(funkcja języka C \lstC{signbit} bada znak liczby rzeczywistej).
<math>\displaystyle k</math> iteracji (czyli po obliczeniu <math>\displaystyle k</math> wartości funkcji)  
otrzymujemy <math>\displaystyle x</math>, które odległe jest od pewnego  
Z konstrukcji metody łatwo wynika, że po wykonaniu  
rozwiązania <math>\displaystyle x^*</math> o co najwyżej  
$k$ obrotów pętli \lstC{while} (czyli po obliczeniu $k+2$ wartości funkcji)  
 
otrzymujemy $x$, które odległe jest od pewnego rozwiązania $x^*$ o co najwyżej  
<center><math>\displaystyle
\begin{equation}
\label{blbis}
   |x-x^*|\,\le\,\Big(\frac 12\Big)^k
   |x-x^*|\,\le\,\Big(\frac 12\Big)^k
                   \Big(\frac{b-a}{2}\Big).
                   \Big(\frac{b-a}{2}\Big).
</math></center>
\end{equation}
 
Metoda bisekcji jest więc zbieżna \emph{liniowo} z  
Metoda bisekcji jest więc zbieżna <strong>liniowo</strong> z  
ilorazem $1/2$. Choć ta zbieżność nie jest  
ilorazem <math>\displaystyle 1/2</math>. Choć ta zbieżność nie jest  
imponująca, bisekcja ma kilka istotnych zalet. Oprócz  
imponująca, bisekcja ma kilka istotnych zalet. Oprócz  
jej prostoty, należy podkreślić fakt, że bisekcja jest  
jej prostoty, należy podkreślić fakt, że bisekcja jest  
w pewnym sensie uniwersalna. Jeśli tylko dysponujemy dwoma punktami <math>\displaystyle a</math> i <math>\displaystyle b</math>
w pewnym sensie uniwersalna. Jeśli tylko dysponujemy dwoma punktami $a$ i $b$
takimi, że <math>\displaystyle f</math> przyjmuje w nich wartości przeciwnych znaków, to metoda bisekcji
takimi, że $f$ przyjmuje w nich wartości przeciwnych znaków, to metoda bisekcji
z pewnością znajdzie miejsce zerowe funkcji, choćby początkowa długość
z pewnością znajdzie miejsce zerowe funkcji, choćby początkowa długość
przedziału <math>\displaystyle |b-a|</math> była bardzo duża: zbieżność metody bisekcji jest <strong>globalna</strong>. Co ważniejsze, dla zbieżności metody bisekcji
przedziału $|b-a|$ była bardzo duża: zbieżność metody bisekcji jest \emph{globalna}. Co ważniejsze, dla zbieżności metody bisekcji
wystarcza jedynie <strong>ciągłość</strong> funkcji. Poza tym  
wystarcza jedynie \emph{ciągłość} funkcji. Poza tym  
możemy łatwo kontrolować <strong>błąd bezwzględny aproksymacji miejsca zerowego</strong>. Konsekwencją  
możemy łatwo kontrolować \emph{błąd bezwzględny aproksymacji miejsca zerowego}. Konsekwencją  
powyższego oszacowania błędu jest bowiem następujący wniosek.  
powyższego oszacowania błędu jest bowiem następujący wniosek.  


{{wniosek|||
\begin{cor} Dla znalezienia zera $x^*$ z dokładnością  
Dla znalezienia zera <math>\displaystyle x^*</math> z dokładnością  
$\epsilon>0$, wystarczy obliczyć w metodzie bisekcji  
<math>\displaystyle \epsilon>0</math>, wystarczy obliczyć w metodzie bisekcji  
\[
 
  k\,=\,k(\epsilon)\,=\,
<center><math>\displaystyle k\,=\,k(\epsilon)\,=\,
     \Big\lceil{\log_2\frac{(b-a)}{\epsilon}}\Big\rceil - 1  
     \Big\lceil{\log_2\frac{(b-a)}{\epsilon}}\Big\rceil - 1  
</math></center>
\]
 
wartości funkcji.  
wartości funkcji.  
}}
\end{cor}


==Iteracja prosta Banacha==
\subsection{Iteracja prosta Banacha}


Zupełnie inne, i jak się okaże --- przy odrobinie sprytu bardzo skuteczne ---
Zupełnie inne, i jak się okaże --- przy odrobinie sprytu bardzo skuteczne ---
podejście do wyznaczania miejsca zerowego jest oparte na <strong>metodzie Banacha</strong>.
podejście do wyznaczania miejsca zerowego jest oparte na \emph{metodzie Banacha}. Dla większej ogólności, będziemy zakładać teraz, że $f: D\rightarrow R^N$ i $D$ jest otwartym, niepustym podzbiorem $R^N$.  


Najpierw nasze równanie nieliniowe  
Najpierw nasze równanie nieliniowe  


<center><math>\displaystyle
$$
f(x) = 0
f(x) = 0
</math></center>
$$
 
 
przekształcamy (dobierając odpowiednią funkcję $\phi$) do równania równoważnego  
 
przekształcamy (dobierając odpowiednią funkcję <math>\displaystyle \phi</math>) do równania równoważnego  
(tzn. mającego te same rozwiązania)
(tzn. mającego te same rozwiązania)
 
\begin{equation}\label{rrw}
<center><math>\displaystyle
   x\,=\,\phi( x).  
   x\,=\,\phi( x).  
</math></center>
\end{equation}
 
Następnie, startując z pewnego przybliżenia
początkowego <math>\displaystyle  x_0</math>, konstruujemy ciąg kolejnych
przybliżeń <math>\displaystyle  x_k</math> według wzoru
 
<center><math>\displaystyle x_k\,=\,\phi( x_{k-1}),\qquad k\ge 1.
</math></center>


[[grafika:Banach.jpg|thumb|right||Stefan Banach<br>  [[Biografia Banach|Zobacz biografię]]]]
Taki $x$, dla którego zachodzi powyższa równość, nazywamy \emph{punktem stałym} odwzorowania $\phi$.


{{twierdzenie|Banacha|Banacha, o zbieżności|
Następnie, startując z pewnego przybliżenia
początkowego $x_0 \in D$, konstruujemy ciąg kolejnych
przybliżeń $x_k$ według wzoru
\[
  x_k\,=\,\phi( x_{k-1}),\qquad k\ge 1.
\]


Niech <math>\displaystyle D_0</math> będzie domkniętym
\biografia{Stefan}{Banach}{}
podzbiorem dziedziny <math>\displaystyle D</math>,


<center><math>\displaystyle \overline D_0\,=\,D_0\subset D,  
\begin{thm}[Banacha, o kontrakcji]\label{twit}
</math></center>
Niech $D_0$ będzie domkniętym
 
podzbiorem dziedziny $D$,
w którym <math>\displaystyle \phi</math> jest odwzorowaniem zwężającym.  
\[
To znaczy, <math>\displaystyle \phi(D_0)\subset D_0</math>, oraz istnieje stała  
  \overline D_0\,=\,D_0\subset D,  
<math>\displaystyle 0\le L<1</math> taka, że  
\]
 
w którym $\phi$ jest odwzorowaniem zwężającym.  
<center><math>\displaystyle \|\phi( x)-\phi( y)\|\,\le\,L\,\| x- y\|,
To znaczy, $\phi(D_0)\subset D_0$, oraz istnieje stała  
$0\le L<1$ taka, że  
\[
  \|\phi( x)-\phi( y)\|\,\le\,L\,\| x- y\|,
     \qquad\forall x, y\in D_0.   
     \qquad\forall x, y\in D_0.   
</math></center>
\]
 
Wtedy równanie
Wtedy równanie
 
\begin{equation}\label{rrw}
<center><math>\displaystyle
   x\,=\,\phi( x).  
   x\,=\,\phi( x).  
</math></center>
\end{equation}


ma dokładnie jedno  
ma dokładnie jedno  
rozwiązanie <math>\displaystyle  x^*</math>, oraz  
rozwiązanie $ x^*$, oraz  
 
\[
<center><math>\displaystyle x^*\,=\,\lim_{k\to\infty} x_k,  
  x^*\,=\,\lim_{k\to\infty} x_k,  
</math></center>
\]
 
dla dowolnego przybliżenia początkowego  
dla dowolnego przybliżenia początkowego  
<math>\displaystyle  x_0\in D_0</math>.  
$ x_0\in D_0$.  
}}
\end{thm}


{{dowod|||
\begin{proof}Wobec  
Wobec  
\begin{eqnarray*}
 
\| x_k- x_{k-1}\| &=& \|\phi( x_{k-1})-\phi( x_{k-2})\| \,\le\,L\,\| x_{k-1}- x_{k-2}\| \\
<center><math>\displaystyle \aligned \| x_k- x_{k-1}\| &=  
&\le &\cdots\;\le\;L^{k-1}\| x_1- x_0\|,
  \|\phi( x_{k-1})-\phi( x_{k-2})\|  
\end{eqnarray*}
  \,\le\,L\,\| x_{k-1}- x_{k-2}\| \\
dla $k\ge s$ mamy  
  &\le &\cdots\;\le\;L^{k-1}\| x_1- x_0\|,
\begin{eqnarray*}
\endaligned</math></center>
\| 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\|.
dla <math>\displaystyle k\ge s</math> mamy  
\end{eqnarray*}
 
Ciąg $\{ x_k\}_k$ jest więc ciągiem Cauchy'ego.  
<center><math>\displaystyle \aligned \| 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\|.
\endaligned</math></center>
 
Ciąg <math>\displaystyle \{ x_k\}_k</math> jest więc ciągiem Cauchy'ego.  
Stąd istnieje granica  
Stąd istnieje granica  
<math>\displaystyle \alpha=\lim_{k\to\infty} x_k</math>, która należy do  
$\alpha=\lim_{k\to\infty} x_k$, która należy do  
<math>\displaystyle D_0</math>, wobec domkniętości tego zbioru. Ponieważ  
$D_0$, wobec domkniętości tego zbioru. Ponieważ  
"lipschitzowskość" <math>\displaystyle \phi</math> implikuje jej ciągłość,  
lipschitzowskość $\phi$ implikuje jej ciągłość,  
mamy też   
mamy też   
 
\[
<center><math>\displaystyle \phi(\alpha)\,=\,\phi\Big(\lim_{k\to\infty} x_k\Big)  
  \phi(\alpha)\,=\,\phi\Big(\lim_{k\to\infty} x_k\Big)  
   \,=\,\lim_{k\to\infty}\phi( x_k)
   \,=\,\lim_{k\to\infty}\phi( x_k)
   \,=\,\lim_{k\to\infty} x_k\,=\,\alpha,
   \,=\,\lim_{k\to\infty} x_k\,=\,\alpha,
</math></center>
\]
 
tzn. $\alpha$ jest punktem stałym odwzorowania $\phi$.  
tzn. <math>\displaystyle \alpha</math> jest punktem stałym odwzorowania <math>\displaystyle \phi</math>.  
Dla jednoznaczności zauważmy, że jeśliby istniał  
Dla jednoznaczności zauważmy, że jeśliby istniał  
drugi, różny od <math>\displaystyle \alpha</math>, punkt stały <math>\displaystyle \beta</math>,  
drugi, różny od $\alpha$, punkt stały $\beta$,  
to mielibyśmy  
to mielibyśmy  
 
\[
<center><math>\displaystyle \|\alpha-\beta\|\,=\,
  \|\alpha-\beta\|\,=\,
   \|\phi(\alpha)-\phi(\beta)\|
   \|\phi(\alpha)-\phi(\beta)\|
   \,\le\,L\,\|\alpha-\beta\|.  
   \,\le\,L\,\|\alpha-\beta\|.  
</math></center>
\]
 
Stąd $1<L$, co jest sprzeczne z założeniem, że  
Stąd <math>\displaystyle 1<L</math>, co jest sprzeczne z założeniem, że  
$\phi$ jest zwężająca. \end{proof}
<math>\displaystyle \phi</math> jest zwężająca. }}


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


{{wniosek|||
\begin{cor} Przy założeniach \link{#Banacha, o kontrakcji}{twit}{twierdzenia Banacha},  
Przy założeniach [[twit|Dodaj link: twierdzenia Banacha]],  
metoda iteracji prostych jest zbieżna co  
metoda iteracji prostych jest zbieżna co  
najmniej liniowo z ilorazem <math>\displaystyle L</math>, tzn.
najmniej liniowo z ilorazem $L$, tzn.
 
\[
<center><math>\displaystyle \| x_k- x^*\|\,\le\,L^k\,\| x_0- x^*\|.
  \| x_k- x^*\|\,\le\,L^k\,\| x_0- x^*\|.
</math></center>
\]
 
\end{cor}
}}
 
<div style="margin-top:1em; padding-top,padding-bottom:1em;">
<span  style="font-variant:small-caps;">Przykład</span>
<div class="solution">
 
Dla ilustracji, rozpatrzmy natępujące proste
równanie skalarne:


<center><math>\displaystyle
\begin{example}
   x\,=\,\cos(x), \qquad \mbox{dla} \qquad x\in D= R.  
Dla ilustracji, rozpatrzmy
</math></center>
równanie Keplera, gdy $\epsilon < 1$:
\begin{equation}\label{itp}
   x\,=\,M+\epsilon\sin(x), \qquad\mbox{dla}\qquad x\in R.  
\end{equation}


W tym przypadku <math>\displaystyle \phi(x)=\cos(x)</math>. Zauważamy, że w
\rysunek{rownaniekeplera.png}{Graficzna ilustracja równania Keplera dla $M=1$ i $\epsilon = \frac{1}{4}$.}
przedziale <math>\displaystyle [0,1]</math> funkcja <math>\displaystyle \phi</math> jest zwężająca ze
stałą
 
<center><math>\displaystyle L\,=\,\max_{0\le x\le 1}|\cos'(x)|\,=\,\sin(1)\,<\,1.
</math></center>


W tym przypadku $\phi(x)=M+\epsilon\,\sin(x)$. Zauważmy, że w
funkcja $\phi$ jest zwężająca ze stałą
\[
  L \leq \max_{x} |\phi'(x)| \leq \epsilon < 1.
\]
Ponieważ obrazem prostej przy przekształceniu $\phi$ jest odcinek $D = [M-\epsilon, M+\epsilon]$, to znaczy, że $\phi$ --- ograniczona do $D$ --- spełnia założenia \link{#Banacha, o kontrakcji}{twit}{twierdzenia Banacha o kontrakcji}.
Stąd istnieje dokładnie jedno rozwiązanie naszego równania  
Stąd istnieje dokładnie jedno rozwiązanie naszego równania  
w przedziale <math>\displaystyle [0,1]</math>. Rozwiązanie to może  
w przedziale $D$. Rozwiązanie to może  
być aproksymowane z dowolnie małym błędem przy pomocy  
być aproksymowane z dowolnie małym błędem przy pomocy  
iteracji prostych, startując z dowolnego przybliżenia  
iteracji prostych, startując z dowolnego przybliżenia  
początkowego <math>\displaystyle  x_0\in [0,1]</math>.  
początkowego $x_0\in D$. Jednak, gdy $\epsilon \approx 1$, zbieżność może być bardzo powolna... (Wkrótce przekonasz się, że są szybsze metody).
</div></div>
\end{example}


Zaletą iteracji prostych jest fakt, że zbieżność  
Zaletą iteracji prostych jest fakt, że zbieżność  
nie zależy od wymiaru <math>\displaystyle n</math> zadania, ale tylko od stałej  
nie zależy od wymiaru $n$ zadania, ale tylko od stałej  
Lipschitza <math>\displaystyle L</math> (jednak w praktyce czasem sama stała Lipschitza może zależeć od
Lipschitza $L$ (jednak w praktyce czasem sama stała Lipschitza może zależeć od
wymiaru zadania...). Metoda Banacha ma szczególne zastosowanie w  
wymiaru zadania...). Metoda Banacha ma szczególne zastosowanie w  
przypadku, gdy funkcja <math>\displaystyle \phi</math> jest zwężająca na całym  
przypadku, gdy funkcja $\phi$ jest zwężająca na całym  
zbiorze <math>\displaystyle D</math>, tzn. <math>\displaystyle D_0=D</math>. Jeśli ponadto <math>\displaystyle D</math> ma  
zbiorze $D$, tzn. $D_0=D$. Jeśli ponadto $D$ ma  
skończoną średnicę <math>\displaystyle  \mbox{diam} (D)</math>, to dla  
skończoną średnicę, $\mbox{diam}(D) < +\infty$, to dla  
osiągnięcia <math>\displaystyle \epsilon</math>-aproksymacji zera funkcji <math>\displaystyle f</math>
osiągnięcia $\epsilon$-aproksymacji zera funkcji $f$
wystarczy wykonać  
wystarczy wykonać  
 
\[
<center><math>\displaystyle k\,=\,k(\epsilon)\,=\,\Big\lceil\frac
  k\,=\,k(\epsilon)\,=\,\Big\lceil\frac
   {\log(\| x_0- x^*\|/\epsilon)}{\log(1/L)}\Big\rceil  
   {\log(\| x_0- x^*\|/\epsilon)}{\log(1/L)}\Big\rceil  
   \,=\,\Big\lceil\frac
   \,=\,\Big\lceil\frac
   {\log( \mbox{diam} (D)/\epsilon)}{\log(1/L)}\Big\rceil  
   {\log(\mbox{diam}(D)/\epsilon)}{\log(1/L)}\Big\rceil  
</math></center>
\]
 
iteracji, niezależnie od $x_0$. Metody zbieżne dla  
iteracji, niezależnie od <math>\displaystyle x_0</math>. Metody zbieżne dla  
dowolnego przybliżenia początkowego nazywamy  
dowolnego przybliżenia początkowego nazywamy  
<strong>zbieżnymi globalnie</strong>. Obie przedstawione dotychczas metody: bisekcji i
\emph{zbieżnymi globalnie}. Obie przedstawione dotychczas metody: bisekcji i
Banacha przy rozsądnych
Banacha, przy rozsądnych
założeniach są zbieżne globalnie.
założeniach, są zbieżne globalnie.
 
[[#Banacha, o zbieżności| zobaczmy]]


Okazuje się, że metoda iteracji prostej może być --- w bardzo szczególnych
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 do czynienia,
przypadkach --- zbieżna szybciej niż liniowo. Z taką sytuacją będziemy mieli do czynienia, gdy rozpatrzymy metodę Newtona.
gdy korzystać będziemy z metody Newtona.


==Metoda Newtona==
\subsection{Metoda Newtona}


Zarówno metoda Banacha, jak i bisekcja są zbieżnie liniowo, co w praktyce może
Zarówno metoda Banacha, jak i bisekcja, są zbieżnie liniowo, co w praktyce może
okazać się zbieżnością dość powolną (np. dla metody zbieżnej liniowo z ilorazem
okazać się zbieżnością dość powolną (np. dla metody zbieżnej liniowo z ilorazem
<math>\displaystyle \frac{1}{2}</math> dopiero po piątej iteracji dostajemy kolejną
$1/2$ dopiero po piątej iteracji dostajemy kolejną
dokładną cyfrę wyniku). Wykorzystując więcej informacji o funkcji <math>\displaystyle f</math>, której
dokładną cyfrę wyniku). Wykorzystując więcej informacji o funkcji $f$, której
miejsca zerowego poszukujemy, możemy istotnie przyspieszyć zbieżność metody.
miejsca zerowego poszukujemy, możemy istotnie przyspieszyć zbieżność metody.
Ceną, jaką przyjdzie nam zapłacić, będzie utrata globalnej zbieżności.
Ceną, jaką przyjdzie nam zapłacić, będzie utrata globalnej zbieżności.


Metoda Newtona i jej podobne należą do
 
grupy metod <strong>zbieżnych lokalnie</strong>. Znaczy to, że
\biografia{Isaac}{Newton}{}
zbieżność ciągu <math>\displaystyle \{x_k\}_k</math> do zera danej funkcji <math>\displaystyle f</math>
jest zapewniona jedynie wtedy, gdy przybliżenia początkowe
zostały wybrane dostatecznie blisko <math>\displaystyle x^*</math>.


W dalszych rozważaniach będziemy zakładać dla  
W dalszych rozważaniach będziemy zakładać dla  
uproszczenia, że dziedzina <math>\displaystyle D=R</math>.  
uproszczenia, że dziedzina $D=\R$.  


Idea metody Newtona opiera się na popularnym wśród inżynierów pomyśle <strong>linearyzacji</strong>: zamiast szukać miejsca zerowego skomplikowanej <math>\displaystyle f</math>, przybliżmy ją
Idea \emph{metody Newtona} opiera się na popularnym wśród inżynierów pomyśle {\em linearyzacji}: zamiast szukać miejsca zerowego skomplikowanej $f$, przybliżmy ją
linią prostą, a dla niej już umiemy znaleźć miejsce zerowe!  
linią prostą, a dla niej już umiemy znaleźć miejsce zerowe!  


[[grafika:Newton.jpg|thumb|right||Isaac Newton<br> Przypisywanie metody
\begin{latexonly}
Przypisywanie metody
stycznych Newtonowi jest pewną przesadą. Metodę Newtona taką, jaką znamy (z
stycznych Newtonowi jest pewną przesadą. Metodę Newtona taką, jaką znamy (z
pochodną w mianowniku), zaproponował w 1740 roku Simpson (ten od kwadratury), kilknaście lat po śmierci Newtona. Żeby było jeszcze zabawniej, odkrywcą
pochodną w mianowniku), zaproponował w 1740 roku Simpson (ten od kwadratury), kilknaście lat po śmierci Newtona. Żeby było jeszcze zabawniej, odkrywcą
metody siecznych zdaje się być... Newton! Więcej na ten temat przeczytasz w
metody siecznych zdaje się być... Newton! Więcej na ten temat przeczytasz w
artykule T.Ypma w SIAM Review 37, 1995. [[Biografia Newton|Zobacz biografię]]]]
artykule T.Ypma w SIAM Review 37, 1995.
 
\end{latexonly}
Startując z pewnego przybliżenia  
Startując z pewnego przybliżenia  
początkowego <math>\displaystyle x_0</math>, w kolejnych krokach metody, <math>\displaystyle k</math>-te  
początkowego $x_0$, w kolejnych krokach metody, $k$-te  
przybliżenie <math>\displaystyle x_k</math> jest punktem przecięcia stycznej do  
przybliżenie $x_k$ jest punktem przecięcia stycznej do  
wykresu <math>\displaystyle f</math> w punkcie <math>\displaystyle x_{k-1}</math>. Ponieważ równanie  
wykresu $f$ w punkcie $x_{k-1}$. Ponieważ równanie  
stycznej wynosi <math>\displaystyle y(x)=f(x_{k-1})+f'(x_{k-1})(x-x_{k-1})</math>,  
stycznej wynosi $y(x)=f(x_{k-1})+f'(x_{k-1})(x-x_{k-1})$,  
otrzymujemy wzór  
otrzymujemy wzór  


<center><math>\displaystyle x_k\,=\,x_{k-1}\,-\,\frac{f(x_{k-1})}{f'(x_{k-1})}.
\begin{alg}[Metoda Newtona (stycznych)]
</math></center>
for k = 1,2,...
$x_k\,=\,x_{k-1}\,-\,\frac{f(x_{k-1})}{f'(x_{k-1})}$;
\end{alg}


Oczywiście, aby metoda Newtona była dobrze zdefiniowana,  
Oczywiście, aby metoda Newtona była dobrze zdefiniowana,  
musimy założyć, że <math>\displaystyle f'(x_{k-1})</math> istnieje i nie  
musimy założyć, że $f'(x_{k-1})$ istnieje i nie  
jest zerem.
jest zerem.


<div class="thumb tright"><div><flash>file=Newton.swf</flash><div.thumbcaption>Postęp iteracji Newtona</div></div></div>
\begin{latexonly}
\rysunek{newtononestep.png}{Metoda Newtona: pierwszy krok}
\end{latexonly}
 
\flash{Newtononestep.swf}{Postęp iteracji Newtona}


Zauważmy, że metodę Newtona można traktować jako  
Zauważmy, że metodę Newtona można traktować jako  
szczególny przypadek iteracji prostych, gdzie  
szczególny przypadek iteracji prostych, gdzie  
\[
  \phi(x)\,=\,x-\frac{f(x)}{f'(x)}.
\]
Widać też, że nie jest ona zbieżna globalnie.


<center><math>\displaystyle \phi(x)\,=\,x-\frac{f(x)}{f'(x)}.
</math></center>


Widać też, że nie jest ona zbieżna globalnie.
Metoda Newtona i jej podobne należą do
 
grupy metod \emph{zbieżnych lokalnie}. Znaczy to, że
Nawet jeśli pochodna w <math>\displaystyle x_{k-1}</math> się nie zeruje,  
zbieżność ciągu $\{x_k\}_k$ do zera danej funkcji $f$
ciąg <math>\displaystyle \{x_k\}_k</math> może nie zbiegać do zera funkcji <math>\displaystyle f</math>.
jest zapewniona jedynie wtedy, gdy przybliżenia początkowe
Okazuje się jednak, że jeśli
zostały wybrane dostatecznie blisko $x^*$.  
wystartujemy dostatecznie blisko rozwiązania <math>\displaystyle x^*</math>, to
metoda Newtona jest zbieżna. Załóżmy
najpierw, że <math>\displaystyle f(x^*)=0</math> oraz


<center><math>\displaystyle f'(x^*)\,\ne\,0.
</math></center>


Ponadto załóżmy, że <math>\displaystyle f</math> jest dwukrotnie  
Nawet jeśli pochodna w $x_{k-1}$ się nie zeruje,
różniczkowalna w sposób ciągły, <math>\displaystyle f\in C^2(D)</math>.  
ciąg $\{x_k\}_k$ może nie zbiegać do zera funkcji $f$.
Rozwijając <math>\displaystyle \phi</math> w szereg Taylora w punkcie <math>\displaystyle x^*</math>,  
Okazuje się jednak, że jeśli
wystartujemy dostatecznie blisko rozwiązania $x^*$, to
metoda Newtona jest zbieżna. Dokładniej, załóżmy
najpierw, że
\[
f(x^*)=0\quad \mbox{ oraz }\quad f'(x^*)\,\ne\,0.
\]
Ponadto załóżmy, że $f$ jest dwukrotnie  
różniczkowalna w sposób ciągły, $f\in C^2(D)$.  
Rozwijając $\phi$ w szereg Taylora w punkcie $x^*$,  
otrzymujemy  
otrzymujemy  
 
\[
<center><math>\displaystyle x_k-x^*\,=\,\phi(x_{k-1})-\phi(x^*)\,=\,
  x_k-x^*\,=\,\phi(x_{k-1})-\phi(x^*)\,=\,
   (x_{k-1}-x^*)\phi'(x^*)+(x_{k-1}-x^*)^2\phi''(\xi_k)/2,  
   (x_{k-1}-x^*)\phi'(x^*)+(x_{k-1}-x^*)^2\phi''(\xi_k)/2,  
</math></center>
\]
 
gdzie $\min(x^*,x_{k-1})\le\xi_k\le\max(x^*,x_{k-1})$.  
gdzie <math>\displaystyle \min(x^*,x_{k-1})\le\xi_k\le\max(x^*,x_{k-1})</math>.  
Wobec tego, że $\phi'(x^*)=f(x)f''(x)/(f'(x))^2=0$ i  
Wobec tego, że <math>\displaystyle \phi'(x^*)=f(x)f''(x)/(f'(x))^2=0</math> i  
$\phi''(\xi_k)=f''(\xi_k)/f'(\xi_k)$, mamy  
<math>\displaystyle \phi''(\xi_k)=f''(\xi_k)/f'(\xi_k)</math>, mamy  
\begin{equation}\label{nrpdst}
 
<center><math>\displaystyle
   x_k-x^*\,=\,(x_{k-1}-x^*)^2\frac{f''(\xi_k)}{2f'(\xi_k)}.
   x_k-x^*\,=\,(x_{k-1}-x^*)^2\frac{f''(\xi_k)}{2f'(\xi_k)}.
</math></center>
\end{equation}
 
Zdefiniujmy liczbę  
Zdefiniujmy liczbę  
 
\[
<center><math>\displaystyle R_f\,=\,\sup_{r\ge 0}\sup_{\{x:|x-x^*|\le r\}}
  R_f\,=\,\sup_{r\ge 0}\sup_{\{x:|x-x^*|\le r\}}
   \Big|\frac{2(x-x^*)f''(x)}{f'(x)}\Big|\,<\,1.  
   \Big|\frac{2(x-x^*)f''(x)}{f'(x)}\Big|\,<\,1.  
</math></center>
\]
 
Oczywiście $R_f>0$. Dla $x_{k-1}$ spełniającego   
Oczywiście <math>\displaystyle R_f>0</math>. Dla <math>\displaystyle x_{k-1}</math> spełniającego   
$|x_{k-1}-x^*|\le R<R_f$, mamy z poprzedniej równości
<math>\displaystyle |x_{k-1}-x^*|\le R<R_f</math>, mamy z poprzedniej równości
\[
 
  |x_k-x^*|\,\le\,q\,|x_{k-1}-x^*|,
<center><math>\displaystyle |x_k-x^*|\,\le\,q\,|x_{k-1}-x^*|,
\]
</math></center>
gdzie $q<1$ i $q$ zależy tylko od $R$.  
 
gdzie <math>\displaystyle q<1</math> i <math>\displaystyle q</math> zależy tylko od <math>\displaystyle R</math>.  
 
Niech teraz <math>\displaystyle x^*</math> będzie zerem <math>\displaystyle m</math>-krotnym,
 
<center><math>\displaystyle f(x^*)=f'(x^*)=\cdots =f^{(m-1)}(x^*)=0\ne f^{(m)}(x^*),
</math></center>


gdzie <math>\displaystyle m\ge 2</math>, oraz niech <math>\displaystyle f</math> będzie <math>\displaystyle m</math>-krotnie  
Niech teraz $x^*$ będzie zerem $m$-krotnym,
\[
  f(x^*)=f'(x^*)=\cdots =f^{(m-1)}(x^*)=0\ne f^{(m)}(x^*),
\]
gdzie $m\ge 2$, oraz niech $f$ będzie $m$-krotnie  
różniczkowalna w sposób ciągły. Wtedy  
różniczkowalna w sposób ciągły. Wtedy  
 
\begin{eqnarray}
<center><math>\displaystyle \aligned x_k-x^* &= (x_{k-1}-x^*)\,-\,\frac{(x_{k-1}-x^*)^m
  x_k-x^* &=& (x_{k-1}-x^*)\,-\,\frac{(x_{k-1}-x^*)^m
   \frac{f^{(m)}  (\eta_k^{(1)})}{m!}}{(x_{k-1}-x^*)^{m-1}
   \frac{f^{(m)}  (\eta_k^{(1)})}{m!}}{(x_{k-1}-x^*)^{m-1}
   \frac{f^{(m-1)}(\eta_k^{(2)})}{(m-1)!}} \nonumber \\
   \frac{f^{(m-1)}(\eta_k^{(2)})}{(m-1)!}} \nonumber \\
   &= (x_{k-1}-x^*)\left(1-\frac 1m\frac
   &=& (x_{k-1}-x^*)\left(1-\frac 1m\frac
       {f^{(m)}(\eta_k^{(1)})}{f^{(m)}(\eta_k^{(2)})}
       {f^{(m)}(\eta_k^{(1)})}{f^{(m)}(\eta_k^{(2)})}\right) \nonumber \\
      \right) \nonumber \\
&\approx & (x_{k-1}-x^*)\Big( 1-\frac 1m\Big),\label{nrtp}
  &\approx & (x_{k-1}-x^*)\Big( 1-\frac 1m\Big),
\end{eqnarray}
\endaligned</math></center>
o ile $x_{k-1}$ jest ``blisko'' $x^*$.
 
Metoda Newtona jest więc zbieżna lokalnie. Gdy $x_0$ jest zbyt daleko od rozwiązania może zdarzyć się, że iteracja Newtona zacznie nas oddalać od miejsca zerowego, co ilustruje poniższy przykład:
 
\begin{latexonly}
\rysunek{newtononestepdiv.png}{Metoda Newtona: jeśli startujemy zbyt daleko od miejsca zerowego $f$, zamiast przybliżać się do niego, zaczynamy się oddalać! (gdzie będzie $x_3$?...)}
\end{latexonly}


o ile <math>\displaystyle x_{k-1}</math> jest "blisko" <math>\displaystyle x^*</math>.  
\flash{Newtononestepdiv.swf}{Metoda Newtona: jeśli startujemy zbyt daleko od miejsca zerowego $f$, zamiast przybliżać się do niego, zaczynamy się oddalać! (gdzie będzie $x_3$?...)}


Metoda Newtona jest więc zbieżna lokalnie.
Z powyższego można też wywnioskować,  
Z powyższego można też wywnioskować,  
jaki jest charakter zbieżności metody Newtona. Dla zera  
jaki jest charakter zbieżności metody Newtona. Dla zera  
jednokrotnego <math>\displaystyle x^*</math> oraz <math>\displaystyle f''(x^*)\ne 0</math> mamy bowiem  
jednokrotnego $x^*$ oraz $f''(x^*)\ne 0$ mamy bowiem  
\[
  |x_k-x^*|\, \approx \,|x-x_{k-1}|^2 \frac{|f''(x^*)|}{2|f'(x^*)|}.
\]


<center><math>\displaystyle |x_k-x^*|\, \approx \,|x-x_{k-1}|^2 \frac{|f''(x^*)|}{2|f'(x^*)|}.
Mówimy, że zbieżność metody Newtona, gdy $f(x^*)\neq 0$ jest \emph{kwadratowa}.  
</math></center>


Mówimy, że zbieżność metody Newtona, gdy <math>\displaystyle f(x^*)\neq 0</math> jest <strong>kwadratowa</strong>.
\begin{prop}
 
Jeśli $f(x^*)\neq 0$ oraz  
{{stwierdzenie|||
$f''(x^*)=0$ to zbieżność jest nawet szybsza. Z kolei dla  
Jeśli <math>\displaystyle f(x^*)\neq 0</math> oraz  
zera $m$-krotnego (tzn. $f(x^*) = f'(x^*)= \ldots f^{(m)}(x^*)= 0$, $m>1$)  
<math>\displaystyle f''(x^*)=0</math> to zbieżność jest nawet szybsza. Z kolei dla  
zbieżność jest liniowa z ilorazem $(1-\frac{1}{m})$.  
zera <math>\displaystyle m</math>-krotnego (tzn. <math>\displaystyle f(x^*) = f'(x^*)= \ldots f^{(m)}(x^*)= 0</math>, <math>\displaystyle m>1</math>)  
\end{prop}
zbieżność jest liniowa z ilorazem <math>\displaystyle (1-\frac{1}{m})</math>.  
}}


Metoda Newtona jest pierwszą poznaną tutaj metodą  
Metoda Newtona jest pierwszą poznaną tutaj metodą  
iteracyjną, która jest (dla zer jednokrotnych) zbieżna  
iteracyjną, która jest (dla zer jednokrotnych) zbieżna  
szybciej niż liniowo. Dla takich metod wprowadza się  
szybciej niż liniowo. Dla takich metod wprowadza się  
pojęcie <strong>wykładnika zbieżności</strong>, który jest  
pojęcie \emph{wykładnika zbieżności}, który jest  
zdefiniowany następująco.  
zdefiniowany następująco.  


[[Image:MNstycznebisekcja.png|thumb|450px|center|Porównanie zbieżności metody bisekcji i stycznych
\rysunek{stycznebisekcja.png}{Porównanie zbieżności metody bisekcji i stycznych
dla równania <math>\displaystyle e^x - 1 = 0</math>. Błąd kolejnych przybliżeń wyświetlany jest w skali
dla równania $e^x - 1 = 0$. Błąd kolejnych przybliżeń wyświetlany jest w skali
logarytmicznej, dzięki czemu lepiej widać różnicę między zbieżnością liniową a
logarytmicznej, dzięki czemu lepiej widać różnicę między zbieżnością liniową a
kwadratową.]]
kwadratową.}


Powiemy, że metoda iteracyjna <math>\displaystyle \phi</math> jest w klasie funkcji <math>\displaystyle F</math>
Powiemy, że metoda iteracyjna $\phi$ jest w klasie funkcji $F$
rzędu co najmniej <math>\displaystyle p\ge 1</math>, gdy spełniony jest następujący  
\emph{rzędu co najmniej $p\ge 1$}, gdy spełniony jest następujący  
warunek. Niech <math>\displaystyle f\in F</math> i <math>\displaystyle f(x^*)=0</math>. Wtedy istnieje stała  
warunek. Niech $f\in F$ i $f(x^*)=0$. Wtedy istnieje stała  
<math>\displaystyle C<\infty</math> taka, że dla dowolnych przybliżeń początkowych   
$C<\infty$ taka, że dla dowolnych przybliżeń początkowych   
<math>\displaystyle x_0,\ldots,x_{s-1}</math> dostatecznie bliskich <math>\displaystyle x^*</math>, kolejne  
$x_0,\ldots,x_{s-1}$ dostatecznie bliskich $x^*$, kolejne  
przybliżenia <math>\displaystyle x_k=\phi(x_{k-1},\ldots,x_{k-s})</math> generowane  
przybliżenia $x_k=\phi(x_{k-1},\ldots,x_{k-s})$ generowane  
tą metodą spełniają  
tą metodą spełniają  
\[
  |x_k-x^*|\,\le\,C\,|x_{k-1}-x^*|^p.
\]
Ponadto, jeśli $p=1$ to dodatkowo żąda się, aby $C<1$.


<center><math>\displaystyle |x_k-x^*|\,\le\,C\,|x_{k-1}-x^*|^p.
\begin{dfn} \emph{Wykładnikiem zbieżności} metody  
</math></center>
iteracyjnej $\phi$ w klasie $F$ nazywamy liczbę $p^*$
 
Ponadto, jeśli <math>\displaystyle p=1</math> to dodatkowo żąda się, aby <math>\displaystyle C<1</math>.
 
{{definicja|||
Wykładnikiem zbieżności metody  
iteracyjnej <math>\displaystyle \phi</math> w klasie <math>\displaystyle F</math> nazywamy liczbę <math>\displaystyle p^*</math>
zdefiniowaną równością  
zdefiniowaną równością  
 
\[
<center><math>\displaystyle p^*\,=\,\sup\,\{\,p\ge 1:\,\phi  
  p^*\,=\,\sup\,\{\,p\ge 1:\,\phi  
    \mbox{ jest rzędu co najmniej  } p\,\}.
    \mbox{ jest rzędu co najmniej  } p\,\}.
</math></center>
\]
 
\end{dfn}
}}


Możemy teraz sformułować następujące twierdzenie,  
Możemy teraz sformułować następujące twierdzenie,  
które natychmiast wynika z poprzednich rozważań.  
które natychmiast wynika z poprzednich rozważań.  


{{twierdzenie|||
\begin{thm}[O rzędzie zbieżności metody Newtona]
Wykładnik zbieżności metody Newtona  
Wykładnik zbieżności metody Newtona  
(stycznych) wynosi <math>\displaystyle p^*=2</math> w klasie funkcji o zerach  
(stycznych) wynosi $p^*=2$ w klasie funkcji o zerach  
jednokrotnych, oraz <math>\displaystyle p^*=1</math> w klasie funkcji o zerach  
jednokrotnych, oraz $p^*=1$ w klasie funkcji o zerach  
wielokrotnych.
wielokrotnych.
}}
\end{thm}
 


[[Image:MNmultiplezeros.png|thumb|450px|center|Zbieżność metody Newtona dla zer wielokrotnych <math>\displaystyle f(x)
\rysunek{multiplezeros.png}{Zbieżność metody Newtona dla zer wielokrotnych $f(x)
= (x-1)^5</math> jest liniowa z ilorazem <math>\displaystyle \frac{4}{5}</math> (końcowe załamanie wykresu
= (x-1)^5$ jest liniowa z ilorazem $\frac{4}{5}$ (końcowe załamanie wykresu
spowodowane jest przypadkowym trafieniem w dokładne miejsce zerowe). Metoda bisekcji nie jest na to czuła i dalej zbiega z ilorazem
spowodowane jest przypadkowym trafieniem w dokładne miejsce zerowe). Metoda bisekcji nie jest na to czuła i dalej zbiega z ilorazem
<math>\displaystyle \frac{1}{2}</math>.]]
$\frac{1}{2}$.}


==Metoda siecznych==
\subsection{Metoda siecznych}


Inną znaną i często używaną metodą iteracyjną opartą na podobnym pomyśle
Inną znaną i często używaną metodą iteracyjną, opartą na podobnym pomyśle
linearyzacyjnych '''??''' , co metoda Newtona  
linearyzacyjnym co metoda Newtona,
jest <strong>metoda siecznych</strong>, w której zamiast przybliżenia wykresu <math>\displaystyle f</math> przez
jest \emph{metoda siecznych}, w której zamiast przybliżenia wykresu $f$ przez
styczną, stosuje się przybliżenie sieczną.
styczną, stosuje się przybliżenie sieczną.
   
   
Metoda ta  
Metoda ta  
wykorzystuje więc do konstrukcji <math>\displaystyle x_k</math> przybliżenia  
wykorzystuje więc do konstrukcji $x_k$ przybliżenia  
<math>\displaystyle x_{k-1}</math> i <math>\displaystyle x_{k-2}</math>. Musimy również wybrać dwa różne  
$x_{k-1}$ i $x_{k-2}$. Musimy również wybrać dwa różne  
punkty startowe <math>\displaystyle x_0</math> i <math>\displaystyle x_1</math>. Ponieważ prosta interpolująca
punkty startowe $x_0$ i $x_1$. Ponieważ sieczna dla
<math>\displaystyle f</math> w <math>\displaystyle x_{k-1}</math> i <math>\displaystyle x_{k-2}</math> ma wzór  
$f$ w punktach $x_{k-1}$ i $x_{k-2}$ ma wzór  
\[
  y(x)\,=\,\frac{x-x_{k-2}}{x_{k-1}-x_{k-2}}f(x_{k-1})+
          \frac{x-x_{k-1}}{x_{k-2}-x_{k-1}}f(x_{k-2}),
\]
otrzymujemy
\begin{alg}[Metoda siecznych]
for k = 1,2,...
$x_k\,=\,x_{k-1}\,-\,\frac{x_{k-1}-x_{k-2}} {f(x_{k-1})-f(x_{k-2})}\,f(x_{k-1})$;
end
\end{alg}


<center><math>\displaystyle y(x)\,=\,\frac{x-x_{k-2}}{x_{k-1}-x_{k-2}}f(x_{k-1})+
Zauważmy, że jeśli $x_{k-1}$ i $x_{k-2}$ są blisko
          \frac{x-x_{k-1}}{x_{k-2}-x_{k-1}}f(x_{k-2}),
siebie, to $x_k$ jest podobny do tego z metody Newtona,
</math></center>
bowiem wtedy iloraz różnicowy \link{MN14#Różniczkowanie}{MN14}{przybliża pochodną} $f$,
$$
\frac{f(x_{k-1})-f(x_{k-2})}{x_{k-1}-x_{k-2}} \approx f'(x_{k-1}).
$$


otrzymujemy
Nie wystarcza to jednak, aby osiągnąć zbieżność z wykładnikiem
$2$. Można pokazać, że przy podobnych założeniach o funkcji, wykładnik zbieżności metody siecznych dla zer jednokrotnych i dostatecznie gładkich funkcji wynosi $p^*=\frac{1+\sqrt{5}}{2}=1.618\ldots$. Jako wariant metody Newtona, metoda siecznych jest również zbieżna lokalnie.


<center><math>\displaystyle x_k\,=\,x_{k-1}\,-\,\frac{x_{k-1}-x_{k-2}}
      {f(x_{k-1})-f(x_{k-2})}\,f(x_{k-1}).
</math></center>


Zauważmy, że jeśli <math>\displaystyle x_{k-1}</math> i <math>\displaystyle x_{k-2}</math> są blisko
\rysunek{stycznesiecznebisekcja.png}{Porównanie zbieżności metody bisekcji,
siebie, to <math>\displaystyle x_k</math> jest podobny do tego z metody Newtona,  
stycznych i siecznych
bowiem wtedy iloraz różnicowy
dla równania $e^x - 1 = 0$. Błąd kolejnych przybliżeń wyświetlany jest w skali
<center><math>\displaystyle
logarytmicznej.}
\frac{f(x_{k-1})-f(x_{k-2})}{x_{k-1}-x_{k-2}} \approx f'(x_{k-1}).
</math></center>
Nie wystarcza to
jednak, aby osiągnąć zbieżność z wykładnikiem
<math>\displaystyle 2</math>. Można pokazać, że wykładnik
zbieżności metody siecznych dla zer jednokrotnych dostatecznie gładkich funkcji
wynosi <math>\displaystyle p^*=\frac{1+\sqrt{5}}{2}=1.618\ldots</math>. Jako wariant metody Newtona metoda
siecznych jest również zbieżna lokalnie.


Niewątpliwą zaletą metody siecznych jest jednak to,  
Niewątpliwą zaletą metody siecznych jest jednak to, że \emph{nie wymaga obliczania pochodnej funkcji} (bywa, że dokładne wyznaczenie pochodnej jest niemożliwe, gdy np. funkcja jest zadana zewnętrzną procedurą, do której kodu źródłowego nie mamy dostępu; zwykle też koszt obliczenia wartości pochodnej jest wyższy od kosztu obliczenia wartości funkcji). Jest to również istotne w pakietach numerycznych, gdzie czasem nie chcemy wymagać od użytkownika czegokolwiek, oprócz podania wzoru na funkcję i przybliżonej lokalizacji miejsca zerowego.
że nie wymaga ona obliczania pochodnej funkcji (co
w praktyce jest często bardzo trudne, a niekiedy
nawet niemożliwe), a tylko jej wartości. Jest to również istotne w pakietach
numerycznych, gdzie czasem nie chcemy wymagać od użytkownika czegokolwiek ponad
podanie funkcji i przybliżonej lokalizacji miejsca zerowego.


Ponadto, często zdarza się, że wyznaczenie wartości pochodnej, <math>\displaystyle f'(x_k)</math>, jest
Ponadto, często zdarza się, że wyznaczenie wartości pochodnej, $f'(x_k)$, jest
tak samo, albo i bardziej kosztowne od wyznaczenia wartości <math>\displaystyle f(x_k)</math>. W takim
tak samo, albo i bardziej kosztowne od wyznaczenia wartości $f(x_k)$. W takim
wypadku okazuje się, że metoda stycznych --- choć wolniej zbieżna niż metoda
wypadku okazuje się, że metoda stycznych --- choć wolniej zbieżna niż metoda
stycznych --- dzięki temu, że
stycznych --- dzięki temu, że jej iteracja wymaga jedynie wyznaczenia jednej wartości $f$, jest \emph{bardziej efektywna} od metody Newtona: koszt osiągnięcia zadanej dokładności jest w takim przypadku mniejszy od analogicznego kosztu dla metody Newtona.
jej iteracja wymaga jedynie wyznaczenia jednej wartości <math>\displaystyle f</math>, jest <strong>bardziej
efektywna</strong> od metody Newtona: koszt osiągnięcia zadanej dokładności jest w
takim przypadku mniejszy od analogicznego kosztu dla metody Newtona.


Jednak, gdy żądane przez użytkownika dokładności są bardzo wielkie, a sama
Jednak gdy żądane przez użytkownika dokładności są bardzo wielkie, a sama
funkcja "złośliwa", metoda siecznych może cierpieć z powodu redukcji cyfr
funkcja ,,złośliwa'', metoda siecznych może cierpieć z powodu redukcji cyfr
przy odejmowaniu.
przy odejmowaniu.


[[Image:MNstycznesiecznebisekcja.png|thumb|450px|center|Porównanie zbieżności metody bisekcji,
\subsection{Metoda Brenta}
stycznych i siecznych
dla równania <math>\displaystyle e^x - 1 = 0</math>. Błąd kolejnych przybliżeń wyświetlany jest w skali
logarytmicznej.]]
 
==Metoda Brenta==


Naturalnie, uważny student zaczyna zadawać sobie pytanie, czy nie można w jakiś
Naturalnie, uważny student zaczyna zadawać sobie pytanie, czy nie można w jakiś
sposób połączyć globalnej zbieżności metody bisekcji z szybką zbieżnością
sposób połączyć globalnej zbieżności metody bisekcji z szybką zbieżnością
metody siecznych tak, by uzyskać metodę zbieżną globalnie, a jednocześnie
metody siecznych tak, by uzyskać metodę zbieżną globalnie, a jednocześnie
istotnie szybciej niż liniowo (wariant odwrotny: opracowanie metody łączącej
istotnie szybciej niż liniowo.
wolną zbieżność bisekcji z lokalną zbieżnością siecznych pozostawiamy
 
studentom gorszych uczelni).  
Okazuje się, że można to zrobić, wprowadzając metodę opartą na {\em
trzech} punktach lokalizujących miejsce zerowe: dwóch odcinających zero tak jak
w metodzie bisekcji i trzecim, konstruowanym np. jak w metodzie stycznych. W
kolejnej iteracji wymieniamy jeden z punktów albo wedle metody
siecznych (i wtedy zapewne szybciej zbliżamy się do zera), albo wykonując bisekcję (aby zagwarantować sobie, że w wiadomym przedziale miejsce zerowe rzeczywiście się znajduje).
 
Ten prosty pomysł \emph{metody hybrydowej} wymaga jednak subtelnego dopracowania. Zostało to zrobione w 1973 roku przez \href{http://www.rpbrent.com}{Richarda Brenta}. %\biografia{Richard}{Brent}{}
Funkcja MATLABa (i Octave'a) \lstoct{fzero} implementują właśnie metodę Brenta.
Autorem implementacji w Octave jest ówczesny student \href{http://www.mimuw.edu.pl}{matematyki} na Uniwersytecie Warszawskim, Łukasz Bodzon. Fortranowski kod metody Brenta można znaleźć także w \href{http://www.netlib.org/go/zeroin.f}{Netlibie}. Inną funkcją Octave'a służącą rozwiązywaniu równań nieliniowych jest \lstoct{fsolve}:
 
\begin{outoct}
octave:1> [X, MSG, INFO] = fsolve ('cos', 1)
X =  1.5708
MSG =  1
INFO = solution converged within specified tolerance
 
octave:2> cos(X)
ans =  6.1230e-17
\end{outoct}
 
 
\subsection{Metody dla układów równań nieliniowych}
 
Niektóre z poznanych metod można łatwo rozszerzyć na przypadek układu $N$ równań z $N$ niewiadomymi, to znaczy
\[
F(x) = 0,
\]
gdzie $F: R^N \rightarrow R^N$.
 
\subsubsection{Metoda Banacha}
 
Jak pamiętamy, \link{#Banacha, o kontrakcji}{twit}{metodę Banacha} sformułowaliśmy od razu dla zagadnienia wielowymiarowego. Analiza i własności metody są zatem już \link{#Banacha, o kontrakcji}{twit}{omówione}.
\subsubsection{Wielowymiarowa metoda Newtona}
\label{sec:multinewton}
 
Okazuje się, że metodę Newtona można uogólnić na przypadek układu $N$ równań nieliniowych z $N$ niewiadomymi. Zapiszmy wzór na skalarną metodę Newtona odrobinę inaczej:
\[
x_{k+1} = x_k - [F'(x_k)]^{-1}\, F(x_k).
\]
 
Niezwykłe jest, że taki wzór nie tylko ma sens w przypadku, gdy $F: R^N \rightarrow R^N$ (wtedy $F'(x_k)$ jest macierzą Jakobianu $F$ w punkcie $x_k$), ale dodatkowo ta metoda zachowuje wszystkie własności metody stycznych dla przypadku skalarnego:
 
\begin{thm}[O zbieżności wielowymiarowej metody Newtona]
Załóżmy, że $F: R^N \rightarrow R^N$ i istnieje $x^* \in R^N$ taki, że
\[
F(x^*) = 0.
\]
Załóżmy ponadto, że $F$ jest różniczkowalna, a jej pochodna $F': R^N \rightarrow R^{N\times N}$ jest lipschitzowska i dodatkowo
\[
F'(x^*) \mbox{ jest nieosobliwa}.
\]
Wówczas, jeśli tylko $x_0$ jest dostatecznie blisko rozwiązania $x^*$, to ciąg kolejnych przybliżeń $x_k$, generowany wielowymiarową metodą Newtona, jest zbieżny do $x^*$. Co więcej, szybkość zbieżności jest kwadratowa.
\end{thm}
 
\subsubsection{Implementacja wielowymiarowej metody Newtona}
 
Implementując wielowymiarową metodę Newtona, musimy dysponować nie tylko funkcją obliczającą $N$ współrzędnych wektora wartości $F$, ale także funkcją wyznaczającą $N^2$ elementów macierzy pochodnej $F$ w zadanym punkcie $x \in R^N$. Zwróćmy uwagę na to, że w implementacji metody nie trzeba wyznaczać $F'(x_k)^{-1}$, tylko rozwiązać układ równań:
 
\begin{alg}[Wielowymiarowa metoda Newtona]
while (!stop)
{
rozwiąż (względem $s$) układ równań liniowych $F'(x_k)\, s = -F(x_k)$;
$x_{k+1}$ = $x_k$ + $s$;
}
\end{alg}


Okazuje się, że można to zrobić, wprowadzając metodę opartą na <strong>trzech</strong> punktach lokalizujących miejsce zerowe: dwóch odcinających zero tak jak
O tym, \link{MN05}{MN05}{jak skutecznie rozwiązywać układy równań liniowych}, dowiesz się z kolejnych wykładów. Dowiesz się także, dlaczego \textit{nie należy} w implementacji korzystać z wyznaczonej \textit{explicite} macierzy odwrotnej do macierzy Jakobianu.
w metodzie bisekcji i trzecim, konstruowanym jak np. w metodzie stycznych. W
kolejnej iteracji konstruujemy '''??''' wymieniamy jeden z punktów albo wedle metody
siecznych (i wtedy zapewne szybciej zbliżamy się do zera), albo robiąc bisekcję
(aby zagwarantować sobie, że w wiadomym przedziale miejsce zerowe rzeczywiście
się znajduje).


Ten prosty pomysł metody hybrydowej wymaga jednak subtelnego dopracowania, co
\literatura{3}
zostało zrobione w 1973 roku przez Richarda Brenta, który twórczo rozwinął wcześniejsze idee
Dekkera, van Wijngaardena i Dijkstry.


[[grafika:Brent.jpg|thumb|right||Richard Brent<br>  [[Biografia Brent|Zobacz biografię]]]]
Rozdziały 3.5 i 3.6 nie są obowiązkowe.


Funkcja MATLABa (i Octave'a) <code>fzero</code> implementuje właśnie metodę Brenta.
Wiele wariantów metod rozwiązywania \emph{układów} równań nieliniowych jest przedstawionych w znakomitej monografii \ksiazka{C.T.Kelley}{Iterative Solution of Systems of Linear and Nonlinear Equations}{SIAM, 1995.}
Ciekawostką jest, że autorem implementacji w Octave jest ówczesny student
matematyki na Uniwersytecie Warszawskim, Łukasz Bodzon.


==Metody dla układów równań nieliniowych==
Opis metody Brenta znajdziesz w książce \ksiazka{R. Brent}{Algorithms for Minimization Without Derivatives}{Prentice-Hall, 1973.}

Wersja z 19:25, 28 wrz 2006

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%%%%%% makrodefinicje latex2mediawiki %%%%%%%%%%%% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

% \lstoct{..} zamiast \lstoct!...! %% \\lstC!([^!]*)! %% \\lstC\{\1\}

%% co z algorytmami?

%% Dla niektorych dokumentow moze byc konieczne dostosowanie %% ponizszych makr.

\newcommand{\gdef}{\def} \newcommand{\newenvironment}[3]{\newcommand{\begin#1}{ #2 }\newcommand{\end#1}{ #3 }} \newcommand{\begin}[1]{\begin#1 } \newcommand{\end}[1]{\end#1 }


%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \newcommand{\maketemplate3}[2]{ \newcommand{\begin#1}{

      1. {###{#2\PIPE \PIPE \PIPE

} \newcommand{\begin#1}[1]{

      1. {###{#2\PIPE ##1\PIPE ##1\PIPE

} \newcommand{\end#1}{###}###}

} }


%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \newcommand{\maketemplatealg}[2]{ \newcommand{\begin#1}{

      1. {###{#2\PIPE \PIPE \PIPE
\EATWS}
\newcommand{\begin#1}[1]{

###{###{#2\PIPE ##1\PIPE \PIPE 
<pre>\EATWS}
\newcommand{\end#1}{

###}###}

} }

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \newcommand{\makeexe}[2]{ \newcommand{\begin#1}{

#2

} \newcommand{\begin#1}[1]{

#2: ##1

}

\newcommand{\end#1}{

} }

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \newcommand{\makesol}[2]{ \newcommand{\begin#1}{

#2

} \newcommand{\begin#1}[1]{

#2: ##1

}

\newcommand{\end#1}{

} }

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \newcommand{\makehider}[2]{ \newcommand{\begin#1}{

#2

} \newcommand{#\#1}[1]{

#2

} }

\newcommand{\makehidersmall}[2]{ \newcommand{\begin#1}{

#2

} \newcommand{#\#1}[1]{

#2

} }


\newcommand{\maketemplate2}[2]{ \newcommand{\begin#1}{

      1. {###{#2\PIPE \PIPE

} \newcommand{\begin#1}[1]{

      1. {###{#2\PIPE ##1\PIPE

} \newcommand{\end#1}{###}###}

} \newcommand{#\#1}[1]{

      1. {###{#2\PIPE \PIPE
    1. 1
      1. }###}

} }

%% UWAGA UWAGA UWAGA %% Koniecznie prosze dopisac tutaj swoje srodowiska %% tworzone za pomoca \newtheorem. \maketemplate3{definicja}{definicja} \maketemplate3{definition}{definicja} \maketemplate3{def}{definicja} \maketemplate3{defin}{definicja} \maketemplate3{dfn}{definicja} \maketemplate3{df}{definicja} \maketemplate3{twierdzenie}{twierdzenie} \maketemplate3{theorem}{twierdzenie} \maketemplate3{theor}{twierdzenie} \maketemplate3{thm}{twierdzenie} \maketemplate3{tw}{twierdzenie} \maketemplate3{stwierdzenie}{stwierdzenie} \maketemplate3{stw}{stwierdzenie} \maketemplate3{proposition}{stwierdzenie} \maketemplate3{prop}{stwierdzenie} \maketemplate3{lemat}{lemat} \maketemplate3{lem}{lemat} \maketemplate3{lemma}{lemat} \maketemplate3{uwaga}{uwaga} \maketemplate3{uwa}{uwaga} \maketemplate3{obserwacja}{uwaga}%NOWE \maketemplate3{remark}{uwaga} % \maketemplate3{rem}{uwaga} \maketemplate3{wniosek}{wniosek} \maketemplate3{wn}{wniosek} \maketemplate3{corollary}{wniosek} \maketemplate3{corol}{wniosek} \maketemplate3{conjecture}{wniosek} \maketemplate3{cor}{wniosek} \maketemplate3{con}{wniosek} \maketemplate3{fakt}{fakt} \maketemplate3{fa}{fakt} \maketemplate3{fact}{fakt} \maketemplate3{dowod}{dowod} \maketemplate3{dw}{dowod} \maketemplate3{proof}{dowod} \maketemplate3{prf}{dowod} \maketemplate3{przyklad}{przyklad} \maketemplate3{prz}{przyklad} \maketemplate3{kontrprzyklad}{kontrprzyklad}%NOWE \maketemplate3{counterexample}{kontrprzyklad}%NOWE % \maketemplate3{example}{przyklad} \maketemplate3{exa}{przyklad} \maketemplate3{exm}{przyklad} \maketemplate3{cwiczenie}{cwiczenie} \maketemplate3{zadanie}{cwiczenie} \maketemplate3{zadan}{cwiczenie} \maketemplate3{zad}{cwiczenie} \maketemplate3{exercise}{cwiczenie} % \maketemplate3{exe}{cwiczenie} \makeexe{exe}{Ćwiczenie} % \makesol{sol}{Rozwiązanie} \makesol{example}{Przykład} \makesol{rem}{Uwaga}

%\maketemplate3{ex}{cwiczenie} \maketemplate3{ex}{przyklad}

\maketemplate3{EX}{cwiczenie} \maketemplate3{cw}{cwiczenie} \maketemplate3{zad}{cwiczenie} \maketemplate3{zd}{cwiczenie} \maketemplate3{obserwacja}{obserwacja} \maketemplate3{obserwacje}{obserwacje} \maketemplate3{obs}{obserwacja} \makehidersmall{wskazowka}{Wskaz�wka} \makehidersmall{hint}{Wskazówka} \makehidersmall{wsk}{Wskaz�wka} \maketemplate2{pytanie}{pytanie}%NOWE \maketemplate2{question}{pytanie}%NOWE \maketemplate3{odpowiedz}{odpowiedz} \maketemplate3{odp}{odpowiedz} \makehider{ans}{Odpowied�} \maketemplate3{problem}{problem} \makehider{rozwiazanie}{Rozwi�zanie} \makehider{rozw}{Rozwi�zanie} \makehider{solution}{Rozwi�zanie} \makehider{sol}{Rozwiązanie} \makehider{slv}{Rozwi�zanie}

%\maketemplate3{algorithm}{algorytm} \maketemplate3{algorithmic}{algorytm}


\maketemplatealg{alg}{algorytm} % \maketemplatealg{C}{kod} % \maketemplatealg{F}{kod} % \maketemplatealg{ux}{kod} % \maketemplatealg{make}{kod} % \maketemplatealg{oct}{kod} % \maketemplatealg{outoct}{wyniki} % \maketemplatealg{outux}{wyniki}

\newcommand{\beginC}{\NOCOMMENT
\EATWS}
\newcommand{\endC}{
\NOCOMMENT

}

\newcommand{\beginF}{\NOCOMMENT
\EATWS}
\newcommand{\endF}{
\NOCOMMENT

}

\newcommand{\beginoct}{\NOCOMMENT
\EATWS}
\newcommand{\endoct}{
\NOCOMMENT

}

\newcommand{\beginux}{
\EATWS} \newcommand{\endux}{

}

\newcommand{\beginmake}{\NOCOMMENT
}
\newcommand{\endmake}{
\NOCOMMENT

}

\newcommand{\beginoutoct}{
\EATWS} \newcommand{\endoutoct}{

}

\newcommand{\beginoutux}{
\EATWS} \newcommand{\endoutux}{

}

%\newcommand{\beginalgorithmic}{ %} %\newcommand{\endalgorithmic}{ %} \newcommand{\STATE}{} \newcommand{\STATE}[1]{ #1 } \newcommand{\FOR}[1]{{\bf for} #1 } \newcommand{\ENDFOR}Szablon:\bf endfor \newcommand{\IF}[1]{{\bf if} #1 } \newcommand{\ELSE}Szablon:\bf else \newcommand{\ELSEIF}[1]{{\bf else if} #1 } \newcommand{\ENDIF}Szablon:\bf endif \newcommand{\WHILE}[1]{{\bf while} #1 } \newcommand{\ENDWHILE}Szablon:\bf endwhile \newcommand{\END}Szablon:\bf end \newcommand{\RETURN}Szablon:\bf return \newcommand{\RETURN}[1]{{\bf return } #1 }


\newcommand{\section}[1]{\EQUAL #1\EQUAL


} \newcommand{\section*}[1]{\EQUAL #1\EQUAL


} \newcommand{\cwiczenia*}[1]{\EQUAL #1\EQUAL


} \newcommand{\subsection*}[1]{\EQUAL \EQUAL #1\EQUAL \EQUAL


} \newcommand{\subsubsection*}[1]{\EQUAL \EQUAL \EQUAL #1\EQUAL \EQUAL \EQUAL


} \newcommand{\subsection}[1]{\EQUAL \EQUAL #1\EQUAL \EQUAL


} \newcommand{\subsubsection}[1]{\EQUAL \EQUAL \EQUAL \EQUAL #1\EQUAL \EQUAL \EQUAL \EQUAL


} \newcommand{\paragraph}[1]{


} \newcommand{\subparagraph}[1]{


} \newcommand{\part}[1]{


}

%% TEGO SIE POZBYWAMY \newcommand{\documentclass}[1]{} \newcommand{\usepackage}[1]{} \newcommand{\usepackage}[2]{} \newcommand{\maketitle}{} \newcommand*{\vspace}[1]{ } \newcommand*{\color}[1]{ } \newcommand{\pagestyle}[1]{} \newcommand{\tableofcontents}{} \newcommand{\theoremstyle}[1]{} \newcommand{\documentenvironment}[]{} \newcommand{\begindocument}[]{} \newcommand{\enddocument}[]{} \newcommand*{\rm}[0]{} \newcommand{\Proof}[1]{ #1 } \newcommand*{\bee}{} \newcommand*{\ep}{} \newcommand*{\hspace*}{} \newcommand*{\fill}[1]{} \newcommand*{\index}[1]{} \newcommand*{\medskip}{

} \newcommand*{\bigskip}{

} \newcommand{\index}[1]{ }

%\newcommand{\newtheorem}[3]{ %\newcommand{\begin#1}{ % %$\EQUAL \EQUAL \EQUAL \EQUAL #3\EQUAL \EQUAL \EQUAL \EQUAL % %} % %\newcommand{\end#1}{ % %} %} % %\newcommand{\newtheorem*}[2]{ %\newcommand{\begin#1}{ % %\EQUAL \EQUAL \EQUAL \EQUAL #2\EQUAL \EQUAL \EQUAL \EQUAL % %} % %\newcommand{\end#1}{ % %} %}

%% FORMATOWANIE \newcommand*{\it}[1]{\QUOTE \QUOTE #1\QUOTE \QUOTE } \newcommand*{\sl}[1]{\QUOTE \QUOTE #1\QUOTE \QUOTE } \newcommand*{\em}[1]{#1} \newcommand*{\bf}[1]{\QUOTE \QUOTE \QUOTE #1\QUOTE \QUOTE \QUOTE } \newcommand*{\tt}[1]{#1} \newcommand*{\textrm}[1]{#1} \newcommand*{\underline}[1]{#1} \newcommand*{\textnormal}[1]{#1} \newcommand*{\textsf}[1]{#1} \newcommand*{\texttt}[1]{#1} \newcommand*{\textmd}[1]{#1} \newcommand*{\emph}[1]{#1} %\newcommand*{\textsc}[1]{ #1 } \newcommand*{\textsc}[1]{\QUOTE \QUOTE #1\QUOTE \QUOTE } \newcommand*{\textbf}[1]{\QUOTE \QUOTE \QUOTE #1\QUOTE \QUOTE \QUOTE } \newcommand*{\textup}[1]{#1} \newcommand*{\textit}[1]{\QUOTE \QUOTE #1\QUOTE \QUOTE } \newcommand*{\textsl}[1]{\QUOTE \QUOTE #1\QUOTE \QUOTE }

\newcommand*{\\}{
} \newcommand*{\newline}{
} % \newcommand*{\mbox}[1]{#1}


\newcommand*{\rysunek}[2]{Plik:MN} \newcommand*{\wikirysunek}[2]{[[Image:#1\PIPE thumb\PIPE 400px\PIPE \PIPE #2]]} \newcommand*{\rysunekmaly}[2]{Plik:MN}

\newcommand*{\flash}[2]{
<flash>file\EQUAL #1\PIPE width\EQUAL 550\PIPE height\EQUAL 300</flash>
#2
}

\newcommand*{\href}[2]{[#1 #2]} \newcommand*{\url}[1]{#1} \newcommand*{\link}[3]{#1\PIPE #3} \newcommand{\thmlink}[3]{#1###2\PIPE #3} \newcommand*{\wikilink}[2]{#1\PIPE #2} \newcommand*{\lstC}[1]{#1} \newcommand*{\lstF}[1]{#1} \newcommand*{\lstCs}[1]{#1} \newcommand*{\lstFs}[1]{#1} \newcommand*{\lstoct}[1]{#1} \newcommand*{\lstux}[1]{#1} \newcommand*{\ang}[1]{\QUOTE \QUOTE #1\QUOTE \QUOTE } \newcommand*{\CHECK}[1]{ } % \newcommand*{\cite}[1]{\QUOTE \QUOTE \QUOTE (Uzupe�nij: #1)\QUOTE \QUOTE \QUOTE } \newcommand*{\cite}[1]{}

\newcommand*{\biografia}[3]{[[grafika:#2.jpg\PIPE thumb\PIPE right\PIPE \PIPE #1 #2
#3 Biografia #2\PIPE Zobacz biografię]]}

\newcommand{\ksiazka}[3]{

  • #1, #2, #3}

\newcommand{\literatura}[1]{\EQUAL\EQUAL Literatura\EQUAL\EQUAL

W celu dogłębnego zapoznania się z omawianym na wykładzie materiałem, przeczytaj rozdział #1 w

  • D. Kincaid, W. Cheney Analiza numeryczna, Wydawnictwa Naukowo-Techniczne, Warszawa 2006, ISBN 83-204-3078-X.

}

% z dane.tex

\newcommand{\Dane}{F} \newcommand{\Alg}Szablon:\bf ALG \newcommand{\Info}{N} \newcommand{\Wyniki}{G} \newcommand{\Oprozw}{S} \newcommand{\dana}{f} \newcommand{\wynik}{g} \newcommand{\R}{R} \newcommand{\rd}{rd_\nu} \newcommand{\flo}{fl_\nu} \newcommand{\cond}{\mbox{cond}} \newcommand{\macheps}{\epsilon_{\mbox{mach}}} \newcommand{\CHECK}[1]{({\bf Do sprawdzenia: #1})}

%% SYMBOLE

\newcommand*{\ldots}{...} \newcommand*{\copyright}{(c)} %\newcommand*{\pounds}{$} \newcommand*{\LaTeXe}{LaTeX2e} \newcommand*{\LaTeX}{LaTeX} \newcommand*{\TeX}{TeX}

%% LISTY

%% IMPLEMENTACJA STOSU \newcommand{\FIRST}[2]{#1} \newcommand{\STACK}[1]{#1{}{}} \newcommand{\APPEND1}[3]{\renewcommand{\STACK}[1]{##1{#1#3}{{#1}{#2}}}} \newcommand{\APPEND}[1]{\STACK[\APPEND1][#1]} \newcommand{\POP1}[2]{\renewcommand{\STACK}[1]{##1#2}} \newcommand{\POP}{\STACK[\POP1]} \newcommand{\TOP}{\STACK[\FIRST]} \newcommand{\HASH}[1]{##} % potrzebne, bo hashe so redukowane przy instancjalizacji

\newcommand{\beginenumerate}{\APPEND[\HASH{}]} \newcommand{\endenumerate}{\POP} \newcommand{\beginitemize}{\APPEND[*]} \newcommand{\enditemize}{\POP} \newcommand{\begindescription}{\APPEND[:]} \newcommand{\enddescription}{\POP} \newcommand{\item}[1]{ \POP\TOP; #1 \TOP:\APPEND[:] } \newcommand{\item}{ \TOP }

%% ROWNANIA \newcommand{\beginequation}{

$$\EATWS } \newcommand{\endequation}{$$

}

\newcommand{\begincomment}{ }


\newcommand{\beginlatexonly}{ }


\newcommand{\beginequation*}{

$$\EATWS } \newcommand{\endequation*}{$$

}

\newcommand{\begindisplaymath}{

$$\EATWS } \newcommand{\enddisplaymath}{$$

} \newcommand{\beginmath}{$\EATWS } \newcommand{\endmath}{$}

\newcommand{\beginquote}{

} \newcommand{\endquote}{

} \newcommand{\beginbadquote}{

} \newcommand{\endbadquote}{

}

\newcommand{\begineqnarray*}{

$$\aligned \EATWS } \newcommand{\endeqnarray*}{\endaligned$$

} \newcommand{\begineqnarray}{

$$\aligned \EATWS } \newcommand{\endeqnarray}{\endaligned$$

} \newcommand{\beginalign*}{

$$\aligned \EATWS } \newcommand{\endalign*}{\endaligned$$

} \newcommand{\beginalign}{

$$\aligned \EATWS } \newcommand{\endalign}{\endaligned$$

} \newcommand{\[}{

$$\EATWS } \newcommand{\]}{$$


} \newcommand{\(}{ $\EATWS } \newcommand{\)}{ $ }

%% LINKI %\newcommand*{\label}[1]{{{kotwica\PIPE #1\PIPE }}} \newcommand{\label}[1]{} \newcommand{\kotwa}[1]{ } \newcommand{\ref}[1]{#####1\PIPE Uzupelnic: #1 }

%% TABELKI

\renewcommand*{\begintabular}[1]{ \TABULARMODE \renewcommand*{\\}{ \PIPE - \PIPE \EATWS } \renewcommand*{\hline}{}

  1. {\PIPE border\EQUAL 1

\PIPE + \PIPE - \PIPE \EATWS }

\renewcommand*{\begintabular}[2]{ \TABULARMODE \renewcommand*{\\}{ \PIPE - \PIPE \EATWS } \renewcommand*{\hline}{}

  1. {\PIPE border\EQUAL 1

\PIPE + Uzupelnij tytul \PIPE - \PIPE \EATWS }

\renewcommand*{\begintabular*}[3]{ \TABULARMODE \renewcommand*{\\}{ \PIPE - \PIPE \EATWS } \renewcommand*{\hline}{}

  1. {\PIPE border\EQUAL 1

\PIPE + Uzupelnij tytul \PIPE - \PIPE \EATWS }

\renewcommand*{\endtabular}{ \TABULARMODE \renewcommand*{\\}{
} \PIPE #} \renewcommand*{\hline}{


} }

\newcommand*{\hline}{


}

\newcommand{\MATHEMBEDDEFSTRUE}{\renewcommandM{\textnormal}[1]{ $ #1 $ }\renewcommandM{\textrm}[1]{ $ #1 $ }\renewcommandM{\mbox}[1]{ \BACKSLASH mbox{#1} }\renewcommandM{\hbox}[1]{ $ #1 $ }} \newcommand{\MATHEMBEDDEFSFALSE}{\renewcommandM{\textnormal}[1]{\BACKSLASH textnormal{#1}}\renewcommandM{\textrm}[1]{\BACKSLASH textrm{#1}}\renewcommandM{\mbox}[1]{\BACKSLASH mbox{#1}}\renewcommandM{\hbox}[1]{\BACKSLASH hbox{#1}}} \newcommandM{\beginarray}{\MATHEMBEDDEFSFALSE\BACKSLASH begin{array}} \newcommandM{\endarray}{\MATHEMBEDDEFSTRUE\BACKSLASH end{array}} \newcommandM{\beginpmatrix}{\MATHEMBEDDEFSFALSE\BACKSLASH begin{pmatrix}} \newcommandM{\endpmatrix}{\MATHEMBEDDEFSTRUE\BACKSLASH end{pmatrix}} \MATHEMBEDDEFSTRUE

\newcommand{\enablenowiki}{\renewcommand{\beginnowiki}{}\renewcommand{\endnowiki}{}} \newcommand{\disablenowiki}{\renewcommand{\beginnowiki}{}\renewcommand{\endnowiki}{}} \enablenowiki

\newcommand*{\EQUALREAD}{\EQUAL}

\newcommand{\%}{%} %%% zamienia znak \% na taki, ktory da sie przezyc

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \begin{comment} Konwertowane z pliku LaTeX przez latex2mediawiki, zob. http://www.ii.uj.edu.pl/~pawlik1/latex2mediawiki.php. Niezb�dne rozszerzenia i modyfikacje oryginalnego latex2mediawiki wprowadzi� przykry@mimuw.edu.pl \end{comment} %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

\section{Równania nieliniowe} \label{MN02}


W wielu zadaniach, m.in. matematyki stosowanej, spotykamy się z problemem rozwiązania skalarnego równania nieliniowego postaci $f(x) = 0$. Oto kilka przykładów:

\begin{example} Równanie Keplera \[ f(x) \equiv x - \epsilon \sin(x) - M = 0 \] jest bardzo ważne w astronomii, jego rozwiązanie pozwala wyznaczyć przyszłe położenie planety. Parametr $\epsilon$ odpowiada ekscentryczności orbity i przyjmuje wartości z przedziału $[0,1]$. Poza paru prostymi przypadkami, w ogólności równanie Keplera nie daje się rozwiązać w terminach funkcji elementarnych.

\biografia{Johann}{Kepler}{}

\end{example}

\begin{example} Znajdowanie miejsc zerowych wielomianu \[ f(x) \equiv a_nx^n + \ldots + a_1x + a_0 = 0. \] Bardzo wiele modeli matematycznych wymaga rozwiązania równania z wielomianową nieliniowością. Piękne \link{MN14}{MN14}{kwadratury} (Gaussa) opierają się na węzłach będących zerami pewnego wielomianu. Wielomiany są bardzo szczególnymi funkcjami i dla nich istnieje szereg wyspecjalizowanych metod znajdowania ich pierwiastków, m.in. metoda Laguerre'a, metoda Bairstow'a (o nich tu nie będziemy mówić), a także zaskakujące metody sprowadzające zadanie poszukiwania miejsc zerowych wielomianu do zupełnie innego zadania matematycznego --- o nich jednak będzie mowa dopiero w wykładzie dotyczącym \link{MN13}{MN13}{znajdowania wartości własnych macierzy}. \end{example}

\begin{example} Obliczanie pierwiastka kwadratowego z zadanej liczby $a$, czyli sposób na implementację funkcji ,,\lstC{sqrt()}. Można to zadanie wyrazić, jako rozwiązywanie równania \[ f(x) \equiv x^2 - a = 0. \] Szybkie algorytmy wyznaczania pierwiastka kwadratowego były znane już starożytnym. W wykładzie zrozumiemy, dlaczego \emph{metoda Herona},

%\biografia{}{Heron}{}

$$ x_{k+1} = \frac{1}{2}\left(x_k + \frac{a}{x_k}\right) $$ daje bardzo dobre przybliżenie $\sqrt{a}$ już po kilku iteracjach. \end{example}

\begin{example} Implementacja wyznaczania odwrotności liczby $a$ (\emph{bez} dzielenia!) jest możliwa, gdy odpowiednią metodą będziemy poszukiwać rozwiązania równania \[ f(x) \equiv \frac{1}{x} - a = 0. \] To zadanie jest ważne praktycznie, np. tak można poprawić precyzję \href{http://www.amd.com/us-en/assets/content_type/white_papers_and_tech_docs/21928.pdf}{funkcji wektorowych stosowanych w niektórych procesorach AMD}. Okazuje się, że instrukcja procesora służąca do równoległego obliczania odwrotności sekwencji liczb umieszczonych w 128-bitowym rejestrze wektorowym daje wynik z małą precyzją (oczywiście po to, by wykonywała się szybciej!). Jeśli taka dokładność wyniku nie odpowiada nam, możemy ją --- zgodnie z manualem procesora --- poprawić, rozwiązując właśnie takie równanie jak powyżej, metodą korzystającą wyłącznie z (wektorowych) operacji mnożenia i dodawania. \end{example}

\subsection{Bisekcja}

\emph{Metoda bisekcji}, czyli \emph{połowienia}, często stosowana w innych działach informatyki, jest dość naturalną metodą obliczania zer skalarnych funkcji ciągłych określonych na danym przedziale $[a,b]$ i zmieniających znak. Dokładniej, rozpatrzmy klasę funkcji

\begin{equation} \label{dfkl}

 F\,=\,\{\,f\in C([a,b])\,:\;f(a)\cdot f(b) < 0\,\},

\end{equation}

to znaczy $f \in F$ przyjmują w krańcach przedziału wartości przeciwnego znaku. Oczywiście, każda funkcja $f\in F$ ma, na mocy twierdzenia Darboux, co najmniej jedno zero w $[a,b]$. Startując z przedziału $[a,b]$, w kolejnych krokach metody bisekcji obliczamy informację o wartości $f$ w środku przedziału, co pozwala nam w następnym kroku zmniejszyć o połowę przedział, w którym na pewno znajduje się zero funkcji.

Bisekcję realizuje następujący ciąg poleceń, po wykonaniu którego $x$ jest przybliżeniem zera funkcji $f$ z zadaną dokładnością $\epsilon$. \begin{C}[Metoda bisekcji] lewy = a; prawy = b; flewy = f(lewy); fprawy = f(prawy); x = (a+b)/2; /* przybliżenie rozwiązania */ e = (b-a)/2; /* przedział lokalizujący rozwiązanie dokładne */ while (e > $\epsilon$) { fx = f(x); /* reszta */ if ( signbit(fx) != signbit(flewy) ) { prawy = x; fprawy = fx; } else { lewy = x; flewy = fx; } x = (lewy+prawy)/2; e = e/2; } \end{C}

(funkcja języka C \lstC{signbit} bada znak liczby rzeczywistej).

Z konstrukcji metody łatwo wynika, że po wykonaniu $k$ obrotów pętli \lstC{while} (czyli po obliczeniu $k+2$ wartości funkcji) otrzymujemy $x$, które odległe jest od pewnego rozwiązania $x^*$ o co najwyżej \begin{equation} \label{blbis}

 |x-x^*|\,\le\,\Big(\frac 12\Big)^k
                 \Big(\frac{b-a}{2}\Big).

\end{equation} Metoda bisekcji jest więc zbieżna \emph{liniowo} z ilorazem $1/2$. Choć ta zbieżność nie jest imponująca, bisekcja ma kilka istotnych zalet. Oprócz jej prostoty, należy podkreślić fakt, że bisekcja jest w pewnym sensie uniwersalna. Jeśli tylko dysponujemy dwoma punktami $a$ i $b$ takimi, że $f$ przyjmuje w nich wartości przeciwnych znaków, to metoda bisekcji z pewnością znajdzie miejsce zerowe funkcji, choćby początkowa długość przedziału $|b-a|$ była bardzo duża: zbieżność metody bisekcji jest \emph{globalna}. Co ważniejsze, dla zbieżności metody bisekcji wystarcza jedynie \emph{ciągłość} funkcji. Poza tym możemy łatwo kontrolować \emph{błąd bezwzględny aproksymacji miejsca zerowego}. Konsekwencją powyższego oszacowania błędu jest bowiem następujący wniosek.

\begin{cor} Dla znalezienia zera $x^*$ z dokładnością $\epsilon>0$, wystarczy obliczyć w metodzie bisekcji \[

  k\,=\,k(\epsilon)\,=\,
   \Big\lceil{\log_2\frac{(b-a)}{\epsilon}}\Big\rceil - 1 

\] wartości funkcji. \end{cor}

\subsection{Iteracja prosta Banacha}

Zupełnie inne, i jak się okaże --- przy odrobinie sprytu bardzo skuteczne --- podejście do wyznaczania miejsca zerowego jest oparte na \emph{metodzie Banacha}. Dla większej ogólności, będziemy zakładać teraz, że $f: D\rightarrow R^N$ i $D$ jest otwartym, niepustym podzbiorem $R^N$.

Najpierw nasze równanie nieliniowe

$$ f(x) = 0 $$

przekształcamy (dobierając odpowiednią funkcję $\phi$) do równania równoważnego (tzn. mającego te same rozwiązania) \begin{equation}\label{rrw}

  x\,=\,\phi( x). 

\end{equation}

Taki $x$, dla którego zachodzi powyższa równość, nazywamy \emph{punktem stałym} odwzorowania $\phi$.

Następnie, startując z pewnego przybliżenia początkowego $x_0 \in D$, konstruujemy ciąg kolejnych przybliżeń $x_k$ według wzoru \[

  x_k\,=\,\phi( x_{k-1}),\qquad k\ge 1.

\]

\biografia{Stefan}{Banach}{}

\begin{thm}[Banacha, o kontrakcji]\label{twit} Niech $D_0$ będzie domkniętym podzbiorem dziedziny $D$, \[

  \overline D_0\,=\,D_0\subset D, 

\] w którym $\phi$ jest odwzorowaniem zwężającym. To znaczy, $\phi(D_0)\subset D_0$, oraz istnieje stała $0\le L<1$ taka, że \[

 \|\phi( x)-\phi( y)\|\,\le\,L\,\| x- y\|,
    \qquad\forall x, y\in D_0.  

\] Wtedy równanie \begin{equation}\label{rrw}

  x\,=\,\phi( x). 

\end{equation}

ma dokładnie jedno rozwiązanie $ x^*$, oraz \[

  x^*\,=\,\lim_{k\to\infty} x_k, 

\] dla dowolnego przybliżenia początkowego $ x_0\in D_0$. \end{thm}

\begin{proof}Wobec \begin{eqnarray*} \| 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{eqnarray*} dla $k\ge s$ mamy \begin{eqnarray*} \| 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{eqnarray*} Ciąg $\{ x_k\}_k$ jest więc ciągiem Cauchy'ego. Stąd istnieje granica $\alpha=\lim_{k\to\infty} x_k$, która należy do $D_0$, wobec domkniętości tego zbioru. Ponieważ lipschitzowskość $\phi$ implikuje jej ciągłość, mamy też \[

 \phi(\alpha)\,=\,\phi\Big(\lim_{k\to\infty} x_k\Big) 
  \,=\,\lim_{k\to\infty}\phi( x_k)
  \,=\,\lim_{k\to\infty} x_k\,=\,\alpha,

\] tzn. $\alpha$ jest punktem stałym odwzorowania $\phi$. Dla jednoznaczności zauważmy, że jeśliby istniał drugi, różny od $\alpha$, punkt stały $\beta$, to mielibyśmy \[

 \|\alpha-\beta\|\,=\,
  \|\phi(\alpha)-\phi(\beta)\|
  \,\le\,L\,\|\alpha-\beta\|. 

\] Stąd $1<L$, co jest sprzeczne z założeniem, że $\phi$ jest zwężająca. \end{proof}

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

\begin{cor} Przy założeniach \link{#Banacha, o kontrakcji}{twit}{twierdzenia Banacha}, metoda iteracji prostych jest zbieżna co najmniej liniowo z ilorazem $L$, tzn. \[

 \| x_k- x^*\|\,\le\,L^k\,\| x_0- x^*\|.

\] \end{cor}

\begin{example} Dla ilustracji, rozpatrzmy równanie Keplera, gdy $\epsilon < 1$: \begin{equation}\label{itp}

 x\,=\,M+\epsilon\sin(x), \qquad\mbox{dla}\qquad x\in R. 

\end{equation}

\rysunek{rownaniekeplera.png}{Graficzna ilustracja równania Keplera dla $M=1$ i $\epsilon = \frac{1}{4}$.}

W tym przypadku $\phi(x)=M+\epsilon\,\sin(x)$. Zauważmy, że w funkcja $\phi$ jest zwężająca ze stałą \[

 L \leq \max_{x} |\phi'(x)| \leq \epsilon < 1.

\] Ponieważ obrazem prostej przy przekształceniu $\phi$ jest odcinek $D = [M-\epsilon, M+\epsilon]$, to znaczy, że $\phi$ --- ograniczona do $D$ --- spełnia założenia \link{#Banacha, o kontrakcji}{twit}{twierdzenia Banacha o kontrakcji}. Stąd istnieje dokładnie jedno rozwiązanie naszego równania w przedziale $D$. 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 $x_0\in D$. Jednak, gdy $\epsilon \approx 1$, zbieżność może być bardzo powolna... (Wkrótce przekonasz się, że są szybsze metody). \end{example}

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 $\phi$ jest zwężająca na całym zbiorze $D$, tzn. $D_0=D$. Jeśli ponadto $D$ ma skończoną średnicę, $\mbox{diam}(D) < +\infty$, to dla osiągnięcia $\epsilon$-aproksymacji zera funkcji $f$ wystarczy wykonać \[

 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 

\] iteracji, niezależnie od $x_0$. Metody zbieżne dla dowolnego przybliżenia początkowego nazywamy \emph{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 do czynienia, gdy rozpatrzymy metodę Newtona.

\subsection{Metoda Newtona}

Zarówno metoda Banacha, jak i bisekcja, są zbieżnie liniowo, co w praktyce może okazać się zbieżnością dość powolną (np. dla metody zbieżnej liniowo z ilorazem $1/2$ dopiero po piątej iteracji dostajemy kolejną dokładną cyfrę wyniku). Wykorzystując więcej informacji o funkcji $f$, której miejsca zerowego poszukujemy, możemy istotnie przyspieszyć zbieżność metody. Ceną, jaką przyjdzie nam zapłacić, będzie utrata globalnej zbieżności.


\biografia{Isaac}{Newton}{}

W dalszych rozważaniach będziemy zakładać dla uproszczenia, że dziedzina $D=\R$.

Idea \emph{metody Newtona} opiera się na popularnym wśród inżynierów pomyśle {\em linearyzacji}: zamiast szukać miejsca zerowego skomplikowanej $f$, przybliżmy ją linią prostą, a dla niej już umiemy znaleźć miejsce zerowe!

\begin{latexonly} Przypisywanie metody stycznych Newtonowi jest pewną przesadą. Metodę Newtona taką, jaką znamy (z pochodną w mianowniku), zaproponował w 1740 roku Simpson (ten od kwadratury), kilknaście lat po śmierci Newtona. Żeby było jeszcze zabawniej, odkrywcą metody siecznych zdaje się być... Newton! Więcej na ten temat przeczytasz w artykule T.Ypma w SIAM Review 37, 1995. \end{latexonly} Startując z pewnego przybliżenia początkowego $x_0$, w kolejnych krokach metody, $k$-te przybliżenie $x_k$ jest punktem przecięcia stycznej do wykresu $f$ w punkcie $x_{k-1}$. Ponieważ równanie stycznej wynosi $y(x)=f(x_{k-1})+f'(x_{k-1})(x-x_{k-1})$, otrzymujemy wzór

\begin{alg}[Metoda Newtona (stycznych)] for k = 1,2,... $x_k\,=\,x_{k-1}\,-\,\frac{f(x_{k-1})}{f'(x_{k-1})}$; \end{alg}

Oczywiście, aby metoda Newtona była dobrze zdefiniowana, musimy założyć, że $f'(x_{k-1})$ istnieje i nie jest zerem.

\begin{latexonly} \rysunek{newtononestep.png}{Metoda Newtona: pierwszy krok} \end{latexonly}

\flash{Newtononestep.swf}{Postęp iteracji Newtona}

Zauważmy, że metodę Newtona można traktować jako szczególny przypadek iteracji prostych, gdzie \[

 \phi(x)\,=\,x-\frac{f(x)}{f'(x)}. 

\] Widać też, że nie jest ona zbieżna globalnie.


Metoda Newtona i jej podobne należą do grupy metod \emph{zbieżnych lokalnie}. Znaczy to, że zbieżność ciągu $\{x_k\}_k$ do zera danej funkcji $f$ jest zapewniona jedynie wtedy, gdy przybliżenia początkowe zostały wybrane dostatecznie blisko $x^*$.


Nawet jeśli pochodna w $x_{k-1}$ się nie zeruje, ciąg $\{x_k\}_k$ może nie zbiegać do zera funkcji $f$. Okazuje się jednak, że jeśli wystartujemy dostatecznie blisko rozwiązania $x^*$, to metoda Newtona jest zbieżna. Dokładniej, załóżmy najpierw, że \[ f(x^*)=0\quad \mbox{ oraz }\quad f'(x^*)\,\ne\,0. \] Ponadto załóżmy, że $f$ jest dwukrotnie różniczkowalna w sposób ciągły, $f\in C^2(D)$. Rozwijając $\phi$ w szereg Taylora w punkcie $x^*$, otrzymujemy \[

 x_k-x^*\,=\,\phi(x_{k-1})-\phi(x^*)\,=\,
 (x_{k-1}-x^*)\phi'(x^*)+(x_{k-1}-x^*)^2\phi(\xi_k)/2, 

\] gdzie $\min(x^*,x_{k-1})\le\xi_k\le\max(x^*,x_{k-1})$. Wobec tego, że $\phi'(x^*)=f(x)f(x)/(f'(x))^2=0$ i $\phi(\xi_k)=f(\xi_k)/f'(\xi_k)$, mamy \begin{equation}\label{nrpdst}

 x_k-x^*\,=\,(x_{k-1}-x^*)^2\frac{f(\xi_k)}{2f'(\xi_k)}.

\end{equation} Zdefiniujmy liczbę \[

 R_f\,=\,\sup_{r\ge 0}\sup_{\{x:|x-x^*|\le r\}}
  \Big|\frac{2(x-x^*)f(x)}{f'(x)}\Big|\,<\,1. 

\] Oczywiście $R_f>0$. Dla $x_{k-1}$ spełniającego $|x_{k-1}-x^*|\le R<R_f$, mamy z poprzedniej równości \[

 |x_k-x^*|\,\le\,q\,|x_{k-1}-x^*|,

\] gdzie $q<1$ i $q$ zależy tylko od $R$.

Niech teraz $x^*$ będzie zerem $m$-krotnym, \[

 f(x^*)=f'(x^*)=\cdots =f^{(m-1)}(x^*)=0\ne f^{(m)}(x^*),

\] gdzie $m\ge 2$, oraz niech $f$ będzie $m$-krotnie różniczkowalna w sposób ciągły. Wtedy \begin{eqnarray}

 x_k-x^* &=& (x_{k-1}-x^*)\,-\,\frac{(x_{k-1}-x^*)^m
  \frac{f^{(m)}  (\eta_k^{(1)})}{m!}}{(x_{k-1}-x^*)^{m-1}
  \frac{f^{(m-1)}(\eta_k^{(2)})}{(m-1)!}} \nonumber \\
  &=& (x_{k-1}-x^*)\left(1-\frac 1m\frac
      {f^{(m)}(\eta_k^{(1)})}{f^{(m)}(\eta_k^{(2)})}\right) \nonumber \\

&\approx & (x_{k-1}-x^*)\Big( 1-\frac 1m\Big),\label{nrtp} \end{eqnarray} o ile $x_{k-1}$ jest ``blisko $x^*$.

Metoda Newtona jest więc zbieżna lokalnie. Gdy $x_0$ jest zbyt daleko od rozwiązania może zdarzyć się, że iteracja Newtona zacznie nas oddalać od miejsca zerowego, co ilustruje poniższy przykład:

\begin{latexonly} \rysunek{newtononestepdiv.png}{Metoda Newtona: jeśli startujemy zbyt daleko od miejsca zerowego $f$, zamiast przybliżać się do niego, zaczynamy się oddalać! (gdzie będzie $x_3$?...)} \end{latexonly}

\flash{Newtononestepdiv.swf}{Metoda Newtona: jeśli startujemy zbyt daleko od miejsca zerowego $f$, zamiast przybliżać się do niego, zaczynamy się oddalać! (gdzie będzie $x_3$?...)}

Z powyższego można też wywnioskować, jaki jest charakter zbieżności metody Newtona. Dla zera jednokrotnego $x^*$ oraz $f(x^*)\ne 0$ mamy bowiem \[

 |x_k-x^*|\, \approx \,|x-x_{k-1}|^2 \frac{|f(x^*)|}{2|f'(x^*)|}.

\]

Mówimy, że zbieżność metody Newtona, gdy $f(x^*)\neq 0$ jest \emph{kwadratowa}.

\begin{prop} Jeśli $f(x^*)\neq 0$ oraz $f(x^*)=0$ to zbieżność jest nawet szybsza. Z kolei dla zera $m$-krotnego (tzn. $f(x^*) = f'(x^*)= \ldots f^{(m)}(x^*)= 0$, $m>1$) zbieżność jest liniowa z ilorazem $(1-\frac{1}{m})$. \end{prop}

Metoda Newtona jest pierwszą poznaną tutaj metodą iteracyjną, która jest (dla zer jednokrotnych) zbieżna szybciej niż liniowo. Dla takich metod wprowadza się pojęcie \emph{wykładnika zbieżności}, który jest zdefiniowany następująco.

\rysunek{stycznebisekcja.png}{Porównanie zbieżności metody bisekcji i stycznych dla równania $e^x - 1 = 0$. Błąd kolejnych przybliżeń wyświetlany jest w skali logarytmicznej, dzięki czemu lepiej widać różnicę między zbieżnością liniową a kwadratową.}

Powiemy, że metoda iteracyjna $\phi$ jest w klasie funkcji $F$ \emph{rzędu co najmniej $p\ge 1$}, gdy spełniony jest następujący warunek. Niech $f\in F$ i $f(x^*)=0$. Wtedy istnieje stała $C<\infty$ taka, że dla dowolnych przybliżeń początkowych $x_0,\ldots,x_{s-1}$ dostatecznie bliskich $x^*$, kolejne przybliżenia $x_k=\phi(x_{k-1},\ldots,x_{k-s})$ generowane tą metodą spełniają \[

 |x_k-x^*|\,\le\,C\,|x_{k-1}-x^*|^p.

\] Ponadto, jeśli $p=1$ to dodatkowo żąda się, aby $C<1$.

\begin{dfn} \emph{Wykładnikiem zbieżności} metody iteracyjnej $\phi$ w klasie $F$ nazywamy liczbę $p^*$ zdefiniowaną równością \[

 p^*\,=\,\sup\,\{\,p\ge 1:\,\phi 
   \mbox{ jest rzędu co najmniej  } p\,\}.

\] \end{dfn}

Możemy teraz sformułować następujące twierdzenie, które natychmiast wynika z poprzednich rozważań.

\begin{thm}[O rzędzie zbieżności metody Newtona] Wykładnik zbieżności metody Newtona (stycznych) wynosi $p^*=2$ w klasie funkcji o zerach jednokrotnych, oraz $p^*=1$ w klasie funkcji o zerach wielokrotnych. \end{thm}


\rysunek{multiplezeros.png}{Zbieżność metody Newtona dla zer wielokrotnych $f(x) = (x-1)^5$ jest liniowa z ilorazem $\frac{4}{5}$ (końcowe załamanie wykresu spowodowane jest przypadkowym trafieniem w dokładne miejsce zerowe). Metoda bisekcji nie jest na to czuła i dalej zbiega z ilorazem $\frac{1}{2}$.}

\subsection{Metoda siecznych}

Inną znaną i często używaną metodą iteracyjną, opartą na podobnym pomyśle linearyzacyjnym co metoda Newtona, jest \emph{metoda siecznych}, w której zamiast przybliżenia wykresu $f$ przez styczną, stosuje się przybliżenie sieczną.

Metoda ta wykorzystuje więc do konstrukcji $x_k$ przybliżenia $x_{k-1}$ i $x_{k-2}$. Musimy również wybrać dwa różne punkty startowe $x_0$ i $x_1$. Ponieważ sieczna dla $f$ w punktach $x_{k-1}$ i $x_{k-2}$ ma wzór \[

 y(x)\,=\,\frac{x-x_{k-2}}{x_{k-1}-x_{k-2}}f(x_{k-1})+
          \frac{x-x_{k-1}}{x_{k-2}-x_{k-1}}f(x_{k-2}),

\] otrzymujemy \begin{alg}[Metoda siecznych] for k = 1,2,... $x_k\,=\,x_{k-1}\,-\,\frac{x_{k-1}-x_{k-2}} {f(x_{k-1})-f(x_{k-2})}\,f(x_{k-1})$; end \end{alg}

Zauważmy, że jeśli $x_{k-1}$ i $x_{k-2}$ są blisko siebie, to $x_k$ jest podobny do tego z metody Newtona, bowiem wtedy iloraz różnicowy \link{MN14#Różniczkowanie}{MN14}{przybliża pochodną} $f$, $$ \frac{f(x_{k-1})-f(x_{k-2})}{x_{k-1}-x_{k-2}} \approx f'(x_{k-1}). $$

Nie wystarcza to jednak, aby osiągnąć zbieżność z wykładnikiem $2$. Można pokazać, że przy podobnych założeniach o funkcji, wykładnik zbieżności metody siecznych dla zer jednokrotnych i dostatecznie gładkich funkcji wynosi $p^*=\frac{1+\sqrt{5}}{2}=1.618\ldots$. Jako wariant metody Newtona, metoda siecznych jest również zbieżna lokalnie.


\rysunek{stycznesiecznebisekcja.png}{Porównanie zbieżności metody bisekcji, stycznych i siecznych dla równania $e^x - 1 = 0$. Błąd kolejnych przybliżeń wyświetlany jest w skali logarytmicznej.}

Niewątpliwą zaletą metody siecznych jest jednak to, że \emph{nie wymaga obliczania pochodnej funkcji} (bywa, że dokładne wyznaczenie pochodnej jest niemożliwe, gdy np. funkcja jest zadana zewnętrzną procedurą, do której kodu źródłowego nie mamy dostępu; zwykle też koszt obliczenia wartości pochodnej jest wyższy od kosztu obliczenia wartości funkcji). Jest to również istotne w pakietach numerycznych, gdzie czasem nie chcemy wymagać od użytkownika czegokolwiek, oprócz podania wzoru na funkcję i przybliżonej lokalizacji miejsca zerowego.

Ponadto, często zdarza się, że wyznaczenie wartości pochodnej, $f'(x_k)$, jest tak samo, albo i bardziej kosztowne od wyznaczenia wartości $f(x_k)$. W takim wypadku okazuje się, że metoda stycznych --- choć wolniej zbieżna niż metoda stycznych --- dzięki temu, że jej iteracja wymaga jedynie wyznaczenia jednej wartości $f$, jest \emph{bardziej efektywna} od metody Newtona: koszt osiągnięcia zadanej dokładności jest w takim przypadku mniejszy od analogicznego kosztu dla metody Newtona.

Jednak gdy żądane przez użytkownika dokładności są bardzo wielkie, a sama funkcja ,,złośliwa, metoda siecznych może cierpieć z powodu redukcji cyfr przy odejmowaniu.

\subsection{Metoda Brenta}

Naturalnie, uważny student zaczyna zadawać sobie pytanie, czy nie można w jakiś sposób połączyć globalnej zbieżności metody bisekcji z szybką zbieżnością metody siecznych tak, by uzyskać metodę zbieżną globalnie, a jednocześnie istotnie szybciej niż liniowo.

Okazuje się, że można to zrobić, wprowadzając metodę opartą na {\em trzech} punktach lokalizujących miejsce zerowe: dwóch odcinających zero tak jak w metodzie bisekcji i trzecim, konstruowanym np. jak w metodzie stycznych. W kolejnej iteracji wymieniamy jeden z punktów albo wedle metody siecznych (i wtedy zapewne szybciej zbliżamy się do zera), albo wykonując bisekcję (aby zagwarantować sobie, że w wiadomym przedziale miejsce zerowe rzeczywiście się znajduje).

Ten prosty pomysł \emph{metody hybrydowej} wymaga jednak subtelnego dopracowania. Zostało to zrobione w 1973 roku przez \href{http://www.rpbrent.com}{Richarda Brenta}. %\biografia{Richard}{Brent}{} Funkcja MATLABa (i Octave'a) \lstoct{fzero} implementują właśnie metodę Brenta. Autorem implementacji w Octave jest ówczesny student \href{http://www.mimuw.edu.pl}{matematyki} na Uniwersytecie Warszawskim, Łukasz Bodzon. Fortranowski kod metody Brenta można znaleźć także w \href{http://www.netlib.org/go/zeroin.f}{Netlibie}. Inną funkcją Octave'a służącą rozwiązywaniu równań nieliniowych jest \lstoct{fsolve}:

\begin{outoct} octave:1> [X, MSG, INFO] = fsolve ('cos', 1) X = 1.5708 MSG = 1 INFO = solution converged within specified tolerance

octave:2> cos(X) ans = 6.1230e-17 \end{outoct}


\subsection{Metody dla układów równań nieliniowych}

Niektóre z poznanych metod można łatwo rozszerzyć na przypadek układu $N$ równań z $N$ niewiadomymi, to znaczy \[ F(x) = 0, \] gdzie $F: R^N \rightarrow R^N$.

\subsubsection{Metoda Banacha}

Jak pamiętamy, \link{#Banacha, o kontrakcji}{twit}{metodę Banacha} sformułowaliśmy od razu dla zagadnienia wielowymiarowego. Analiza i własności metody są zatem już \link{#Banacha, o kontrakcji}{twit}{omówione}.

\subsubsection{Wielowymiarowa metoda Newtona} \label{sec:multinewton}

Okazuje się, że metodę Newtona można uogólnić na przypadek układu $N$ równań nieliniowych z $N$ niewiadomymi. Zapiszmy wzór na skalarną metodę Newtona odrobinę inaczej: \[ x_{k+1} = x_k - [F'(x_k)]^{-1}\, F(x_k). \]

Niezwykłe jest, że taki wzór nie tylko ma sens w przypadku, gdy $F: R^N \rightarrow R^N$ (wtedy $F'(x_k)$ jest macierzą Jakobianu $F$ w punkcie $x_k$), ale dodatkowo ta metoda zachowuje wszystkie własności metody stycznych dla przypadku skalarnego:

\begin{thm}[O zbieżności wielowymiarowej metody Newtona] Załóżmy, że $F: R^N \rightarrow R^N$ i istnieje $x^* \in R^N$ taki, że \[ F(x^*) = 0. \] Załóżmy ponadto, że $F$ jest różniczkowalna, a jej pochodna $F': R^N \rightarrow R^{N\times N}$ jest lipschitzowska i dodatkowo \[ F'(x^*) \mbox{ jest nieosobliwa}. \] Wówczas, jeśli tylko $x_0$ jest dostatecznie blisko rozwiązania $x^*$, to ciąg kolejnych przybliżeń $x_k$, generowany wielowymiarową metodą Newtona, jest zbieżny do $x^*$. Co więcej, szybkość zbieżności jest kwadratowa. \end{thm}

\subsubsection{Implementacja wielowymiarowej metody Newtona}

Implementując wielowymiarową metodę Newtona, musimy dysponować nie tylko funkcją obliczającą $N$ współrzędnych wektora wartości $F$, ale także funkcją wyznaczającą $N^2$ elementów macierzy pochodnej $F$ w zadanym punkcie $x \in R^N$. Zwróćmy uwagę na to, że w implementacji metody nie trzeba wyznaczać $F'(x_k)^{-1}$, tylko rozwiązać układ równań:

\begin{alg}[Wielowymiarowa metoda Newtona] while (!stop) { rozwiąż (względem $s$) układ równań liniowych $F'(x_k)\, s = -F(x_k)$; $x_{k+1}$ = $x_k$ + $s$; } \end{alg}

O tym, \link{MN05}{MN05}{jak skutecznie rozwiązywać układy równań liniowych}, dowiesz się z kolejnych wykładów. Dowiesz się także, dlaczego \textit{nie należy} w implementacji korzystać z wyznaczonej \textit{explicite} macierzy odwrotnej do macierzy Jakobianu.

\literatura{3}

Rozdziały 3.5 i 3.6 nie są obowiązkowe.

Wiele wariantów metod rozwiązywania \emph{układów} równań nieliniowych jest przedstawionych w znakomitej monografii \ksiazka{C.T.Kelley}{Iterative Solution of Systems of Linear and Nonlinear Equations}{SIAM, 1995.}

Opis metody Brenta znajdziesz w książce \ksiazka{R. Brent}{Algorithms for Minimization Without Derivatives}{Prentice-Hall, 1973.}