MN02

Z Studia Informatyczne
(Przekierowano z MN Wykład 2)
Przejdź do nawigacjiPrzejdź do wyszukiwania


Równania nieliniowe

<<< Powrót do strony głównej przedmiotu Metody numeryczne

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:

Przykład

Równanie Keplera

f(x)xϵsin(x)M=0

jest bardzo ważne w astronomii, jego rozwiązanie pozwala wyznaczyć przyszłe położenie planety. Parametr ϵ 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.

Johann Kepler
Zobacz biografię

Przykład

Znajdowanie miejsc zerowych wielomianu

f(x)anxn++a1x+a0=0

Bardzo wiele modeli matematycznych wymaga rozwiązania równania z wielomianową nieliniowością. 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 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 znajdowania wartości własnych macierzy.

Przykład

Obliczanie pierwiastka kwadratowego z zadanej liczby a, czyli sposób na implementację funkcji "sqrt()". Można to zadanie wyrazić, jako rozwiązywanie równania

f(x)x2a=0

Szybkie algorytmy wyznaczania pierwiastka kwadratowego były znane już starożytnym. W wykładzie zrozumiemy, dlaczego metoda Herona,

xk+1=12(xk+axk)

daje bardzo dobre przybliżenie a już po kilku iteracjach.

Przykład

Implementacja wyznaczania odwrotności liczby a (bez dzielenia!) jest możliwa, gdy odpowiednią metodą będziemy poszukiwać rozwiązania równania

f(x)1xa=0

To zadanie jest ważne praktycznie, np. tak można poprawić precyzję 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.

Bisekcja

Metoda bisekcji, czyli 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

F={fC([a,b]):f(a)f(b)<0},

to znaczy fF przyjmują w krańcach przedziału wartości przeciwnego znaku. Oczywiście, każda funkcja fF 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ą ϵ.

Algorytm 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 > <math>\epsilon</math>) 
{
	fx = f(x);   	/* reszta */
	if ( abs(fx) == 0 ) /* trafiliśmy dokładnie w miejsce zerowe */
		return(x); 
	if ( sign(fx) != sign(flewy) ) /* tzn. f(lewy)*f(x) < 0 */
	{
		prawy = x;
		fprawy = fx;
	}
	else
	{
		lewy = x;
		flewy = fx;
	}
	x = (lewy+prawy)/2; /* najlepsze przybliżenie rozwiązania przy danym przedziale */
	e = e/2;
}
return(x);

Z konstrukcji metody łatwo wynika, że po wykonaniu k obrotów pętli 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

|xx*|(12)k(ba2)

Metoda bisekcji jest więc zbieżna 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 |ba| była bardzo duża: zbieżność metody bisekcji jest globalna. Co ważniejsze, dla zbieżności metody bisekcji wystarcza jedynie ciągłość funkcji. Poza tym możemy łatwo kontrolować błąd bezwzględny aproksymacji miejsca zerowego. Konsekwencją powyższego oszacowania błędu jest bowiem następujący wniosek.

Wniosek

Dla znalezienia zera x* z dokładnością ϵ>0, wystarczy obliczyć w metodzie bisekcji

k=k(ϵ)=log2(ba)ϵ1

wartości funkcji.

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 metodzie Banacha. Dla większej ogólności, będziemy zakładać teraz, że f:DRN i D jest otwartym, niepustym podzbiorem RN.

Najpierw nasze równanie nieliniowe

f(x)=0

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

x=ϕ(x)

Taki x, dla którego zachodzi powyższa równość, nazywamy punktem stałym odwzorowania ϕ.

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

xk=ϕ(xk1),k1
Stefan Banach
Zobacz biografię

Twierdzenie Banacha, o kontrakcji

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

D0=D0D

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

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

Wtedy równanie

x=ϕ(x)

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

x*=limkxk

dla dowolnego przybliżenia początkowego x0D0.

Dowód

Wobec

xkxk1=ϕ(xk1)ϕ(xk2)Lxk1xk2Lk1x1x0,

dla ks mamy

xkxsj=s+1kxjxj1j=s+1kLj1x1x0=Ls(1+L++Lks1)x1x0Ls1Lx1x0.

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

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

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

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

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

ϕ jest zwężająca.

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

Wniosek

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

xkx*Lkx0x*

Przykład

Dla ilustracji, rozpatrzmy równanie Keplera, gdy 0<ϵ<1:

