Nullstellensuche
Wir haben gesehen, dass viele Anwendungen der Differentialrechnung die Bestimmung von Nullstellen erfordern. In expliziter Form ist dies nur für sehr einfache Funktionen möglich. Bereits für Polynome fünften Grades existiert keine allgemeine Lösungsformel. Wir müssen uns also in vielen Fällen mit Näherungsverfahren begnügen. Ist f : P → ℝ eine Funktion mit mindestens einer Nullstelle, so produziert ein derartiges Verfahren ausgehend von einem Startwert x0 ∈ P eine Folge x0, x1, x2, …, xn, … von Elementen von P, die gegen eine Nullstelle der Funktion konvergiert, d. h. es gilt f (x*) = 0 für x* = limn xn. Gute Verfahren konvergieren zudem schnell, d. h. die Abstände |x* − xn| zwischen der Nullstelle und den Approximationen xn konvergieren schnell gegen 0.
Ein Verfahren, das ganz ohne Methoden der Differentialrechnung auskommt, beruht auf dem Zwischenwertsatz:
Satz (Zwischenwertsatz)
Sei f : [ a, b ] → ℝ eine stetige Funktion. Dann nimmt f jeden Wert zwischen f (a) und f (b) an. Insbesondere besitzt f eine Nullstelle, wenn f (a) und f (b) verschiedene Vorzeichen haben.
Ist f : [ a, b ] → ℝ mit sgn(f (a)) ≠ sgn(f (b)), so liefert das folgende Verfahren eine Nullstelle von f. Zudem lässt es sich als konstruktiver Beweis des Zwischenwertsatzes lesen.
Bisektionsverfahren
Sei f : [ a, b ] → ℝ stetig mit sgn(f (a)) ≠ sgn(f (b)) und f (a), f (b) ≠ 0. Wir setzen (x0, y0) = (a, b). Nun definieren wir rekursiv xn, yn, cn wie folgt:
Ist (xn, yn) konstruiert, so setzen wir cn = (xn + yn)/2. Ist f (cn) = 0, so stoppen wir mit Ausgabe von cn. Andernfalls setzen wir
In jedem Schritt halbieren wir also das betrachtete Intervall unter Wahrung der „guten Voraussetzung“ der unterschiedlichen Vorzeichen. Das Verfahren stoppt mit einer Nullstelle cn = (xn + yn)/2 von f oder es produziert eine Folge (xn, yn) mit
limn xn = limn yn = limn cn = x* und f (x*) = 0.
Der Beweis von f (x*) = 0 benutzt die Stetigkeit von f: Die Funktionswerte f (xn) haben alle das gleiche Vorzeichen s1, die Funktionswerte f (yn) alle das gleiche Vorzeichen s2. Nach Konstruktion gilt s1 ≠ s2. Sei s1 = −1 und s2 = 1. Aus Stetigkeitsgründen gilt f (x*) = limn f (xn) ≤ 0 und f (x*) = limn f (yn) ≥ 0, sodass f (x*) = 0. Analoges gilt, wenn s1 = 1 und s2 = −1.
Die ersten Stellen c0, c1, c2, … eines Bisektionsverfahrens
Ein ganz anderes Verfahren − das berühmte Newton-Verfahren − der Nullstellensuche ergibt sich aus dem folgenden anschaulichen Satz:
Satz (Nullstellensatz für konvexe Funktionen)
Sei f : [ a, b ] → ℝ differenzierbar und streng konvex mit f (a) < 0 < f (b). Dann gilt:
(a) | f besitzt eine eindeutige Nullstelle x*. |
(b) | f < 0 auf [ a, x* [ , f > 0 auf ] x*, b ], f ′ > 0 auf [ x*, b ]. |
Eine analoge Aussage gilt für den Fall f (a) > 0 > f (b).
Das Newton-Verfahren findet die Nullstelle x* durch wiederholtes Anlegen von Tangenten. Ist x0 > x*, so liegt die Tangente
g(x) = f (x0) + f ′(x0) (x − x0)
von f an der Stelle x0 aufgrund der Konvexität von f unterhalb von f. Sie schneidet die x-Achse an der Stelle
x1 = x0 − f (x0)f ′(x1).
Es gilt x* < x1 < x0, sodass x1 näher an x* liegt als x0. Diese Beobachtung motiviert:
Newton-Verfahren
Sei f : [ a, b ] → ℝ differenzierbar und streng konvex mit sgn(f (a)) ≠ sgn(f (b)). Wir setzen
Nun definieren wir xn rekursiv durch
xn + 1 = xn − f (xn)f ′(xn) für alle n ≥ 0.
Die ersten Stellen einer Newton-Iteration x0, x1, x2, …
Die Folge x0, x1, x2, … wird auch als Newton-Iteration von f (zum Startwert x0) bezeichnet. Man kann wie erwartet zeigen, dass sie im Fall x0 = b streng monoton fallend und im Fall x0 = a streng monoton steigend gegen die eindeutige Nullstelle x* von f konvergiert.
Analoge Ergebnisse gelten für streng konkave Funktionen. Durch Übergang von f zu −f können wir aber immer Konvexität erreichen, ohne die Nullstelle zu verändern.
Das Newton-Verfahren eignet sich insbesondere zur Berechnung von Wurzeln. Seien also k ≥ 1 und c > 0. Wir berechnen x* = k. Hierzu wählen wir ein beliebiges b mit b > x*, etwa b = max(2, c). Dann ist x* die eindeutige Nullstelle der streng konvexen Funktion f : [ 0, b ] → ℝ mit
f (x) = xk − c für alle x ∈ [ 0, b ].
Die Newton-Iteration von f zum Startwert x0 = b ist gegeben durch
xn + 1 = xn − für alle n ≥ 0.
Es gilt x* = limn xn. Speziell können wir eine Quadratwurzel x* = mit einem beliebigen Startwert x0 > x* approximativ durch
xn + 1 = xn − = xn + c/xn2 für alle n ≥ 0
berechnen. Diese lange vor Newton bekannte Rekursion ist auch als Heron-Verfahren bekannt.
Ein Vergleich der beiden Verfahren
Wir berechnen
= 1, 41421 35623 73095 04880 16887 24209 …
mit Hilfe des Bisektions- und des Newton-Verfahrens. Wir verwenden wieder die Funktion f : [ 0, 2 ] → ℝ mit
f (x) = x2 − 2.
Die beiden folgenden Tabellen zeigen die ersten Approximationen. Auf einen Kommentar dürfen wir verzichten…
Bisektionsverfahren zur Berechnung von | ||
n | cn als Bruch | cn numerisch |
0 | 1 | 1 |
1 | 32 | 1,5 |
2 | 54 | 1,25 |
3 | 118 | 1,375 |
4 | 2316 | 1,4375 |
5 | 4532 | 1,40625 |
Newton/Heron-Verfahren zur Berechnung von | ||
n | xn als Bruch | xn numerisch |
0 | 2 | 2 |
1 | 32 | 1,5 |
2 | 1712 | 1, 41666 … |
3 | 577408 | 1, 41421 56862 … |
4 | 665857470832 | 1, 41421 35623 74689 … |
5 | 886731088897627013566048 | 1, 41421 35623 73095 04880 16896 … |