Skip to content

Kapitel 6

Eine nichtlineare Gleichung hat oft keine einfache algebraische Lösung. (Zum Beispiel exx=0e^{-x} - x = 0 .) Deshalb verwenden wir iterative Methoden, die mit einem Punkt x0x_0 anfangen und aus den vorherigen Punkten eine immer bessere Lösung berechnen.

Wir wollen allgemein xx^\star finden mit F(x)=0F(x^\star) = 0.

Konvergenz

Eine iterative Methode konvergiert zur Lösung, falls gilt

limkxk=x \lim_{k \to \infty} x_{k} = x^\star

und der Fehler in jeder Iteration ist

ek=xkx e_{k} = x_{k} - x^\star

Falls die Methode konvergiert, können wir ihre Konvergenzordnung p>0p > 0 feststellen falls

limkek+1ekp=C \lim_{k \to \infty} \frac{|e_{k+1}|}{|e_k|^p} = C

mit CC konstant. Das bedeutet, in der Unendlichkeit verändert sich der Fehler von Schritt zu Schritt mit Potenz pp. Wenn p=1p=1 sagen wir lineare Konvergenz, für grössere pp superlinear. Falls p=2p=2 konvergiert die Methode quadratisch. Quadratische Konvergenz bedeutet, dass sich die Anzahl der korrekten Ziffern in der Approximation bei jeder Iteration verdoppeln.

Mit Hilfe der Dreiecksungleichung können wir den Fehler abschätzen. Für lineare Konvergenz mit Rate LL gilt

xk+1xL1Lxk+1xk \| x_{k+1} - x^\star \| \leq \frac{L}{1-L} \| x_{k+1} - x_k \|

Abbruch

Wenn wir zu lange iterieren, überwiegen Rundungsfehler und wir verschwenden zeit. Deshalb wollen wir unsere Methode irgendwann abbrechen. Zwei mögliche Abbruchkriterien sind der absolute Fehler

xk+1xk<ϵabs \| x_{k+1} - x_k \| < \epsilon_{abs}

und der relative Fehler

xk+1xkxk+1<ϵrel \frac{\| x_{k+1} - x_k \|}{\| x_{k+1} \|} < \epsilon_{rel}

Meistens werden beide kombiniert

xk+1xk<ϵabs+ϵrelxk+1 \| x_{k+1} - x_k \| < \epsilon_{abs} + \epsilon_{rel} \| x_{k+1} \|

Gute Wahlen sind ϵabs=108\epsilon_{abs}=10^{-8} und ϵrel=106\epsilon_{rel}=10^{-6}.

Eine andere Möglichkeit ist da Residuum rk=F(xk)r_k = F(x_k). Wir stoppen dann, falls

rk<ϵres r_k < \epsilon_{res}

Das heisst, wir sind nahe genug an null dran. Aber diese Methode kann auch schiefgehen, falls die Funktion eine beinahe-Nullstelle hat, bei der wir stoppen.

Intervallhalbierungsverfahren

Falls die Funktion ff stetig ist und gilt f(a)f(b)<0f(a) * f(b) < 0, dann gibt es eine Nullstelle auf dem Intervall [a,b][a,b]. Wir können das verwenden, um ähnlich wie bei binary-search, in jeder Iteration das Intervall zu halbieren

mk=ak+bk2,fm=f(mk) m_k = \frac{a_k + b_k}{2}, \quad f_m = f(m_k)

Falls f(ak)fm<0f(a_k) * f_m < 0 liegt die Nullstelle im linken Teil und wir setzen ak+1=ak, bk+1=mka_{k+1} = a_k, \space b_{k+1} = m_k. Ansonsten liegt es im rechten Teil und wir arbeiten auf [mk,bk][m_k, b_k] weiter.

Da wir das Intervall in jedem Schritt halbieren, konvergiert die Methode linear mit

mkxb0a02k+1 |m_k - x^\star| \leq \frac{b_0 - a_0}{2^{k+1}}

und wir können absolute Genauigkeit ϵabs\epsilon_{abs} mit der Wahl klog2((b0a0)/ϵabs)k \geq \log_2((b_0-a_0)/\epsilon_{abs}) erreichen.

Die Methode konvergiert immer (für geeignete Startpunkte), aber langsamer als andere Methoden (wie Newton).

Fixpunkt-Methode

Ein Fixpunkt ist ein Vektor xx^\star sodass Φ(x)=x\Phi(x^\star) = x^\star. Anstatt die Lösung F(x)=0F(x)=0 zu finden, können wir das Problem zur Gleichung Φ(x)=x\Phi(x) = x umschreiben und den Fixpunkt suchen. Falls

Φ(x)=x    F(x)=0 \Phi(x) = x \iff F(x) = 0

ist die Fixpunktiteration konsistent. Unsere Iteration wird dann

xk+1=Φ(xk) x_{k+1} = \Phi(x_k)

Diese Methode konvergiert lokal und mindestens linear, falls

Φ(x)<1 |\Phi'(x^\star)| < 1

Falls Φ(x)=1|\Phi'(x^\star)| = 1 kann beides passieren und ansonsten divergiert sie. Wir können die Konvergenz am Fixpunkt also überprüfen, indem wir die erste Ableitung berechnen. In höheren Dimensionen ist die Bedingung DΦ(x)<1\| D\Phi(x^\star)\| < 1 (Norm der Jacobi-Matrix).