x=M+ϵsin(x),dlaxR
Graficzna ilustracja równania Keplera dla M=1 i ϵ=14.

W tym przypadku ϕ(x)=M+ϵsin(x). Zauważmy, że w funkcja ϕ jest zwężająca ze stałą

Lmaxx|ϕ(x)|ϵ<1

Ponieważ obrazem prostej przy przekształceniu ϕ jest odcinek D=[Mϵ,M+ϵ], to znaczy, że ϕ --- ograniczona do D --- spełnia założenia 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 x0D. Jednak, gdy ϵ1, zbieżność może być bardzo powolna... (Wkrótce przekonasz się, że są szybsze metody).

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

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

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

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

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.

Plik:Newton.jpg
Isaac Newton
Zobacz biografię

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

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


Startując z pewnego przybliżenia początkowego x0, w kolejnych krokach metody, k-te przybliżenie xk jest punktem przecięcia stycznej do wykresu f w punkcie xk1. Ponieważ równanie stycznej wynosi y(x)=f(xk1)+f(xk1)(xxk1), otrzymujemy wzór

Algorytm Metoda Newtona (stycznych)


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

Oczywiście, aby metoda Newtona była dobrze zdefiniowana, musimy założyć, że f(xk1) istnieje i nie jest zerem.


<flash>file=Newtononestep.swf|width=550|height=300</flash>
Postęp iteracji Newtona

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

ϕ(x)=xf(x)f(x).

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

Metoda Newtona i jej podobne należą do grupy metod zbieżnych lokalnie. Znaczy to, że zbieżność ciągu {xk}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 xk1 się nie zeruje, ciąg {xk}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 oraz f(x*)0.

Ponadto załóżmy, że f jest dwukrotnie różniczkowalna w sposób ciągły, fC2(D). Rozwijając ϕ w szereg Taylora w punkcie x*, otrzymujemy

xkx*=ϕ(xk1)ϕ(x*)=(xk1x*)ϕ(x*)+(xk1x*)2ϕ(ξk)/2,

gdzie min(x*,xk1)ξkmax(x*,xk1). Wobec tego, że ϕ(x*)=f(x)f(x)/(f(x))2=0 i ϕ(ξk)=f(ξk)/f(ξk), mamy

xkx*=(xk1x*)2f(ξk)2f(ξk)

Zdefiniujmy liczbę

Rf=supr0sup{x:|xx*|r}|2(xx*)f(x)f(x)|<1.

Oczywiście Rf>0. Dla xk1 spełniającego |xk1x*|R<Rf, mamy z poprzedniej równości

|xkx*|q|xk1x*|,

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

Niech teraz x* będzie zerem m-krotnym,

f(x*)=f(x*)==f(m1)(x*)=0f(m)(x*),

gdzie m2, oraz niech f będzie m-krotnie różniczkowalna w sposób ciągły. Wtedy

xkx*=(xk1x*)(xk1x*)mf(m)(ηk(1))m!(xk1x*)m1f(m1)(ηk(2))(m1)!=(xk1x*)(11mf(m)(ηk(1))f(m)(ηk(2)))(xk1x*)(11m),

o ile xk1 jest "blisko" x*.

Metoda Newtona jest więc zbieżna lokalnie. Gdy x0 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:


<flash>file=Newtononestepdiv.swf|width=550|height=300</flash>
Metoda Newtona: jeśli startujemy zbyt daleko od miejsca zerowego f, zamiast przybliżać się do niego, zaczynamy się oddalać! (gdzie będzie x3?...)

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

|xkx*||xxk1|2|f(x*)|2|f(x*)|

Mówimy, że zbieżność metody Newtona, gdy f(x*)0 jest kwadratowa.

Stwierdzenie

Jeśli f(x*)0 oraz f(x*)=0 to zbieżność jest nawet szybsza. Z kolei dla zera m-krotnego (tzn. f(x*)=f(x*)=f(m)(x*)=0, m>1) zbieżność jest liniowa z ilorazem (11m).

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 wykładnika zbieżności, który jest zdefiniowany następująco.

Porównanie zbieżności metody bisekcji i stycznych dla równania ex1=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 ϕ jest w klasie funkcji F rzędu co najmniej p1, gdy spełniony jest następujący warunek. Niech fF i f(x*)=0. Wtedy istnieje stała C< taka, że dla dowolnych przybliżeń początkowych x0,,xs1 dostatecznie bliskich x*, kolejne przybliżenia xk=ϕ(xk1,,xks) generowane tą metodą spełniają

|xkx*|C|xk1x*|p

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

Definicja

Wykładnikiem zbieżności metody iteracyjnej ϕ w klasie F nazywamy liczbę p* zdefiniowaną równością

p*=sup{p1:ϕ jest rzędu co najmniej p}

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

Twierdzenie 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.

Zbieżność metody Newtona dla zer wielokrotnych f(x)=(x1)5 jest liniowa z ilorazem 45 (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 12.

Metoda siecznych

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

Metoda ta wykorzystuje więc do konstrukcji xk przybliżenia xk1 i xk2. Musimy również wybrać dwa różne punkty startowe x0 i x1. Ponieważ sieczna dla f w punktach xk1 i xk2 ma wzór

y(x)=xxk2xk1xk2f(xk1)+xxk1xk2xk1f(xk2),

otrzymujemy

Algorytm Metoda siecznych


for k = 1,2,...
	<math>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>;
end

Zauważmy, że jeśli xk1 i xk2 są blisko siebie, to xk jest podobny do tego z metody Newtona, bowiem wtedy iloraz różnicowy przybliża pochodną f,

f(xk1)f(xk2)xk1xk2f(xk1)

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*=1+52=1.618. Jako wariant metody Newtona, metoda siecznych jest również zbieżna lokalnie.

Porównanie zbieżności metody bisekcji, stycznych i siecznych dla równania ex1=0. Błąd kolejnych przybliżeń wyświetlany jest w skali logarytmicznej.

Niewątpliwą zaletą metody siecznych jest jednak to, że 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(xk), jest tak samo, albo i bardziej kosztowne od wyznaczenia wartości f(xk). W takim wypadku okazuje się, że metoda siecznych --- choć wolniej zbieżna niż metoda Newtona --- dzięki temu, że jej iteracja wymaga jedynie wyznaczenia jednej wartości f, jest 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.

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 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ł metody hybrydowej wymaga jednak subtelnego dopracowania. Zostało to zrobione w 1973 roku przez Richarda Brenta. Funkcja MATLABa (i Octave'a) fzero implementują właśnie metodę Brenta. Autorem implementacji w Octave jest ówczesny student matematyki na Uniwersytecie Warszawskim, Łukasz Bodzon. Fortranowski kod metody Brenta można znaleźć także w Netlibie. Inną funkcją Octave'a służącą rozwiązywaniu równań nieliniowych jest fsolve:

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

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:RNRN.

Metoda Banacha

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

Wielowymiarowa metoda Newtona

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:

xk+1=xk[F(xk)]1F(xk)

Niezwykłe jest, że taki wzór nie tylko ma sens w przypadku, gdy F:RNRN (wtedy F(xk) jest macierzą Jakobianu F w punkcie xk), ale dodatkowo ta metoda zachowuje wszystkie własności metody stycznych dla przypadku skalarnego:

Twierdzenie O zbieżności wielowymiarowej metody Newtona

Załóżmy, że F:RNRN i istnieje x*RN taki, że

F(x*)=0

Załóżmy ponadto, że F jest różniczkowalna, a jej pochodna F:RNRN×N jest lipschitzowska i dodatkowo

F(x*) jest nieosobliwa

Wówczas, jeśli tylko x0 jest dostatecznie blisko rozwiązania x*, to ciąg kolejnych przybliżeń xk, generowany wielowymiarową metodą Newtona, jest zbieżny do x*. Co więcej, szybkość zbieżności jest kwadratowa.

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ą N2 elementów macierzy pochodnej F w zadanym punkcie xRN. Zwróćmy uwagę na to, że w implementacji metody nie trzeba wyznaczać F(xk)1, tylko rozwiązać układ równań:

Algorytm Wielowymiarowa metoda Newtona


while (!stop)
{
	rozwiąż (względem <math>s</math>) układ równań liniowych <math>F'(x_k)\, s = -F(x_k)</math>;
	<math>x_{k+1}</math> = <math>x_k</math> + <math>s</math>;
}

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

Literatura

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

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

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

Wiele wariantów metod rozwiązywania układów równań nieliniowych jest przedstawionych w znakomitej monografii

  • C.T.Kelley, Iterative Solution of Systems of Linear and Nonlinear Equations, SIAM, 1995.

Opis metody Brenta znajdziesz w książce

  • R. Brent, Algorithms for Minimization Without Derivatives, Prentice-Hall, 1973.