Wenn Φ\Phi (m+1)-mal differenzierbar ist und gilt

Φ(l)=0for l=1,,m \Phi^{(l)} = 0 \quad \text{for} \space l = 1, \dots, m

dann konvergiert sie lokal mit Ordnung mindestens m+1m+1.

Newton-Verfahren

Wir verwenden die erste Taylor-Approximation und bekommen das Newton-Update

xk+1=xkf(xk)f(xk) x_{k+1} = x_k - \frac{f(x_k)}{f'(x_k)}

was wie eine Fixpunkt-Methode mit Φ(x)=xf(x)/f(x)\Phi(x) = x - f(x)/f'(x) ist. Wenn wir die Ableitung ausrechnen, bekommen wir

Φ(x)=f(x)f(x)f(x)2 \Phi'(x) = \frac{f(x)f''(x)}{f'(x)^2}

und somit ist Φ(x)=0\Phi(x^\star) = 0. Das bedeutet, Newton konvergiert lokal quadratisch. Newton kann aber auch fehlschlagen, falls f(x)0f'(x^\star) \approx 0, der Startpunkt sehr weit weg ist, oder die Funktion nicht differenzierbar ist. Die Newton-Methode funktioniert also nicht global und kann für schlechte Startpunkte irgendwo anders hinspringen.

Sekantenverfahren

Wir wollen (oder können) die Ableitung der Funktion für das Newton-Verfahren nicht auswerten. Stattdessen approximieren wir sie durch die Sekante

f(xk)f(xk)f(xk1)xkxk1 f'(x_k) \approx \frac{f(x_k) - f(x_{k-1})}{x_k - x_{k-1}}

und erhalten ein neues Verfahren

xk+1=xkf(xk)xkxk1f(xk)f(xk1) x_{k+1} = x_k - f(x_k) \frac{x_k - x_{k-1}}{f(x_k) - f(x_k{-1})}

Die Konvergenzordnung des Sekantenverfahrens ist p1.6p \approx 1.6 (der goldene Schnitt), also konvergiert sie superlinear.

Mehrdimensionales Newton-Verfahren

Wir müssen jetzt einen Vektor xx^\star finden, sodass F(x)=0F(x^\star)=0. Wieder durch Taylor erhalten wir die Iteration

xk+1=xkJF(xk)1F(xk) x_{k+1} = x_k - J_F(x_k)^{-1} F(x_k)

wobei JF(x)J_F(x) die Jacobi-Matrix von FF ist. Wir sollten aber das inverse einer Matrix niemals manuell ausrechnen. Stattdessen lösen wir

JF(xk)sk=F(xk) J_F(x_k) s_k = -F(x_k)

und setzen

xk+1=xk+sk x_{k+1} = x_k + s_k

Wir müssen also in jeder Iteration ein n×nn \times n System lösen, was sehr teuer werden kann.

Die Methode konvergiert lokal quadratisch, falls sie zweimal stetig differenzierbar bei xx^\star und die Jacobi-Matrix invertierbar ist.

Gedämpftes Newton-Verfahren

Das Newton-Verfahren springt manchmal zu weit und divergiert für Ausgangspunkte nicht nahe an der Lösung. Deshalb dämpfen wir jeden Schritt mit einem Dämpfungsfaktor αk\alpha_k

xk+1=xkαkf(xk)f(xk) x_{k+1} = x_k - \alpha_k \frac{f(x_k)}{f'(x_k)}

Je kleiner der Dämpfungsfaktor, desto langsamer nähert sich das Verfahren der Lösung an, aber desto höher ist die Wahrscheinlichkeit, dass es auch konvergiert.

Eine gute Methode, um αk\alpha_k zu wählen, ist zuerst mit αk=1\alpha_k = 1 zu starten. Solange das Verfahren f(xk+1)|f(x_{k+1})| erhöht, verkleinern wir den Faktor (zum Beispiel halbieren), solange bis wir uns der Lösung annähern.

Broyden-Quasi-Newton

Anstatt die (teure und möglicherweise schlecht konditionierte) Jacobi-Matrix in jeder Iteration zu berechnen, wollen wir sie approximieren. Die Jacobi-Matrix JkJ_k für jeden Schritt sollte

Jk(xkxk1)=F(xk)F(xk1) J_k(x_k - x_{k-1}) = F(x_k) - F(x_{k-1})

erfüllen. Wir suchen uns die Matrix (aus allen möglichen) aus, welche am nähesten an der alten ist, also JkJk1F\| J_k - J_{k-1} \|_F minimiert. Übrigens ist die Frobeniusnorm

AF=ijaij2 \boxed{\|A\|_F = \sqrt{\sum_i \sum_j |a_{ij}|^2}}

Unsere neue Jacobi-Matrix ist in jedem Schritt also

Jk=Jk1+(ykJk1sk)skTsk22 J_k = J_{k-1} + \frac{(y_k - J_{k-1}s_k)s_k^T}{\|s_k\|_2^2}

mit sk=xkxk1s_k = x_k - x_{k-1} und yk=F(xk)F(xk1)y_k = F(x_k) - F(x_{k-1}).