Numerische Mathematik - EAH-Jena

Transcrição

Numerische Mathematik - EAH-Jena
Fachhochschule Jena, 2002
Lehrmaterial
Numerische Mathematik
Prof. Dr. W. Rosenheinrich
Zweite, berichtigte und ergänzte Auflage
Kopien dieses Lehrmaterials dürfen nur zum Zweck des Studiums an der FH Jena hergestellt werden.
Inhaltsverzeichnis
1 Einführung
1.1 Inhalte der numerischen Mathematik . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
1.2 Hinweise zur Programmierung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
1.3 Bemerkungen zum vorliegenden Lehrmaterial . . . . . . . . . . . . . . . . . . . . . . . . . . .
4
4
6
8
2 Zahlen im Computer
10
2.1 Zahlendarstellung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10
2.2 Besonderheiten des praktischen Rechnens . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11
2.3 Aufgaben . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15
3 Einige universelle Verfahren
3.1 Das Aitkensche ∆2 -Verfahren . . .
3.2 Das Verfahren vom Goldenen Schnitt
3.3 Numerische Differentiation . . . . . .
3.4 Aufgaben . . . . . . . . . . . . . . .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
17
17
19
21
27
4 Lösen von Gleichungen
4.1 Eine Gleichung einer Unbekannten . . . . . . . . . . . . .
4.1.1 Vorbemerkungen . . . . . . . . . . . . . . . . . . .
4.1.2 Intervallhalbierung . . . . . . . . . . . . . . . . . .
4.1.3 Regula falsi . . . . . . . . . . . . . . . . . . . . . .
4.1.4 Das Newton-Verfahren . . . . . . . . . . . . . . . .
4.1.5 Fixpunktiteration . . . . . . . . . . . . . . . . . . .
4.1.6 Polynomnullstellen . . . . . . . . . . . . . . . . . .
4.2 Gleichungssysteme . . . . . . . . . . . . . . . . . . . . . .
4.2.1 Vorbemerkungen . . . . . . . . . . . . . . . . . . .
4.2.2 Lineare Systeme . . . . . . . . . . . . . . . . . . .
4.2.3 Nichtlineare Systeme . . . . . . . . . . . . . . . . .
4.2.4 Das Newton-Verfahren . . . . . . . . . . . . . . . .
4.2.5 Das gedämpfte Newton-Verfahren und Einbettung
4.2.6 Aufgaben . . . . . . . . . . . . . . . . . . . . . . .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
28
28
28
29
30
34
40
45
52
52
56
69
69
71
76
5 Optimierung
5.1 Problemstellung . . . . . . . . . . . .
5.2 Koordinatenweiser Abstieg . . . . . .
5.3 Gradientenverfahren . . . . . . . . .
5.4 Heuristische Suche . . . . . . . . . .
5.5 Optimierung mit Nebenbedingungen
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
78
78
80
82
83
85
6 Approximation von Funktionen
6.1 Problemstellungen . . . . . . . . .
6.2 Berechnung von Grundfunktionen .
6.3 Interpolation . . . . . . . . . . . .
6.3.1 Algebraische Polynome . .
6.3.2 Kubische Splinefunktionen .
6.4 Gleichmäßige Approximation . . .
6.5 Approximation im Quadratmittel .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
87
. 87
. 88
. 91
. 91
. 94
. 98
. 100
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
2
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
6.6
6.7
6.8
Anpassung an Tabellen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 105
Nichtlineare Anpassung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 106
Aufgaben . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 107
7 Differentialgleichungen
7.1 Problemstellung . . . . . . . . . . . . . . . . . . . . . .
7.2 Vorbetrachtung: Taylor-Polynom zur Lösungsfunktion
7.3 Runge - Kutta - Verfahren . . . . . . . . . . . . . . . .
7.4 Schrittweitensteuerung . . . . . . . . . . . . . . . . . .
7.5 Spezielle Verfahren für spezielle Probleme . . . . . . .
7.6 Aufgaben . . . . . . . . . . . . . . . . . . . . . . . . .
8 Beispiele
8.1 Beispiel
8.2 Beispiel
8.3 Beispiel
8.4 Beispiel
1:
2:
3:
4:
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
108
108
109
115
121
124
128
Numerische Auswertung einer Fourier-Reihe . . . . . .
Ladungsdichte auf einem Ring . . . . . . . . . . . . . . .
Stationäre Temperaturverteilung - ein Randwertproblem .
Nullstellensuche . . . . . . . . . . . . . . . . . . . . . . .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
129
129
132
135
142
9 Literatur
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
147
Sachwortverzeichnis
3
Kapitel 1
Einführung
1.1
Inhalte der numerischen Mathematik
Die numerische Mathematik - hier auch im Sinne des Begriffs ’Wissenschaftliches Rechnen’ verstanden befaßt sich mit den Gesichtspunkten, die bei der zahlenmäßigen Auswertung mathematischer Erkenntnisse
zu beachten sind. Bei der Planung einer konkreten Zahlenrechnung geht es um die folgenden Faktoren:
1. Welche Genauigkeit kann wie erreicht werden? Welche Genauigkeitsgrenzen gibt es gegebenfalls?
2. Welcher Rechenaufwand muß getrieben werden?
3. Welche theoretischen Vorarbeiten / Programmieraufwand ist notwendig?
4. Ist es eine Handrechnung, eine mit Unterstützung durch einen Computer, oder verläuft sie völlig
automatisch?
5. Wie kann die Richtigkeit des Resultats / des Programms überprüft werden?
Die ersten drei Punkte arbeiten gegeneinander. Wünscht man eine hohe Genauigkeit, so muß man i. a. viel
rechnen (im Sinne von: Viele Rechenoerationen ausführen, viele Funktionen auswerten, ...). Diesen Aufwand
kann man senken, indem man das Problem sinnvoll theoretisch aufarbeitet und geschickt programmiert. (vgl.
Beispiel 1 im Anhang)
Es wird also für ein gewisses Problem nicht das Rechenverfahren geben; vielmehr ist das Verfahren den
jeweiligen Bedürfnissen anzupassen. Will man eine einzige Gleichung einmalig lösen, so ist ein einfaches Verfahren ausreichend, das man in einer Minute programmiert hat, selbst wenn es dann 0.1sec rechnet. Ist diese
Gleichung dagegen z. B. in einem in Echtzeit arbeitenden Steuerrechner sehr oft zu lösen, und möglichst
schnell, so kann es gerechtfertigt sein, einen Tag über das Problem nachzudenken und die Rechenzeit mit
einem sorgfältig erstellten Programm auf 0.001sec zu senken.
Beispiel: Wenn die kleinste positive Nullstelle des Polynoms 2.13x3 +37.53x2 +4.09x−38.15 gefunden werden
soll und man hat einen Computer oder Taschenrechner mit geeigneter mathematischer Software zur Verfügung, so läßt man sich einfach die Kurve der Funktion zeichnen, bekommt eine Information über die Lage
der Nullstellen, und vergrößert dann einfach den interessierenden Bereich solange, bis man den gesuchten
Wert mit akzeptabler Genauigkeit ablesen kann.
Hat man nur einen einfachen Taschenrechner, oder keine Grafik, so kann man sich überlegen, daß die Ableitung dieses Polynoms ein quadratisches Polynom mit nur positiven Koeffizienten ist (deren Wert ist unwesentlich), daß diese Funktion also bei x > 0 streng monoton wächst, und da sie in x = 0 negativ ist gibt es
folglich tatsächlich eine und nur eine positive Nullstelle. Diese kann man z. B. mit dem Newton-Verfahren
berechnen, wobei man in einem Computerprogramm die Abbruchbedingung weglassen kann - man läßt sich
die Näherungen fortlaufend auf den Bildschirm ausgeben und bricht einfach von Hand ab.
Sei nun aber y(x) die kleinste positive Nullstelle des Polynoms (in y)
2.13y 3 + (4.56 + 3.9x2 )y 2 + (4.21 + 3.19x)y − (3.66 + 4.12x2 + 0.94x4 ) ,
R
und will man diese Funktion für verschiedene Werte von x tabellieren (oder das Integral y(x) dx in den
Grenzen von 0.48 bis 3.81 numerisch berechnen), so braucht man ein Programm, das solche Nullstellenaufgaben autonom löst, das mit dem Fall nur einer reellen, mehrfacher oder mehrerer Nullstellen zurecht kommt
4
und das dann auch noch mit Sicherheit die ggfs. richtige unter mehreren positiven Nullstellen findet (was
hier aber bei x ≥ 0 nicht eintritt).
Es gibt mathematische Probleme, deren Lösungen sich mit den üblichen mathematischen Hilfsmitteln nicht
aufschreiben lassen; zumindest nicht als endliche Ausdrücke. Hierzu gehört die Aufgabe, die Nullstelle eines
(allgemeinen) Polynoms des Grades 5 oder höher zu finden, oder die Lösung der Gleichung x + ex = 2. In
diesen Fällen ist man auf Näherungsverfahren angewiesen. Dieser Begriff ist bisweilen nicht ganz zutreffend,
denn oftmals können diese Verfahren mit geringen Aufwand eine solche (rechnerische) Genauigkeit liefern,
die weit über den praktischen Erfordernissen liegt. In dieser Hinsicht gibt es also keinen Qualitätsunterschied
zu dem Resultat, das eine ’exakte’ Formel liefert (die man erhält, wenn man die Gleichung in den Fällen, wo
dies möglich ist, nach x auflöst). Der reale Nachteil des numerischen Verfahrens ist, daß es in irgendeinem
Sinne nur ein Resultat liefert. Die Lösung der Gleichung x + eax = 2 hängt von a ab; wenn es eine Formel
zu ihrer Auflösung gäbe, so könnte man den Ausdruck für die so definierte Funktion x = x(a) aufschreiben,
sie diskutieren usw.. Mit einem numerischen Verfahren kann man höchstens eine Tablle dieser Funktion - für
verschiedene Werte von a - berechnen.
Ein weiteres Anwendungsfeld für Näherungsverfahren sind die Fälle, wo man die Gleichung zwar exakt lösen
könnte, dies aber zuviel Aufwand wäre (z. B. bei einem Polynom dritten oder vierten Grades).
Im Rahmen dieses Kurses werden Näherungsverfahren zur Lösung gewisser Standardprobleme entwickelt
und vorgestellt. Es wird auf die Möglichkeiten und Grenzen dieser Methoden eingegangen. In den Fällen,
wo zu einem Problem mehrere Verfahren angeboten werden erfolgt ein Vergleich bezüglich der Vor- und
Nachteile der Varianten.
Eine wichtige Kennziffer zur Bewertung eines Verfahrens ist sein Aufwand (oder das Verhältnis vom Aufwand zur erzielten Genauigkeit). Dieser wird in der notwendigen Anzahl von arithmetischen Operationen,
von Funktionsaufrufen o. ä. gemessen.
Beispiel: Gesucht ist ein Begriff im Lexikon (mit N Einträgen).
1. Verfahren: Man liest das Lexikon - von vorn beginnend - durch, bis man den Begriff findet. - Dazu muß
man im Mittel - bei vielen Suchzugriffen - N/2 Begriffe überprüfen. Das wäre die Anzahl der ’Funktionswertberechnungen’ (oder der Aufwand).
2. Verfahren: Man schlägt das Lexikon in der Mitte auf und stellt fest, ob der gesuchte Begriff davor oder
danach liegt; danach halbiert man die betreffende Hälfte usw.. - Der Aufwand beträgt etwa log2 N Zugriffe
und ist wesentlich geringer als N/2.
3. Verfahren: Man nimmt die ersten zwei(, drei oder vier) Buchstaben des Wortes (z. B. Rutil) und interpretiert sie als Zahlen: a = 0, . . . , r = 17, . . . , u = 20, . . . eines Systems mit der Basis 26. Hier wäre also der
Wert ru = 17 · 26 + 20 = 462.
Das Lexikon beginn mit Aachen (aa = 0) und endet mit Zytologie (zy = 25 · 26 + 25 = 262 − 1 = 675),
es habe z. B. 1577 Seiten. Nun suchen wir die Seite 462
675 · 1577 = 1079 und sehen nach, ob wir dort Rutil
finden. Angenommen, dort steht statt dessen Pylon (py = 15 · 26 + 25 = 415), dann teilen wir die Seiten
von 1079 bis 1577 so, wie die Zahl 462 den Abschnitt von 415 bis 675 teilt, usw..
Dieses Verfahren ist nochmals deutlich effektiver als das vorige.
Zur Lösung des gestellten Problems gibt es also (mindestens) drei Verfahren, die sich vom Aufwand her
enorm unterscheiden. - Wenn man sie aber programmiert, so ist dabei der Aufwand genau umgekehrt bemessen.
Ziel ist es meist, den Aufwand des Verfahrens gering zu halten. Dahinter steht die Absicht, Rechenzeit zu
sparen. Das mag im Einzelfall nicht nötig sein; die Erfahrung zeigt aber, das die Geschwindigkeitssteigerung
der Computer diese Betrachtungen nicht überflüssig macht. - Ende der 40er Jahre kam die Meinung auf, daß
der Bau einiger weiterer Großrechner (von den Maßen her; sie konnten kaum soviel wie manch heutiger programmierbarer Taschenrechner) den gesamten Rechenbedarf der Menschheit abdecken würde. Das stimmte
sogar, allerdings nur unter der Voraussetzung, daß dieser konstant bliebe, was nicht eintrat. Seither hat sich
erwiesen, daß nach jeder Verbesserung der Computerparameter (Geschwindigkeit, Speicher, ...) neue, bisher
unangreifbare Probleme in den Bereich des Machbaren geraten, und diese lasten die Technik wiederum voll
aus. Die komplizierten Rechnungen sind Kombinationen einfacher Verfahren, z. B. der Lösung von Millionen
linearer Gleichungssysteme, und dies muß also effektiv erfolgen, wenn man die Rechnung in akzeptabler Zeit
schaffen will.
5
1.2
Hinweise zur Programmierung
Angenommen, ein Ingenieur hat im Rahmen einer Entwicklung oder Untersuchung eine mehr oder weniger
große Rechnung vor, und plant, dafür ein Programm zu erstellen. Die Einhaltung der folgenden Hinweise
sollte dabei manchen Kummer und Aufwand ersparen:
1. Man stelle sich ein bald erreichbares Ziel.
Es lohnt sich oftmals, zunächst eine stark vereinfachte Variante zu rechnen. Die Ergebnisse sind grob, geben
aber evtl. sehr nützliche Orientierungen. Die typische Situation ist, daß man vor Beginn der Rechnung nicht
genau weiß, was man eigentlich haben will, aber glaubt, es zu wissen. Einige erste grobe Resultate liefern
ein Bild, und nun beginnt man die Problematik zu begreifen, und man kann in der nächsten Etappe bereits
sinnvolle Fragen stellen (... Werte berechnen) (s. Beispiel 2). - Ärgerlich ist es, wenn jemand mit Akribie
in tage- oder wochenlanger Arbeit ein Programm entwickelt und dann feststellt, daß es seine Fragen nicht
beantwortet und auch nicht mehr zu retten ist. Schlimmstenfalls kommt es nie zum Laufen - weil es eine
Situation modelliert, die physikalisch oder technisch unmöglich ist, wovon man sich mit wesentlich weniger
Aufwand hätte überzeugen können
2. Man formuliere die Aufgabe nicht zu speziell.
Es ist nicht untypisch, daß man das Programm in einer Arbeitsphase beginnt, wo man noch nicht genau sagen kann, was man eigentlich mit der Antwort (dem Rechenresultat) anfangen will. Und man weiß bisweilen
auch noch nicht, welche Antwort man benötigt (welche Kennziffern man wirklich braucht).
Wie gesagt, manche Fragen entstehen im Laufe der Problembearbeitung, und sie sind keineswegs vorherzusehen. Deswegen sollte man im Programm Freiheiten vorsehen.
Angenommen, in allen Vorgängermustern war R4 = 3.5kΩ, und so wird es auch bleiben, also schreibt man
das gleich als Zahl in das Programm.
Und dann wird doch beschlossen, diesen Wert zu ändern...
Jetzt hat man ein Problem, denn man kann nicht einfach ’3500’ mit dem Editor suchen - an einer Stelle im
Programm steht nämlich die Hälfte dieses Wertes, an anderer Stelle sein Kehrwert ... .
Also: Auch wenn’s überflüssig aussehen sollte - man vereinbare für R4 eine Variable, und lese sie z. B. aus
einem File GSGW.DAT ein (Ganz Selten Geänderte Werte).
3. Man zerlege das Programm in klare Schritte (Modularisierung).
Ein Riesenprogramm in einem Stück zu bauen ist eigentlich immer ein Fehler. Die Regel ’Kein Programm /
Unterprogramm / Unit länger als 1...2 DIN A4 - Seiten.’ ist sehr sinnvoll.
Die Lösung von Hilfsgleichungen u. ä. sollte man als separate Unterprogramme programmieren, selbst wenn
diese im Programm nur einmal aufgerufen werden. Ein solches Unterprogramm kann für sich getestet werden,
und wenn man sich seiner sicher ist kann man diesen Teil des Programms vergessen (na, nicht ganz). Das
Hauptprogramm bzw. die Unterprogramme der oberen Level bestehen dann fast nur aus Unterprogrammaufrufen, und dadurch werden sie kurz und übersichtlich.
Spätere Änderungen sind einfacher zu lokalisieren und betreffen meist nur wenige definierte Unterprogramme.
Man ist auf diese Weise genötigt, die Datenübergabe zwischen den Programmteilen vernünftig zu planen.
Das zwingt auch, die Programmstruktur vorab sorgfältig zu bedenken, und das wiederum verlangt Klarheit
über die Problemstellung. Insgesamt kommt dadurch Linie ins Projekt.
Es ist ein typischer Fehler, daß man, wenn man mit der theoretischen Durchdringung des Problems nicht
weiter kommt (z. B. irgendeinen physikalischen Aspekt nicht versteht) erst einmal anfängt zu programmieren. Vielleicht das Rahmenprogramm, und die Ein- und Ausgaben ... .
Das ist Aktionismus; man hat zwar für den Moment das Gefühl, etwas Nützliches zu tun, aber oft erlebt
man dann eine böse Überraschung: Das Gebaute erweist sich als unbrauchbar, oder, was noch schlimmer ist,
kann durch mühsame Umbauten dazu gebracht werden, mehr schlecht als recht seinen Dienst zu tun.
Bei diesen Unterprogrammen unterscheide man sorgfältig zwischen lokalen und globalen Variablen usw. usf.,
sicher wurden entsprechende Hinweise in der Informatikausbildung gegeben. Diese Strukturierung und Klarheit ist keine Zwangsjacke, sondern das Vermeiden von massiven Ärger - und bei Projekten ab einer gewissen
Größe die einzige Chance, sie zu realisieren.
4. Man überlege sich Kontrollmöglichkeiten.
Die Zeit nach dem Schreiben des Quelltextes, in der der Compiler syntaktische Fehler meldet, ist vergleichsweise problemlos.
Wenn das Laufzeitsystem ’Division durch Null’ oder ’Wurzel aus einer negativen Zahl’ reklamiert, so kann
man meist recht einfach klären, was falsch ist, und wie man es korrigieren muß.
6
Ein offensichtlich unsinniges Resultat nützt nichts, schadet aber auch nicht.
Kritisch ist es, wenn das Resultat stimmen könnte, aber man weiß es nicht sicher.1
Hat man (vgl. 1.) nur eine grobe Rechnung gemacht, so kann man sie evtl. für einen einfachen Fall mit dem
Taschenrechner separat nachrechnen, und dann vergleichen. (Noch besser ist es, sie von einer anderen Person
nachrechnen zu lassen, um nicht beide Male demselben Denkfehler aufzusitzen. Geht das nicht, so sollte man
es wenigstens an einem anderen Tag machen, und ohne die vorige Rechnung daneben zu haben.) Ist man
sich seiner groben Werte dann halbwegs sicher, so kann man mit ihrer Hilfe das feinere Modell kontrollieren.
Bisweilen lassen sich Probleme ganz primitiv programmieren; das entstehendende Programm ist aber in
puncto Genauigkeit und Rechenzeit undiskutabel schlecht und für Routinerechnungen ungeeignet. Aber ein
paar Stunden kann man opfern, um wenige Beispiele zum Vergleich zu rechnen. (s. Beispiel 2).
In vielen Problemen kann man gewisse Sonderfälle leicht lösen, und diese Sonderfälle sollte man unbedingt
zu Testzwecken rechnen. Das muß man vielleicht schon beim Erstellen des Programms vorhersehen und es
etwas allgemeiner schreiben als geplant.
Beispiele:
a) Man modelliert ein elektrisches Netzwerk; Ziel ist es, gewisse Ströme in ihm zu berechnen. - Setzt man
sämtliche Spannungsquellen auf Null (entsprechende Eingabe ermöglichen), so dürfte kein Strom fließen kontrollieren! Setzt man sämtliche Spannungen auf denselben Wert, so ist möglicherweise offensichtlich, daß
dann auch (evtl. in einem Teil der Schaltung) keine Ströme fließen - kontrollieren! Evtl. weiß man, was passieren muß, wenn die Frequenz der Spannungen wächst oder fällt - kontrollieren!
b) Man möchte numerisch das Anfangswertproblem
q
00
y − a + b sin2 cy · y 0 − y · (p + q · cos cy) = re−sx · sin(2cx + u) , y(0) = 0, y 0 (0) = w
mit vorgebbaren Parametern a, b, c, p, q, r, s, u und w lösen.
Das Programm wird so erstellt, daß eine beliebige rechte Seite f (x) vorgesehen ist, und statt der homogenen
Bedingung für y(0) sieht man noch einen Parameter z vor. Dann rechnet man aus, wie die rechte Seite und
die Anfangsbedingung aussieht, wenn man für y(x) konkrete Funktionen einsetzt: x2 , x3 , eαx , sin αx usw.,
und startet das Programm damit - es müßte die jeweils gedachte Funktion reproduzieren.
Bei b = q = 0 ist das Problem geschlossen lösbar - ein unbedingt auszunutzender Testfall.
Analog im Fall c = 0.
c) Man hat ein Programm geschrieben, das ein allgemeines lineares Gleichungssystem Ax = b löst.
Zu Testzwecken belegt man den Vektor b mit Werten
bi =
n
X
j · aij .
j=1
Es müßte dann xj = j sein; durch Rundungsfehler können die Werte aber etwas verfälscht werden.
Eine Kontrolle könnte so ablaufen: Die Matrix A wird mit Zufallszahlen belegt, dann wird b in der beschriebenen Weise berechnet, und danach bestimmt das Testprogramm den Wert
n
X
|xj − j| .
j=1
Ist dieser kleiner als 10−6 , so wird dieser Test mit einer neuen Matrix A wiederholt, ansonsten wird A ausgegeben und gestoppt. Dann muß man detailliert prüfen, wieso es zu einem solchen Problem kommen konnte.
Vielleicht ist es ein echter Fehler im Programm, vielleicht aber auch eine Stelle, die formal richtig ist, im
rauhen Wind der Praxis aber versagt.
Wieso nicht einfach die Summe aller Elemente einer Zeile von A nehmen; die Lösung muß dann xj = 1
sein? - Das ist eine weniger sichere Kontrolle; beim Lösen des Systems hat man vielleicht Spalten der Matrix
getauscht und sich dabei geirrt. Wenn alle Unbekannte untereinander gleich sind, so merkt man diesen Fehler
nicht.
Den Zufallszahlengenerator sollte man definiert initialisieren, und nicht etwa von der Rechneruhr her, denn
sonst kann es passieren, man erwischt ein Problem und findet es nie wieder.
Wenn dieses Programm einige Tausende von Gleichungssytemen mit verschiedenen Anzahlen von Unbekannten korrekt gerechnet hat so kann man es mit einigem Vertrauen einsetzen.
1 ’Nach der Erfahrung des Autors kann ein guter Theoretiker fast beliebige gewonnene Resultate erklären, richtige wie falsche,
aber er kann zumindest eine Masse Zeit verlieren, wenn er klärt, ob sie richtig sind oder nicht.’
R. W. Hamming, Bell Telephone Laboratories
7
Eine Feststellung aus diesem Test könnte aber durchaus sein, daß das Programm formal korrekt ist und
Systeme mit maximal etwa 40 Unbekannten auch ganz ordentlich löst, aber darüber wird es unsicher und
sollte nicht verwendet werden. - Dann weiß man, woran man ist, und wo seine Grenzen liegen. Evtl. muß man
nun also ein zweites Programm schreiben, das gründlicher arbeitet und n ≤ 200 verkraftet. Wegen seiner
subtilen Arbeitsweise ist es langsamer als das alte und sollte deshalb bei n ≤ 40 durch dieses ersetzt werden
- das ist doch eine nützliche Erkenntnis.
c) Das Programm soll für ein Polynom n-ten Grades (n < 10) mit nur reellen Nullstellen diese ausrechnen;
das Polynom ist in der Form xn + an−1 xn−1 + . . . + a2 x2 + a1 + a0 gegeben.
Der Test erfolgt analog; man würfelt n Nullstellen mit dem Zufallszahlengenerator aus, multipliziert dann
(x − x1 )(x − x2 ) . . . (x − xn ) aus (natürlich nicht von Hand; dafür genügt ein kleines Programm) und läßt
dann das betreffende Programm auf das Resultat los. Dessen berechnete Nullstellen werden mit den vorgegebenen verglichen (vorher sortieren) und bei Problemen erfolgt eine Meldung. Der Prozeß wird viele Male
wiederholt.
Besonders wichtig ist es hier, den Fall mehrfacher Nullstellen zu testen, und den Fall von sehr eng benachbarten - also fast mehrfachen - Nullstellen. Und falls das Polynom echt komplexe Nullstellen besitzt sollte
es das Programm auch merken und mitteilen.
5. Man statte das Programm mit Testmöglichkeiten aus.
Nichts gegen die in vielen Programmsystemen enthaltenen Debugger, aber bisweilen sind Informationen aus
dem eigenen Programm heraus hilfreicher.
In der Testphase des Programms wird man sicher eine Anzahl Hilfswerte auf das Display ausgeben lassen.
Man ist oftmals gut beraten, dies nicht sporadisch und nach Bedarf zu tun, sondern es einigermaßen zu
planen.
Praktisch bewährt haben sich Ausgaben der Form
if test then writeln(’CYM5’,a,b,c);
Hierbei ist test eine logische Variable, die in der Testphase auf true und in der Phase der Nutzrechnungen
auf false gesetzt wird. ’CYM5’ ist eine Information zu der Stelle, an der die Ausgabe erfolgte, und a, b, c
sind interessierende Werte.
Ein erfolgreicher Programmtest ist keine Garantie gegen Überaschungen in der Zukunft. Bei dieser Vorgehensweise würde man - z. B. bei einem Absturz des Programms - test wieder zuschalten, den Lauf wiederholen,
und hätte die Absturzstelle schon einigermaßen lokalisiert.
Ggfs. ist es sinnvoll, die Rechnung in einem gewissen Umfang in einem Hilfsfile zu protokollieren, den man
ignoriert, wenn sie problemlos ablief.
1.3
Bemerkungen zum vorliegenden Lehrmaterial
Dieses Lehrmaterial ist hauptsächlich als Lehrbuch zur Ergänzung der Vorlesung gedacht, und nur in zweiter
Linie als Nachschlagewerk oder Formelsammlung.
Dabei wurden an einigen Stellen Fakten und Zusammenhänge nur knapp dargestellt, die im Rahmen der
Vorlesung an der Tafel wesentlich verständlicher entwickelt werden können, als dies in einer statischen Darstellung möglich ist.
Das Skript orientiert auf Ingenieurstudenten und versucht, mit den mathematischen Mitteln auszukommen,
die im Grundstudium vermittelt werden. Insofern ist damit die Numerikausbildung eine gewisse Wiederholung von Stoffteilen, die nach Bedarf (und nicht in der chronologischen Reihenfolge ihrer Behandlung)
miteinander kombiniert werden. Speziell die Formel von Taylor wird wiederholt benutzt und erweist sich
als außerordentlich nützlich.
Für den Ingenieur ist die Mathematik ein Hilfsmittel und nicht das Zentrum seiner Tätigkeit. Deshalb
wird hier darauf verzichtet, für die theoretische Analyse der Verfahren notwendige technische Begriffe zu
entwickeln, die später in der Praxis kaum verwendet werden (können). Bei der detaillBetrachtung der numerischen Lösung von linearen Gleichungssystemen benötigt man z. B. den Begriff der Matrizennorm, den
man schlecht einführen kann, ohne gründlicher auf seine Eigenschaften einzugehen. Dieses Wissen wird aber
vermutlich später für die meisten Absolventen überflüssig sein. Deshalb wird hier darauf - und auf einige
andere Begriffe - verzichtet; der Preis ist der Umstand, daß einige Aspekte nicht exakt erklärt werden können,
sondern nur plausibel dargestellt werden. Ein ’richtiges’ Lehrbuch hat diesen Nachteil nicht, um aber das
dort auf Seite 259 beschriebene Verfahren zu verstehen muß man den gesamten Text davor ... nicht gelesen,
sondern studiert haben.
8
Welche Ziele werden mit dieser Ausbildung (und diesem Material) verfolgt?
Der Hörer soll anschließend in der Lage sein, gewisse Standardprobleme selbst zu rechnen bzw. zu programmieren. Er soll für die Besonderheiten des Zahlenrechnens sensibilisiert sein, nach geeigneter Software suchen
können, deren Beschreibung mit einer gewissen Sachkenntnis lesen und bewerten. Bei Fehlern und Problemen
sollte er diverse übliche Ursachen erkennen und beseitigen können.
Die Beispielprogramme werden in einer PASCAL-ähnlichen Notation geschrieben. Damit dürften sie auch
für solche Leser verständlich sein, die diese Programmiersprache nicht nutzen, denn diese Formulierungen
lehnen sich an die natürliche Sprache an.
Mit a, b, . . . , h, p, q, . . . , z werden real-Größen bezeichnet, mit i, j, k, l, m, n solche vom Typ integer.
Variablenvereinbarungen, Ein- und Ausgaben u. ä. werden in den Beispielprogrammen in der Regel weggelassen.
Es geht hier darum, prinzipielle Kenntnisse zu vermitteln, nicht solche, die beim Übergang von einer Version
4.3 zu 4.4 hinfällig werden.
In nicht-ganzen Zahlen wird ein Dezimalpunkt verwendet.
9
Kapitel 2
Zahlen im Computer
2.1
Zahlendarstellung
Hallo, ist da Herr Andreas Aal? - Nein, hier ist Zacharias Zander!
Nanu? Ist das nicht die 276034? - Nein, die 276033.
Mensch! Minimale Abweichung in der sechsten Stelle, und so ein Effekt!
Im Computer unterscheidet man prinzipiell zwischen ganzen Zahlen (integer, longint, ...) und Gleitkommazahlen (engl.: floating point number) (real, double, extended, ...). Erstere werden für zählbare Objekte,
Indizes usw. benutzt, die zweiten für sich (mehr oder weniger) stetig ändernde Größen.1 Die Anzahl der Protonen im Atom eines gewissen Elements ist ganzzahlig; sein Atomgewicht ist es nicht. Ganzzahlige Angaben
sind in der Regel exakt; reelle Zahlen enthalten meist eine gewisse Toleranz:
- Das deutsche Eherecht erlaubt einen Gatten.
- Diese Tüte enthält ein Kilogramm Mehl.
Der Übergang kann fließend sein:
- An der Versammlung nahmen 23 Personen teil. (vermutlich exakt)
- Zur Demonstration kamen 3 000 Menschen.
(bestimmt gerundet, obwohl die Anzahl der Demonstrationsteilnehmer fraglos ganzzahlig ist)
Im Computer wird im Dualsystem gerechnet (oder oktal oder hexadezimal, aber das sind nur Variationen
davon). Eine Gleitkommazahl hat dann prinzipiell die folgende Gestalt:
x
=
v · M · 2n .
Dabei repräsentiert v das Vorzeichen von x, es ist also +1 oder -1 (und wird durch ein eiziges Bit dargestellt).
Die Zahl M heißt Mantisse von x; sie ist üblicherweise normiert, d. h. sie liegt zwischen 1 und 2 (oder 0.5
und 1; das ist nicht wesentlich, es muß nur festgelegt sein). Die (einzige) Ausnahme hiervon ist x = 0, dann
gilt M = 0. Der ganzzahlige Wert n ist der Exponent der Gleitkommazahl x. Im Computer ist nur v, M und
n gespeichert.
Beispiel: Eine Gleitkommazahl könnte z. B. durch fünf im Speicher aufeinanderfolgende Byte A, B, C, D und
E dargestellt werden; das Vorzeichen könnte man im ersten Bit A1 von A unterbringen: A1 = 0 bedeutet
’positiv’ und A1 = 1 entsprechend ’negativ’.
Das nächste Bit A2 ist fast immer 1; A2 = 0 bedeutet x = 0 (und zieht A = B = C = D = E = 0 nach sich; d.
h. ’Null’ ist positiv und hat den Exponenten 0). Der Rest A3 bis A8 sind die ersten dualen Nachkommastellen
von x, die weiteren stehen in B, C und D. E enthält den Exponenten; E1 ist sein Vorzeichen, und E2 bis
E8 enthalten den Wert (oder man einigt sich, daß bei E1 = 1 die Ergänzung zu 28 der betreffende negative
Wert ist, d. h. 11111111 steht für -1).
In dieser Konvention wäre
A
B
C
D
E
11110100 00100111 01010001 01110011 10000101
die Zahl (im Dualsystem)
x = −1.1110100001001110101000101110011 · 2−101 .
Die erste Stelle der Mantisse (A2 steht für 20 = 1, die letzte für 2−(6+3·8) = 2−30 = 9.313 · 10−10 .
1 Man
denke an den Unterschied zwischen den Begriffen digital und analog!
10
Die Begriffe, die mit der Zahlendarstellung im Computer im Zusammenhang stehen, rühren noch aus der
Zeit her, als die Rechenoperationen im Computer fest verdrahtet war, als also ein Rechner nur in einem
Modus arbeiten konnte. Heute werden diese Operationen durch Programme realisiert; damit gibt es mehr
Freiheiten. Allerdings kann / wird es wohl vorkommen, daß auf einem konkreten Computer verschiedene
Gleitkommavarianten von verschiedener Software genutzt werden. Wenn also hier und weiterhin vom Computer gesprochen wird ist meist die jeweilige konkrete Software gemeint.
2.2
Besonderheiten des praktischen Rechnens
Die Zahlendarstellung zieht einige Unterschiede zwischen dem praktischen Rechnen im Computer und den
idealen Rechengesetzen der Mathematik nach sich.
1. Es gibt eine kleinste (k) und eine größte (G) positive Zahl; analog im negativen Bereich. Wenn eine
Rechnung ein Resultat ergibt, das diesen Maximalwert überschreitet (z. B. G2 ), so erfolgt i. a. eine Fehlermeldung und ein Abbruch. Wird dagegen der kleinste Wert unterschritten (z. B. k 2 ), so wird als Resultat 0
angenommen.
2. Jede Zahl x im Computer (außer G und −G) hat zwei wohldefinierte Nachbarn x− und x+ , und zwischen
x und diesen gibt es in der Zahlenmenge des Computers keine weiteren Elemente. Man kann sich also einem
gewissen Wert nicht beliebig weit annähern, sondern nur bis zu seinem nächsten Nachbarn.
Der Abstand von x zu seinem Nachbarn hängt von x ab.2 Im vorangegangenen Beispiel einer Gleitkommaimplementation wäre bei x = 1 der nächstgrößere Wert x+ dadurch bestimmt, daß in der letzten Mantissenstelle eine 1 steht statt der Null bei x = 1. Damit ist 1+ − 1 = 2−30 ≈ 10−9 .
Dieser Wert - der Abstand von 1 zur nächstgrößeren Zahl - heißt Maschinengenauigkeit εmasch ; je kleiner er
ist, desto genauer erfolgt die Rechnung. Der Preis einer guten Maschinengenauigkeit ist eine lange Mantisse,
also hoher Speicherbedarf und ggfs. längere Verarbeitung.
Die Zahl 2 hat dieselbe Mantisse wie die Zahl 1, aber sie wird mit 21 multipliziert, und damit auch ihre
letzte Stelle. Also ist 2+ − 2 = 2 · 10−30 = 2εmasch .
Grob gesprochen: Es gilt für x > 0 : x+ − x ≈ x · εmasch .
Beispiel: Man hat ein digital anzeigendes Meßgerät, das drei Stellen und den Dezimalexponenten ausgibt.
Bei der Anzeige 2.93 E-2 ist der Abstand zum nächsten Wert 2.94 E-2 gerade 0.01 E-2 = 1 E-4, aber 2.93
E+3 liegt 0.01 E+3 = 1 E+1 unter 2.94 E+3. - Die relative (prozentuale) Änderung ist in beiden Fällen die
gleiche.
3. Der Quotient m/n zweier ganzer Zahlen (maximal gekürzter Bruch und n > 1 vorausgesetzt) ist nur dann
eine endlich lange Dezimalzahl, wenn n = 2p · 5q mit natürlichen Werten p und q ist. Die Division durch 2,
4, 5, 8, 10, 16, 20, 25, ... bricht ab, die durch 3, 6, 7, ... hingegen nicht.
Allgemein ist die Darstellung eines solchen Bruchs in einem Zahlensytem genau dann endlich, wenn der
Nenner nur Primfaktoren enthält, die auch in der Basis des Zahlensystems vorkommen.
Im Dualsystem ist dies einzig die Zahl 2. Endliche Dualbrüche enthält man also nur bei Division durch 2, 4,
8, 16, ... .
Man muß also beachten, daß 1/5 = 0.2 zwar eine endlich lange Dezimalzahl ist, die aber im Dualsystem
nicht als endlicher Wert geschrieben werden kann:
1/5 = 0.0011001100110011 . . . .
Der Wert 1/5 (und analog 1/10, 1/20, ...) ist also in einem Computer nicht exakt darstellbar.
Wird als Ergebnis einer Rechnung z. B. 5.370000000E-02 ausgegeben (also eine in irgendeinem Sinne ’glatte’
Dezimalzahl), so steht im Computer etwas anderes!3
Rundet man 1/3 zu 0.333, und addiert man diesen Wert dreimal, so entsteht 0.999. Theoretisch wäre 3· 31 = 1.
Bei 5 · 51 hätte man diese Differenz im Dezimalsystem nicht, im Dualsystem aber schon! (Es muß allerdings
nicht auftreten; es kann sein, daß durch Rundung bei der Verarbeitung der Zahlen der exakte Wert 1 entsteht.)
Beispiel: Eine Funktion f (x) soll für x=0, 0.01, 0.02, ... 0.99, 1 tabelliert werden:
x:=0;
1:
Ausgabe(x,f(x)); x:=x+0.01;
if x ≤ 1 then goto 1;
So sollte man das nicht programmieren; in x steht irgendwann 0.01+0.01+...+0.01 (100mal). Das sollte 1
2 Ist
der Abstand von x zu x− gleich dem zu x+ ?
ist das bei 5.370000000E+02?
3 Wie
11
sein, muß es aber nicht. Wegen der Rundungsfehler könnte z. B. 1.000000004 entstehen, und dann wird der
letzte Wert nicht berechnet.
Reelle Zahlen sind also als Indizes ungeeignet!
Es ist zumeist sinnlos, reelle Zahlen auf Gleicheit zu testen, statt dessen prüfe man, ob sie weiter als eine
gewisse Grenze voneinander entfernt sind. Wenn ja, so sieht man sie als verschieden an, ansonsten als gleich.
Im Falle des letzten Beispiels könnte man die letzte Zeile ändern in
if x < 1.001 then goto 1;
dann gäbe es das Problem nicht mehr. Die Zahl 1.001 läßt einen durch Rundungseffekte geringfügig über 1
liegenden Wert zu, schließt 1.01 aber aus. (Man könnte auch 1.005 nehmen ...)
Noch ein Beispiel:
- Sind alle 11 Spieler der Mannschaft im Bus? (exakt entscheidbar)
- Sind genau 1000g Mehl in dieser Tüte? - Die Antwort könnte sein: Die Messung ergibt 1001.3 ± 0.6g, also
nein; es kann aber auch sein, daß die vorhandene Meßtechnik keine Entscheidung ermöglicht.
Beachten: Laut Definition ist x∗ eine Nullstelle der Funktion f (x), wenn f (x∗ ) = 0 gilt. In der Praxis ist
dieser Test sinnlos; er muß durch den Test
|f (x∗ )|
≤
ε
mit einer geigneten kleinen Größe ε ersetzt werden. Diese ist problemabhängig und kann keineswegs universell festgelegt werden.
Sei z. B. ε = 10−10 gewählt; das sieht erst einmal nicht schlecht aus. - Die Funktion f (x) = x − 1 hat offenbar
die Nullstelle x∗ = 1, ein Wert, der der praktischen Definition |f (x∗ )| ≤ ε genügt, sollte also auch nahe bei
1 liegen.
Sei nun f (x) = 10−20 (x − 1) und x̃ = 109 = 1 Milliarde (!), so gilt |f (x̃)| ≈ 10−11 < ε, obwohl x̃ mit x∗ nun
wirklich nichts gemein hat.
Umgekehrt, sei die Maschinengenauigkeit des Computers 10−14 , und wir untersuchen die Funktion 1020 (0.3−
sin x). Falls der Wert 0.3 (genauer: seine interne Repräsentation) nicht von irgendeinem sin x genau getroffen
wird (was keineswegs erwartet werden muß), so liegt die Differnz 0.3 − sin x in der Größenordnung dieser
Maschinengenauigkeit, und |f (x)| unterschreitet 106 nicht wesentlich. Damit kommen sie nie auch nur in
die Nähe der Genauigkeitsschranke 10−10 und man käme zu dem falschen Schluß, diese Funktion habe keine
Nullstelle.
Die Genauigkeitsschranke kann im einfachsten Fall so bestimmt werden, daß man mit Hilfe einiger repräsentativer Funktionswerte eine Größenordnung von |f (x)| ermittelt und dann ε als einen kleinen Teil dieses
Wertes festlegt.
Ob Gulliver klein oder groß war ist nicht absolut feststellbar. Die Bewohner von Liliput und Brobdingnag
waren jedenfalls verschiedener Ansicht.
4. Addition (und entsprechend Subtraktion) von Gleitkommazahlen erfolgt in der folgenden Weise (mit kleinen Variationsmöglichkeiten):
Haben beide Summanden denselben Exponenten, so werden die Mantissen addiert (subtrahiert), danach
wird das Ergebnis - das in einer Zwischenform eine Stelle mehr haben kann - wieder normalisiert und dabei
ggfs. gerundet.
Der einfacheren Lesbarkeit wegen werden nachfolgend die Beispiele mit dezimalen Gleitkommazahlen mit
nur vierstelliger Mantisse (zwischen 1 und 10) ausgeführt - es geht nur um das Prinzip.
Summanden
8.445E+02
+8.263E+02
Zwischensumme
Endwert
16.708E+02
1.671E+03
Summanden
8.445E+02
-8.263E+02
Zwischensumme
Endwert
0.182E+02
1.820E+01
oder
Haben die beiden Summanden verschiedene Exponenten, so wird die Mantisse desjenigen mit dem kleineren
Exponenten so verschoben, daß er denselben Exponenten wie der andere Summand bekommt. Dann wird
diese verschobene Mantisse auf die entsprechende Länge gerundet und mit der anderen Mantisse verknüpft
(addiert oder subtrahiert). Weiter wie gehabt.
12
Summanden
8.445E+03
1.263E+01
Verschiebung
8.445E+03
0.01263E+03
Rundung
8.445E+03
0.013E+03
Zwischensumme
Endwert
8.458E+03
8.458E+03
Konsequenz dieser Arbeitsweise ist, daß das Ergebnis einer Summation jetzt - im Unterschied zur Theorie,
die das Gegenteil behauptet - von der Reihenfolge der Summanden abhängt; in der Praxis gilt also nicht
(a + b) + c = a + (b + c) .
Beispiel: a = 3.051E + 03, b = 4.711E − 01, c = 6.532E − 02, vierstellige dezimale Mantisse.
Linke Seite, Klammerausdruck:
Wert
a
b
Summanden
3.051E+03
4.711E-01
Verschiebung
3.051E+03
0.0004711E+03
Rundung
3.051E+03
0.000E+03
Zwischensumme
Endwert
3.051E+03
3.051E+03
Linke Seite, Endwert:
Wert
a+b
c
Summanden
3.051E+03
6.532E-02
Verschiebung
3.051E+03
0.00006532E+03
Rundung
3.051E+03
0.000E+03
Zwischensumme
Endwert
3.051E+03
3.051E+03
Diese Summe ist gleich a; die Addition von b und c hat nichts bewirkt. Nun zur anderen Form:
Rechte Seite, Klammerausdruck:
Wert
b
c
Summanden
4.711E-01
6.532E-02
Verschiebung
4.711E-01
0.6532E-01
Rundung
4.711E-01
0.653E-01
Zwischensumme
Endwert
5.364E-01
5.364E-01
Rechte Seite, Endwert:
Wert
a
b+c
Summanden
3.051E+03
5.364E-01
Verschiebung
3.051E+03
0.0005364E+03
Rundung
3.051E+03
0.001E+03
Zwischensumme
Endwert
3.052E+03
3.052E+03
Die Endresultate der beiden Summationen (unterstrichen) differieren.
Einzeln können die beiden kleinen Summanden gegen den großen nichts bewirken; man merkt von ihnen erst
etwas, wenn sie zusammenhalten.
Bei gründlichen Rechnungen kann dieser Effekt von Bedeutung sein. Sind viele Summanden zu addieren, so
sollte man dies in der Reihenfolge ihrer Größe tun, mit den betragskleinsten beginnend.
Das ist ein guter Ratschlag, aber er erfordert das Sortieren der Werte, und dies ist i. a. recht aufwendig,
weshalb man es kaum in Betracht zieht. In manchen Fällen bekommt man die Summanden aber schon recht
gut vorsortiert, z. B. bei der Summation von Reihen. Betrachten wir als Beispiel die Reihe
∞
X
1
k2
k=1
=
π2
= 1.644 934 066 848 226 436 . . . .
6
Um das Beispiel zu begrenzen nehmen wir eine nur dreistellige Mantisse an und summieren die Reihe in
der naheliegendsten Weise. Der erste Summand ist 1, und er ist auch die erste Partialsumme. Alle weiteren
Summanden werden passend zur vorigen Partialsumme verschoben.
k
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
Die Rechnung ist in der nebenstehenden Tabelle dargestellt, wobei auf die Exponentialschreibweise verzichtet wurde und alles im Fixpunktformat der Mantisse geschrieben ist. Die zweite Spalte ist auch in einer bequemen Form geschrieben; intern sind es Gleitkommazahlen ( Punkte hinter einer Zahl bedeuten
einen periodischen Dezimalbruch).
Hier kann man mit der Summation aufhören; alle
weiteren Summanden werden vom Computer ignoriert.
Das Resultat ist recht ungenau, aber besser wird’s
nicht!
13
1/k 2
1
0.25
0.111...
0.0625
0.04
0.02777...
0.0204...
0.015625
0.0123...
0.01
0.0082...
0.0069...
0.0059...
0.0051...
0.0044...
Verschoben
1.00
0.25
0.11
0.06
0.04
0.03
0.02
0.02
0.01
0.01
0.01
0.01
0.01
0.01
0.00
Partialsumme
1.00
1.25
1.36
1.42
1.46
1.49
1.51
1.53
1.54
1.55
1.56
1.57
1.58
1.59
1.59
Nun wird die Reihe ’rückwärts’ summiert; um die
Tabelle nicht zu lang werden zu lassen sei bei k = 25
begonnen. Die Partialsummen sind anfangs klein und
die Summanden alle etwa gleich groß; sie werden also
allesamt berücksichtigt.
k
25
24
23
22
21
20
19
18
17
16
15
14
13
12
11
10
9
8
7
6
5
4
3
2
1
Jedesmal, wenn die Partialsumme eine neue Zehnerpotenz erreicht, wird ihre bisherige letzte Stelle weggerundet, und die neuen Summanden werden künftig
eine Stelle weniger verschoben.
1/k 2
0.0016
0.001736...
0.001890...
0.002066...
0.002267...
0.0025
0.00277...
0.00308...
0.00346...
0.00390625
0.00444...
0.00510...
0.00591...
0.00694...
0.00826...
0.01
0.0123...
0.015625
0.0204...
0.02777...
0.04
0.0625
0.111...
0.25
1
Verschoben
0.00160
0.00174
0.00189
0.00207
0.00227
0.00250
0.0028
0.0031
0.0035
0.0039
0.0044
0.0051
0.0059
0.0069
0.0083
0.0100
0.0123
0.0156
0.0204
0.028
0.040
0.063
0.111
0.250
1.00
Partialsumme
0.00160
0.00334
0.00523
0.00730
0.00957
0.0121
0.0149
0.0180
0.0215
0.0254
0.0298
0.0349
0.0408
0.0477
0.0560
0.0660
0.0783
0.0939
0.114
0.142
0.182
0.245
0.356
0.606
1.61
Endresultat, etwas besser:
Das Resultat ist nicht berauschend besser, aber wichtig ist, daß man bei der Summation ’rückwärts’ (beinahe)
beliebig viele Summanden einbeziehen kann, während beim Aufsummieren in die ’natürliche’ Richtung nur
die ersten vierzehn beteiligt waren.
Wiederholt man die letzte Rechnung4 in genau dieser Weise, aber mit mehr Summanden, so erhält man
beim Start bei k = 50 den Wert 1.63, und bei k = 100 beginnend 1.64 - der exakte Wert im Rahmen dieses
Gleitkommaformats.
Das ist eine gängige Technik beim Summieren von Reihen, sofern sie nicht sehr schnell konvergieren. Man
braucht dazu aber eine Restgliedabschätzung der Reihe, damit man weiß, wo man bei der rückwärts laufenden
Summation beginnen soll (vgl. Beispiel 1 im Anhang).
Im Unterschied zur Wurst hat eine Folge eben nur ein Ende.
5. Sei x 6= 0; die vorderen Ziffern in der (normierten) Mantisse, die reale Information beinhalten, nennen wir
gültige Ziffern.
Beispiel: Es wird ein Strom von 10.0 ± 0.1A bei einer Spannung von 3.0 ± 0.1V gemessen; rechnerisch ergibt
sich hieraus ein Widerstand von 3.33 ± 0.15Ω. Der Rechner zeigt 3.33333333E+00, aber nur die erste Ziffer
nach dem Komma ist gültig, allerdings unsicher.
Eine gefürchtete Erscheinung ist der Verlust gültiger Ziffern durch Auslöschung, die bei der Subtraktion eng
benachbarter Werte auftritt.
4 Das geschah mit dem nachstehenden kleinen QBASIC-Programm, das diese Arithmetik simuliert:
n = 100: s = 1 / (n ∗ n): CLS : FOR k = 1 TO n - 1
u = 1 / ((n - k) ∗ (n - k))
IF s > 1 THEN u = .01 ∗ INT(100 ∗ u + .5): GOTO 2
IF s > .1 THEN u = .001 ∗ INT(1000 ∗ u + .5): GOTO 2
IF s > .01 THEN u = .0001 ∗ INT(10000 ∗ u + .5): GOTO 2
IF s > .001 THEN u = .00001 ∗ INT(100000 ∗ u + .5): GOTO 2
IF s > .0001 THEN u = .000001 ∗ INT(1000000 ∗ u + .5): GOTO 2
IF s > .00001 THEN u = .0000001 ∗ INT(10000000 ∗ u + .5): GOTO 2
2s=s+u
IF s > 1 THEN s = .01 ∗ INT(100 ∗ s + .5): GOTO 1
IF s > .1 THEN s = .001 ∗ INT(1000 ∗ s + .5): GOTO 1
IF s > .01 THEN s = .0001 ∗ INT(10000 ∗ s + .5): GOTO 1
IF s > .001 THEN s = .00001 ∗ INT(100000 ∗ s + .5): GOTO 1
IF s > .0001 THEN s = .000001 ∗ INT(1000000 ∗ s + .5): GOTO 1
IF s > .00001 THEN s = .0000001 ∗ INT(10000000 ∗ s + .5): GOTO 1
1 PRINT n - k; u; s: NEXT k
14
Beispiel: Es interessiert die Spannung zwischen den Punkten A und B, die sich aber nicht direkt messen
läßt. Man kann nur die (positive) Spannung in beiden Punkten gegen Erde messen und kommt auf 155.7V
und 152.3V mit einer Unsicherheit von 0.1V (so sei das Meßgerät). Die beiden Messungen haben also eine
Unsicherheit (Fehlerschranke) von etwa 0.07%. Der interessierende Wert ist 155.7V - 152.3V = 3.4V mit
einer Unsicherheit von 0.2V oder etwa 6%, also mehr als das Hundertfache der eigentlichen Meßwerte. Durch die Subtraktion wurde aus Angaben mit vier gültigen Ziffern eine mit nur noch zwei.
Beispiel: Man berechne die Nullstellen von x2 + 123.566x − 0.00343 !
Die Koeffizienten sollen als exakte Werte verstanden werden.
p
Nehmen wir eine achtstellige Gleitkommaarithmetik an, dann ist −p/2 = 6.1783000E +01 und p2 /4 − q =
6.1783028E + 015 , hieraus folgt x1 = 1.2356603E + 02 und x2 = 2.8000000E − 05.
Der erste Wert ist völlig in Ordnung und enthält nur gültige Ziffern; schlimmstenfalls ist die letzte Stelle
durch Rundung um eine oder zwei Einheiten verfälscht. Aber x2 ist katastrophal schlecht - es enthält nur
zwei gültige Ziffern (wiederum mit einer kleinen Unsicherheit in der hinteren). Beim Bilden der Differenz
sind sechs der acht Stellen verlorengegangen!
Ausweg: Man berechne nur die betragsgrößere der beiden Nullstellen einer quadratischen Gleichung mit Hilfe
p
p
der Lösungsformel, also −p/2 + p2 /4 − q bei p < 0 und −p/2 − p2 /4 − q bei p > 0, und bestimme dann
den anderen Wert aus der Formel von Vieta: x1 x2 = q.
Hier folgt x2 = 0.00343/123.56603 = 2.7758438E − 05, alle Stellen gültig.
2.3
Aufgaben
1. Ermitteln Sie die Maschinengenauigkeit Ihres Taschenrechners / Computers!
2. Laut Beschreibung arbeitet ein gewisser Taschenrechner intern mit zwölfstelligen Dezimalzahlen (also
mit dem etwa entsprechenden dualen Gleitkommazahlen), von denen nur die ersten zehn angezeigt
werden.
√
Der Nutzer läßt 2 berechnen; wie kann er sich die 10. und 11. Nachkommastelle anzeigen lassen?
3. Sei G die größte positive Gleitkommazahl in einer Arithmetik; z. B. G = 9.99 . . . · 1099 . Was bewirken
die Operationen G + 1 und G + 0.1G?
4. Ein Polynom Pn (x) = an xn + . . . + a1 x + a0 mit an · a0 < 0 besitzt mindestens eine positive Nullstelle
x0 . Das nachstehende Programm soll einen Wert a liefern, für den a − 1 ≤ x0 ≤ a gilt, also eine
Einschließung dieser Nullstelle:
1:
a:=0; y0:=P(a);
a:=a+1; if y0*P(a) > 0 then goto 1;
Ist es theoretisch korrekt? Wieso ist es praktisch unbrauchbar?
Hinweis: Betrachten Sie P2 (x) = x2 − 2 · 10n für n = 20 oder n = 60.
5. Jemand hat eine Funktion kuwu(x) programmiert, die die dritte Wurzel aus einer reellen Zahl berechnen soll, und will sein Unterprogramm nun testen:
Eingabe(x);
if kuwu(x)*kuwu(x)*kuwu(x) 6= x then Ausgabe(’Fehler!’);
Was ist von diesem Testprogramm zu halten?
P∞
6. Berechnen Sie e−x für x = 0, 1, 2, . . . , 30 mit Hilfe der Potenzreihendarstellung e−x = k=0 (−x)k /k!
und vergleichen Sie die Werte mit denen von der internen Funktion exp(x)!
7. Es sei - mit einer nichtnegativen ganzen Zahl n Z 1
In =
fn (x) dx
0
Z
=
1
xn · e1−x dx
.
0
a) Berechnen Sie für die x-Werte des Integrationsintervalls den Grenzwert limn→∞ fn (x) !
b) Wie lautet demzufolge limn→∞ In ?
c) Zeigen Sie , daß für alle n die Monotonie In > In+1 > 0 gilt!
5 Diese Zahl ist mit dem Taschenrechner berechnet; die achtstellige Arithmetik würde ihn vermutlich noch etwas verfälschen.
Man überlege sich deren Rechenweg!
15
d) Leiten Sie durch partielle Integration die Rekursionsformel In = n · In−1 − 1 her, und bestimmen
Sie I0 !
e) Ermitteln Sie mit Hilfe der Potenzreihendarstellung der Funktion ex die Reihendarstellung
In
=
e·
∞
X
k=0
(−1)k
(k!) · (n + 1 + k)
!
f) Berechnen Sie mit Hilfe beider Formeln die Werte I1 bis I50 , und vergleichen Sie die Resultate!
16
Kapitel 3
Einige universelle Verfahren
3.1
Das Aitkensche ∆2 -Verfahren
Gegeben sei eine Folge reeller Zahlen x̂k , die gegen einen gesuchten Wert A konvergiert. Sie habe die Form
x̂k = A + Bq k + yk
mit 0 < |q| < 1, B 6= 0 und einer schnell konvergenten Nullfolge yk . Sie konvergiere so schnell, daß auch noch
q −k · yk −→ 0 gilt.
Vernachlässigen wir diese schnell konvergente Folge, so können wir sagen, die gegebene Folge ist die Summe
einer Konstanten und einer geometrischen Folge, und diese Konstante ist gerade der interessierende Grenzwert.
Treffen wir die Annahme yk = 0 und nennen wir die Folgeglieder ohne yk einfach xk . Es soll nun A aus drei
aufeinander folgenden Werten xk berechnet werden:
xk = A + Bq k ,
xk+1 − xk = Bq k (q − 1) ,
xk+1 = A + Bq k+1 ,
xk+2 = A + Bq k+2
xk+2 − xk+1 = Bq k+1 (q − 1)
=⇒
=⇒
xk+2 − xk+1
= q
xk+1 − xk
A = xk+1 − q · Bq k = xk+1 − q · (xk − A) =⇒ A(1 − q) = xk+1 − qxk =⇒
xk+2 − xk+1
xk+1 − xk
xk xk+2 − x2k+1
xk+1 (xk+1 − xk ) − xk (xk+2 − xk+1 )
xk+1 − qxk
xk+1 − xk
=
=
=
.
A =
xk+2 − xk+1
1−q
(xk+1 − xk ) − (xk+2 − xk+1 )
xk+2 − 2xk+1 + xk
1−
xk+1 − xk
Es ist üblich, diesen Wert als Korrektur des xk darzustellen:
A = xk − xk +
xk xk+2 − x2k+1
xk xk+2 − x2k+1
xk (xk+2 − 2xk+1 + xk )
= xk −
+
=
xk+2 − 2xk+1 + xk
xk+2 − 2xk+1 + xk
xk+2 − 2xk+1 + xk
2xk xk+1 − x2k − x2k+1
(∆xk )2
(xk+1 − xk )2
= xk −
.
= xk −
xk+2 − 2xk+1 + xk
(xk+2 − xk+1 ) − (xk+1 − xk )
∆2 x k
Den Ausdruck xk+1 − xk nennt man ’die erste Differenz der Folge xk ’, und bildet man von dieser Folge
wiederum die Differenz, so erhält man (xk+2 − xk+1 ) − (xk+1 − xk ). Dieses wird entsprechend die ’zweite
Differenz der Folge xk ’ genannt. Hieraus resultiert die Schreibweise der letzten Formel; sie ähnelt der für die
erste oder zweite Ableitung.
Das ist die Formel für das Aitkensche ∆2 -Verfahren.
Was bringt es im Falle, daß dem idealen Verlauf xk = A + Bq k noch die kleine ’Störung’ yk aufgeprägt
ist? Wenden wir die Formel auf die ursprüngliche Folge x̂k an; damit resultiert eine neue Folge ak nach der
Vorschrift
(∆x̂k )2
(∆(xk + yk )2
.
ak = x̂k −
= xk + yk − 2
2
∆ x̂k
∆ (xk + yk )
= xk +
Sei rk = sk + tk , dann ist
∆rk = rk+1 − rk = (sk+1 + tk+1 ) − (sk + tk ) = (sk+1 − sk ) + (tk+1 − tk ) = ∆sk + ∆tk ,
17
d. h. die Differenz einer Summe ist die Summe der Diffrenzen (analog zur Differentation); und analog für die
zweite Differenz, also wird
(∆xk + ∆yk )2
(∆xk )2
(∆xk )2
(∆xk + ∆yk )2
ak = xk + yk − 2
=
x
−
+
y
+
−
=
k
k
∆ xk + ∆ 2 yk
∆2 x k
∆ 2 xk
∆2 xk + ∆2 yk
(∆xk )2 ∆2 xk + (∆xk )2 ∆2 yk − ∆2 xk · (∆xk )2 − 2∆2 xk · ∆xk · ∆yk − ∆2 xk · (∆yk )2
=
= A + yk +
∆2 xk (∆2 xk + ∆2 yk )
(∆xk )2 ∆2 yk − 2∆2 xk · ∆xk · ∆yk − ∆2 xk · (∆yk )2
= A + yk +
.
∆2 xk (∆2 xk + ∆2 yk )
Es ist
∆xk = xk+1 − xk = (A + Bq k+1 ) − (A + Bq k ) = B(q − 1)q k und
∆2 xk = xk+2 − 2xk+1 + xk = B(q 2 − 2q + 1)q k = B(q − 1)2 q k .
Nehmen wir der Einfachheit halber an, daß die Beträge der ak monoton abnehmen: |yk+1 | ≤ |yk |, so ist
|∆yk | = |yk+1 − yk | ≤ |yk+1 | + |yk | ≤ 2|yk | und analog |∆2 yk | ≤ 4|yk |.
Damit erhält man eine Abschätzung für den Betrag der eckigen Klammer. Wegen q −k · yk −→ 0 gilt irgendwann |q −k · ∆2 yk | ≤ |q|−k · 4|yk | ≤ 12 |B|(1 − q)2 ; sei k so groß, daß dies eintrete, und sei ebenso |q −k · yk | ≤ 1:
2 2
2
2
2
yk + (∆xk ) ∆ yk − 2∆ xk · ∆xk · ∆yk − ∆ xk · (∆yk ) =
∆2 xk (∆2 xk + ∆2 yk )
B 2 (q − 1)2 q 2k ∆2 yk − 2B(q − 1)2 q k · B(q − 1)q k · ∆yk − B(q − 1)2 q k · (∆yk )2 = yk +
=
B(q − 1)2 q k (B(q − 1)2 q k + ∆2 yk )
Bq k ∆2 yk − 2B(q − 1)q k · ∆yk − (∆yk )2 B∆2 yk − −2B(q − 1) · ∆yk − q −k (∆yk )2 = yk +
= yk +
≤
B(q − 1)2 q k + ∆2 yk
B(q − 1)2 + q −k ∆2 yk


4|B| · |yk | + 2|B(q − 1)| · |yk | + 1 · |yk |
(4 + 2|q − 1|)B + 1 

= 1 +
 |yk | .
1
1
)
2
|B|(1 − q 2 − |B|(1 − q)
|B|(1 − q)2
2
2
Die neugewonnene Folge hat also die schnelle Konvergenz der Nullfolge yk , die nach Voraussetzung die der
Ausgangsfolge weit übertrifft.
Beispiel: Es sei sk die k-te Teilsumme der Reihe
≤ |yk | +
∞
X
ln(k + 2)
2k
k=0
,
die Reihe konvergiert offensichtlich, und damit diese Folge. Sie soll durch Anwendung des Aitkenschen
∆2 -Verfahrens weiter verbessert werden:
k
0
2
4
6
8
10
12
14
16
18
20
22
24
26
28
30
32
34
sk
0.693147180560
1.589026915174
1.902191621055
1.995492587302
2.021652877332
2.028762933187
2.030659650971
2.031159448891
2.031290015274
2.031323907372
2.031332662185
2.031334915013
2.031335492930
2.031335640808
2.031335678566
2.031335688190
2.031335690640
2.031335691262
sk − (∆sk )2 /∆2 sk
2.181498381042
2.042789914901
2.032771607949
2.031553396143
2.031372341693
2.031342290807
2.031336937192
2.031335935014
2.031335740397
2.031335701517
2.031335693572
2.031335691919
2.031335691569
2.031335691494
2.031335691478
2.031335691475
2.031335691474
k
1
3
5
7
9
11
13
15
17
19
21
23
25
27
29
31
33
35
sk
1.242453324894
1.790206654228
1.963001313213
2.012658404312
2.026336266536
2.030015349865
2.030990223505
2.031245911701
2.031312479560
2.031329714338
2.031334157306
2.031335298733
2.031335591154
2.031335665896
2.031335684963
2.031335689819
2.031335691053
2.031335691367
18
sk − (∆sk )2 /∆2 sk
2.068576661383
2.035259228471
2.031885581168
2.031424113441
2.031351136601
2.031338544348
2.031336240177
2.031335800300
2.031335713586
2.031335696055
2.031335692438
2.031335691680
2.031335691518
2.031335691483
2.031335691476
2.031335691474
2.031335691474
Die verbesserten Werte stimmen ab k = 33 im Rahmen der Ausgabegenauigkeit mit dem exakten Resultat
überein; für die primären sk gilt das erst ab k = 44, d. h. wenn die Summanden etwa um den Faktor 1/1000
kleiner sind.
3.2
Das Verfahren vom Goldenen Schnitt
Die relle Funktion f (x) sei auf [a, b] definiert; gesucht ist ihr Maximum auf diesem Abschnitt.
Im Falle der Minimumsuche verläuft die Rechnung völlig analog, so daß hier nur der Fall des Maximums
betrachtet werden soll.
Die Extremwertstelle soll durch Abtasten der Funktion ermittelt werden; man will also nur f (x) benutzen
und nicht auf f 0 (x) zugreifen.
1. Idee:
Man teilt [a, b] in zehn gleiche Abschnitte x0 = a < x1 < . . . < x9 < x10 = b und berechnet die zugehörigen
Funktionswerte y0 bis y10 . Unter ihnen gibt es einen größten, z. B. y2 . Nun verengt man das Intervall auf x1
bis x3 , unterteilt dies zehnmal usw..
Letztlich bleibt ein sehr kurzes Intervall übrig, dessen Mittelpunkt man als Extremstelle akzeptieren kann.
....
.... .....
.... ....
...
.
..
...
...
....
...
.
...
....
...
...
...
.
...
...
...
... f (x)
..
...
...
.....
...
.
.
....
.
..
.....
.
.
.
.
.
.....
.
..
.
.
.........
.
.
.
.
.
.
.
.
.............
.
.
.
.
...
............................
...................
.............
.......................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................
|
|
|
|
|
|
|
|
|
|
|
| | | | | | | | | | |
|||||||||||
Falls der größte Wert am Rand liegt (x0 oder x10 ), so soll mit dem einzigen angrenzenden Abschnitt weitergerechnet werden. Der Fall wird nicht näher betrachtet.1
Angenommen, man beendet die Arbeit, wenn das Endintervall kürzer ist als ein gewisser vorgegebener Wert
ε > 0. Pro Zyklusschritt wird das Intervall auf 2/10 seiner Länge gekürzt, und - vom ersten Schritt abgesehen
- werden dazu 8 Funktionswerte berechnet (die Werte am Rand und der in der Mitte sind bekannt). Nach n
Zyklen beträgt die Länge des Restintervalls (b − a) · 0.2n , und wenn diese kleiner als ε sein soll muß
n
>
1
b−a
· ln
ln 5
ε
= 0.621 335 ln
b−a
ε
gelten.
Schlüsselt man die Intervallkürzung um den Faktor
√ 0.2 bei acht Funktionswertberechnungen formal auf jede
einzelne auf, so kann man ihr einen Faktor von 8 0.2 = 0.817 765 zubilligen.
2. Idee:
Man unterteilt den Abschnitt [a, b] in drei gleiche Teile.
Tatsächlich, wozu zehn Teile nehmen? Sicher spielte die Herausbildung der Hand bei der Menschwerdung
der Affen eine wichtige Rolle, aber die dabei resultierende Fingerzahl hat doch mit diesem Problem nichts
zu tun.2
Drei Teile ist die Minimalzahl, die man braucht. Nun vergleicht man die Funktionswerte in den beiden inneren Punkten und verlagert den Rand auf der Seite des kleineren der beiden in diesen, usw..
1 Was
sollte man machen, wenn es zwei gleiche Maximalwerte gibt?
wurde schon darauf verwiesen, daß das Dezimalsystem eine willkürliche menschliche Festlegung ist; man hüte sich vor
’Natur’gesetzen, die einzig auf Grund unserer Konventionen gelten. - Für die Erdbeschleunigung gilt g ≈ π 2 , aber nur, wenn
man Meter und Sekunde verwendet. In feet trifft ein anderes ’Naturgesetz’ zu: g ≈ 25 .
2 Es
19
......
... ....
.. . .....
...
.
..
...
...
....
...
....
...
...
...
...
.
...
...
...
..
... f (x)
...
....
...
..
...
.
..
....
.
.
.
.....
.
....
.....
.
.
.
.
.
.........
.
.
.
.
..............
.....
.
.
.
.
.
.
.
.
.
.
.
.
.
...............................
.
.........
.........
.......................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................
.|.u... ..... ..... ..... ..... ..... ..... ..... ..... ..... ..... ..... ..... ..... ..... ....|.u..... ..... ..... ..... ..... ..... ..... ..... ..... ..... ..... ..... ..... ..... ..... |.u
.... ..... ..... ..... ..... ..... ..... ..... ..... ..... ..... ..... ..... ..... ..... ....|u
.|.u... ..... ..... ..... ..... ..... ..... ..... ..... ..... ...|.u
. ..... ..... ..... ..... ..... ..... ..... ..... ..... .....|u..... ..... ..... ..... ..... ..... ..... ..... ..... ..... |u
.|.u... ..... ..... ..... ..... ..... ..... |u
..... ..... ..... ..... ..... ..... .....|u..... ..... ..... ..... ..... ..... .....|u
.|.u... ..... ..... ..... .....|u..... ..... ..... ..... ..|.u
.. ..... ..... ..... .....|u
... ..... ..... .|.u
... ..... ..... ..|u
|..u... ..... ..... .|.u
Auf diese Weise wird pro Zyklusschritt das Intervall auf 2/3 seiner vorigen Länge gekürzt; man braucht also,
um eine Endlänge von ε zu unterbieten mindestens
n
>
b−a
1
· ln
ln 1.5
ε
= 2.466 303 ln
b−a
ε
Schritte,
p jeder allerdings mit nur zwei Funktionswertberechnungen. Das ergibt einen Verbesserungsfaktor
von 2/3 = 0.816 497, also eine geringfügig besseren Wert.
Anders gerechnet: Es ist 8/ ln 5 = 4.9707, aber 2/ ln 1.5 = 4.9326.3
3. Idee:
Man unterteilt in drei Intervalle, legt die Punkte aber nicht mehr im gleichen Abstand voneinander (auch so
eine typische naheliegende menschliche Handlungsweise),4 vielmehr so, daß man den einen, im reduzierten
Intervall verbleibenden Funktionswert gleich wieder nutzen kann, ohne ihn neu zu berechnen.
Sei a < x1 < x2 < b; sei f (x1 ) > f (x2 ). Dann wird x2 der neue rechte Rand.
Wären die Größenverhältnisse anders: f (x1 ) < f (x2 ), so würde x1 der neue linke Rand. Es muß also alles
symmetrisch sein, und demzufolge ist x1 −a = b−x2 , oder x1 = a+h und x2 = b−h und x2 −x1 = b−a−2h.
.........
... .....
...
.. .
.
...
....
...
...
...
...
...
...
..
...
...
...
...
.
...
...
... f (x)
..
...
...
...
.
....
.
.
.
.....
.
...
.....
.
.
.
.
.
........
.
.
......
.............
.
.
.
.
.
.
.
.
.
.
.
..........................
...............
.................
......................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................
.|.... ..... ..... ..... ..... ..... ..... ..... ..... ..... ..... ..... ..... ..... ..... ..... ..... .....|u..... ..... ..... ..... ..... ..... ..... ..... ..... ..... .....|u..... ..... ..... ..... ..... ..... ..... ..... ..... ..... ..... ..... ..... ..... ..... ..... ..... ....|
.|.... ..... ..... ..... ..... ..... ..... ..... ..... ..... ..... |.u
.... ..... ..... ..... ..... ..... .....|u..... ..... ..... ..... ..... ..... ..... ..... ..... ..... .....|
.|.... ..... ..... ..... ..... ..... .....|u..... ..... ..... ..... |.u
.... ..... ..... ..... ..... ..... .....|
.. ..... .....|u..... ..... ..... ..... |
|..... ..... ..... ..... ..|.u
Die neue Intervallänge ist b − a − h = q(b − a) mit einem Faktor q < 1.
Damit im nächsten Schritt das alte x1 da liegt, wo dann der rechte innere Punkt hinkommt muß sich also
die Strecke von a bis zu x1 so zu der von a bis x2 verhalten wie die von a zu x2 zu der von a bis b.
Das ist aber gerade das Verhältnis vom Goldnenen Schnitt:
Die kürzere Strecke verhält sich zur längeren wie diese zur Gesamtstrecke.
Sei diese Gesamtstrecke 1, und die längere Teilstrecke habe die Länge q, dann ist also (1 − q) : q = q : 1 oder
3 Was
4 Wie
erhält man bei vier Teilintervallen?
wirkt ein Bauwerk von Friedensreich Hundertwasser auf einen unvorbereiteten Betrachter?
20
q 2 = 1 − q. Die positive Lösung q der quadratischen Gleichung q 2 + q − 1 = 0 ist
√
5−1
q =
= 0.618 034 .
2
Diese Zahl ist damit der Verbesserungsfaktor pro Funktionswertberechnung; wie man sieht ist er wesentlich
kleiner als der Wert, den die ersten beiden geschilderten Methoden liefern.
Das Verfahren vom Goldnenen Schnitt ist also das effektivste - es erfordert mit v = ln[(b − a)/ε] - zum
Erreichen der gewünschten Genauigkeit etwa −v/ ln q = 2.0781v Funktionswertberechnungen, während die
gleichabständige Drittelung rund 4.9707v und die Unterteilung in zehn Abschnitte ungefähr 4.9326v Funktionswertberechnungen erfordert.
Man beachte, daß dieses Verfahren nicht unbedingt das globale Maximum bzw. Minimum der Funktion f (x)
liefern muß; es kann auch in einem lokalen ’hängenbleiben’.
Vor diesem Hintergrund ist die Unterteilung in 10 Abschnitte sicherer, weil sie das Intervall etwas gründlicher
abtastet. Eine Garantie gibt sie aber auch nicht, und man kann leicht ein Beispiel konstruieren, wo sie sich
gründlich irrt, während die Methode vom Goldenen Schnitt den wahren Extremwert liefert.5
3.3
Numerische Differentiation
Gegeben sei eine Funktion f (x); Ziel ist es, ihre Ableitung(en) an der Stelle x0 näherungsweise zu berechnen,
wobei nur Funktionswerte f (x) benutzt werden.
Das dies möglich ist zeigt die folgende Überlegung: Es ist
f 0 (x0 )
=
lim
x→x0
f (x) − f (x0 )
x − x0
und damit gilt für ein nahe bei (aber nicht in) x0 liegendes x1
f 0 (x0 )
≈
f (x1 ) − f (x0 )
.
x1 − x0
Nachstehend sollen sinnvolle Formeln und Aussagen über ihre Genauigkeit und Anwendbarkeit gewonnen
werden. Sei h > 0 eine Schrittweite; es werden mit ganzzahligen Werten von i die Argumente xi = x0 + ih
definiert: x1 = x0 + h, x−1 = x0 − h usw., es ist stets xi+1 = xi + h. Sei weiterhin yi = f (xi ). Aus einigen
dieser Funktionswerte wird der Näherungswert ȳ 0 zu f 0 (x0 ) gewonnen.
Man geht davon aus, daß h in irgendeinem Sinne klein ist, und theoretisch soll es gegen Null gehen. Der
Näherungswert ȳ 0 hängt ab von h; seine Abweichung von f 0 (x0 ) wird i. a. mit der Abnahme von h kleiner
(d. h. geht gegen Null). Sie ist näherungsweise proportional zu einer Potenz hp ; diese Zahl p nennt man
die Ordnung der Näherungsformel. Man sieht eine Formel als um so besser an, je höher diese Ordnung ist.
Allerdings sind Formeln hoher Ordnung in der Regel kompliziert und problematisch, so daß man sich in der
Praxis mit relativ einfachen Fällen begnügt. - Korrekt ist p der größte Wert, für den für alle Funktionen
f (x) mit p + 1 stetigen Ableitungen in einer Umgebung von x0 der Grenzwert
ȳ 0 (h) − f 0 (x0 )
h→0
hp
lim
endlich ist.
Die Herleitungen basieren auf der Taylor-Formel; die Funktion f (x) wird in x = x0 in ein Taylor-Polynom
mit Restglied zerlegt, wobei die Existenz der benötigten Ableitungen vorausgesetzt wird:
f (x) = f (x0 ) + f 0 (x0 ) · (x − x0 ) +
f (n) (x0 )
f 00 (x0 )
(x − x0 )2 + . . . +
(x − x0 )n + Rn (x, x0 ) .
2!
n!
Speziell im Falle x = xi ist x − x0 = ih und es gilt
yi = f (x0 ) + f 0 (x0 ) · ih +
5 Ostap
f 00 (x0 )
f 000 (x0 )
f (n) (x0 )
(ih)2 +
(ih)3 + . . . +
(ih)n + Rn (h) .
2!
3!
n!
Bender in I. Ilf, J. Petrow: Die 12 Stühle: ’Eine hundertprozentige Sicherheit gibt Ihnen nur eine Versicherungs-
police.’
21
Nach der bekannten Restgliedformel gilt mit ξi zwischen x0 und xi die Beziehung
Rn (h)
=
f (n+1) (ξi )
(ih)n+1 .
(n + 1)!
Aus h → 0 folgt xi → x0 und damit f (n+1) (ξi ) → f (n+1) (x0 ). Für kleine Werte von h kann man also
f (n+1) (ξi ) als praktisch konstant und mit f (n+1) (x0 ) übereinstimmend ansehen.
Mit den gewonnenen Beziehungen soll die Ordnung der als Eingangsbeispiel angegebenen Formel
f 0 (x0 ) ≈
f (x1 ) − f (x0 )
f (x1 ) − f (x0 )
=
x1 − x0
h
untersucht werden; es ist
[f (x0 ) + f 0 (x0 )h + R1 (h)] − f (x0 )
R1 (h)
f 00 (ξ1 )
f (x1 ) − f (x0 )
=
= f 0 (x0 ) +
= f 0 (x0 ) +
h.
h
h
h
2
Diese Formel hat also die Ordnung p = 1, denn im Fehlerterm steht der Faktor h = h1 . - In Wirklichkeit
hängt ξ1 auch von x1 und damit von h ab, aber bei kleinem Wert kann man ξ1 ≈ x0 als ungefähr konstant
ansehen, so daß sich eine angenäherte Proportionalität des Fehlers zu h ergibt.
Beispiel: Ableitung von f (x) = ex an der Stelle x0 = 0.
Bei h = 0.1 erhält man den Näherungswert (e0.1 − e0 )/0.1 = (1.105170918 − 1)/0.1 = 1.0517 . . . statt des
wahren Werte 1, also reichlich 5% zuviel.
Für verschiedene Werte von h sind nachstehend die Näherungswerte tabelliert:
h
1
0.1
0.01
0.001
0.0001
Näherungswert
1.7183
1.0517
1.005017
1.0005017
1.00005017
Abweichung
0.7183
0.0517
0.005017
0.0005017
0.00005017
Man erkennt, das sich der Fehler bei Verringerung von h auf ein Zehntel seinerseits auf ein Zehntel verringert;
Fehler und Schrittweite h sind also annähernd proportional. Das wird durch die Ordnung p = 1 ausgesagt.
Diese annähernde Proportionalität gilt nur für genügend kleine Werte von h; im Falle h = 1 erweist sich der
Fehler als deutlich anders.
Nun sollen zwei Formeln 2. Ordnung konstruiert werden, wobei von drei Werten xi bzw. yi ausgegangen
wird. Es kann gezeigt werden, ist aber offensichtlich, daß die Werte xi möglichst nahe bei x0 gewählt werden
sollten. Zuerst wird deshalb x−1 , x0 und x1 betrachtet und die gesuchte Näherungsformel in der Gestalt
Ay−1 + By0 + Cy1 angesetzt. Einsetzen der Taylor-Polynome ergibt
Ay−1 + By0 + Cy1 =
f 00 (x0 ) 2 f 000 (ξ−1 ) 3
f 00 (x0 ) 2 f 000 (ξ1 ) 3
0
0
= A f (x0 ) − f (x0 ) +
h −
h + Bf (x0 ) + C f (x0 ) + f (x0 ) +
h +
h
=
2
6
2
6
f 00 (x0 ) 2
Cf 000 (ξ1 ) − Af 000 (ξ−1 ) 3
h · (A + C) +
h
2
6
Damit rechts möglichst genau der gewünschte Wert f 0 (x0 ) erscheint müssen möglichst viele Ausdrücke angepaßt werden:
A + B + C = 0 , (C − A)h = 1 , C + A = 0 .
= (A + B + C)f (x0 ) + (C − A)h · f 0 (x0 ) +
Das ist ein System von drei Gleichungen für die Parameter A, B und C, es hat die Lösungen A = −1/2h,
B = 0 und C = 1/2h. Die gesuchte Formel lautet also
f 0 (x)
y1 − y−1
.
2h
≈
Das ist die zentrale Differenzenformel für die erste Ableitung; der Wert y0 selbst geht nicht ein!
Mit h = 0.1 ergibt das obige Beispiel für f (x) = ex , x0 = 0 das Resultat (e0.1 − e−0.1 )/2 · 0.1 = 1.0016675.
Eine solche Genauigkeit wurde damals erst mit h wesentlich unter 0.01 erreicht!
Die analoge Tabelle ist nun:
22
h
1
0.1
0.01
0.001
0.0001
Näherungswert
1.1752
1.00167
1.0000167
1.000000167
1.00000000167
Abweichung
0.1752
0.00167
0.0000167
0.000000167
0.00000000167
Die Abweichungen sind deutlich kleiner als in der ersten Tabelle; bei Verringerung von h auf ein Zehntel
vermindert sich jetzt der Fehler der Formel auf ein Hundertstel. Das läßt erwarten, daß p = 2 die Ordnung
des Fehlers ist. Tatsächlich ist er dargestellt durch
Cf 000 (ξ1 ) − Af 000 (ξ−1 ) 3
f 000 (ξ1 ) + f 000 (ξ−1 ) 3
f 000 (ξ1 ) + f 000 (ξ−1 ) 2
h =
h =
h .
6
6 · 2h
6·2
Das arithmetische Mittel von f 000 (ξ1 ) und f 000 (ξ−1 liegt zwischen diesen beiden Werten (sofern sie verschieden
sind), und wenn f 000 (x) eine stetige Funktion ist, was vorausgesetzt sei, so existiert also eine Stelle ξ zwischen
ξ−1 und ξ1 und damit zwischen x−1 und x1 , in der es genau gleich f (ξ) ist. Für den Fehler gilt also
f 000 (ξ) 2
h
6
und seine Ordnung ist tatsächlich 2.
Für manche Zwecke sind einseitige Darstellungen der Ableitung notwendig; nähern wir analog f 0 (x0 ) durch
y0 , y1 und y2 an:
f 0 (x) ≈ Ay0 + By1 + Cy2 =
f 00 (x0 ) 2 f 000 (ξ1 ) 3
= Af (x0 ) + B f (x0 ) + f (x0 )h +
h +
h +
2
6
000
00
f (ξ2 )
f (x0 )
(2h)2 +
(2h)3 =
+C f (x0 ) + f (x0 ) · 2h +
2
6
2
f 000 (ξ1 ) 3
f 000 (ξ2 )
h
2
00
3
0
B + 2h C f (x0 ) + B
h +C
(2h)
.
= (A + B + C)f (x0 ) + (hB + 2hC)f (x0 ) +
2
6
6
Es folgen wiederum die Forderungen
A+B+C = 0,
(B + 2C)h = 1 ,
B + 4C = 0
mit den Lösungen A = 3/2h, B = −4/2h und C = 1/2h, folglich wird
f 0 (x)
≈
3y0 − 4y1 + y2
.
2h
Eine entsprechende Betrachtung liefert einen Fehlerterm der Form
f 000 (ξ) 2
h ,
3
die Ordnung ist ebenfalls 2, aber dieser Wert ist etwa das Doppelte dessen von der zentralen Differenzenformel. (’Etwa’ deshalb, weil die ξ-Werte in den beiden Formeln i. a. nicht übereinstimmen.) Letztere ist also
nach Möglichkeit vorzuziehen; die einseitige Formel wird z. B. verwandt, wenn man eine einseitige Ableitung
am Rande des Definitionsbereichs ausrechnen will, oder wenn man bei einer Prozeßsteuerung die momentane
Zeitableitung einer Größe benötigt, wobei man natürlich nur auf Werte von Gegenwart und Vergangenheit
zugreifen kann.
Die entsprechende einseitige Formel von der anderen Seite her lautet
f 0 (x)
≈
−3y0 + 4y−1 − y−2
.
2h
Der Fehlerausdruck ist völlig analog, aber diesmal liegt ξ zwischen x−2 und x0 .
Mit Hilfe dieser Formeln kann man also f 0 (x) näherungsweise berechnen, ohne den analytischen Ausdruck
der Ableitung zu bilden. Das ist nützlich in den Fällen, wo man keine Formel von f (x) besitzt, weil diese
Funktion nur als Tabelle vorliegt (z. B. eine Meßreihe). Diese einfachen Formeln bewähren sich auch im
folgenden praktischen Fall: Man hat eine Funktion und ihre Ableitungen programmiert und will nun dieses
23
Programm auf Richtigkeit testen. Das kann man machen, indem man f 0 (x) auf beiden Wegen berechnet.
Weichen die Werte drastisch ab, so muß ein Fehler vorliegen.
Auf den Differenzenformeln basieren Verfahren zur näherungsweisen Lösung von Differentialgleichungen;
dazu an anderer Stelle.
Eine Bemerkung zur Genauigkeit: Wenn die Werte yi beispielsweise Meßwerte sind, die in gleichabständigen
Zeitschritten o. ä. erhoben werden, so können sie zufällige Meßfehler εi enthalten; es sei |εi | ≤ ε eine
universelle Schranke dieser Fehler. Der Irrtum der zentralen Differenzenformel ist dann
f 0 (x) =
f 00 (ξ) 2
y1 − y−1
ε1 − ε−1
f 00 (ξ) 2
y1 + ε1 − y−1 − ε−1
+
h =
+
+
h .
2h
6
2h
2h
6
Der schlimmste Fall träfe z. B. bei ε1 = ε und ε−1 = −ε ein, dann wäre der Gesamtfehler
ε
f 00 (ξ) 2
+
h .
h
6
Der zweite Summand nimmt mit Verringerung von h ab (alles betragsmäßig gedacht), der erste nimmt aber
zu. Ihre Summe besitzt ein positives Minimum in einem gewissen h0 , und damit kann man den theoretisch
beliebig verkleinerbaren Fehler in diesem praktischen Fall nicht unter eine gewisse Grenze senken!
In der nachstehenden Abbildung ist der erste Summand punktiert gezeichnet, der zweite gestrichelt, und die
Summe als durchgehende Kurve:
Fehler
....
. .....
. ......
. .......
..
.....
. .......
......... ..
.
.
.
. ........
.
.........
. . .......
............
.
.
. . ........
.
.
.
.
.
.
. . ..........
.......... .
............... ..
. . .............
.
.
.
.
.
.
.
.
.
.
.
.
......................... ......................... . ...
..
................
....
..
.
.....
..
.
.
.
.
.
..
...... .....
..
. ...... .......
.. ..... . . . ... .
..... ...
.
.
.
.
.
.. . . . . .
.....
....
.... ....
.
..
.
.
.
.
.
.
.
........ h
.
. ..... .
.
.
.
.
h
.
...
.
.
.
.
.
.
0
.
.
.
.
.
.
.
.
.
.
..... ..... .....
Das Dilemma wird durch die nachstehenden Abbildungen erläutert; es gehe darum, den Anstieg der Kurve
in dem linken der beiden jeweiligen Punkte zu bestimmen. Die Funktionswerte sind mit einem gewissen
Unsicherheitsintervall bestimmbar, das durch die beiden dicken senkrechten Balken repräsentiert ist. Der
Anstieg, der sich hieraus ergibt, liegt zwischen den Anstiegen der Verbindungsgeraden der jeweils kleinsten
und größten Werte, abwechselnd. Diese Geraden sind gestrichelt. Es wird der Einfachheit halber von der
simplen Formel
y1 − y0
f 0 (x0 ) ≈
h
ausgegangen.
........................
.............................
..............................
.
.......
.....
.....
.....
.......
.....
.
.
....
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
....
....
....
.. .
.
..
.
.
.
.
.
.
.
.
.
.
.
.
.
...
...
. ....
... ......
.. ..
.. ..... .
...
.
.
.
.
.
...
...
.. ...
..
. ..
..
......
...
...
. ...
......
.
.
.
.
.
.
.
.
.
.
.
...
....
.
.
.
.
...
... .. ......
. ...
.
...
.
.
.
.
.
.
.
...
.
.
.
.
.
.
.
..
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
...
...
...
.
........
...... ... ...
...
...
...
... ..... .......................
........
.
.
.
.
.
.
.
.
.
.
.
.
...
.
.
.
.
.
.
.
.
.
.
.
.
.
...
...
... .....
.
.
.
.
.
.
.
...
. ....
. ..
...
...
...
.
.
.
.
...
.
........ ...
.
.
.
...
...
...
...
...
..
...
.....
...
...
...
.
. ..
...
...
.
.
...
...
.
. ..
..
..
.
.
.. .
.. .
..
.. .
.. .
..
. .
. .
..
24
Links liegen die Punkte weit auseinander und die beiden Geraden relativ eng zusammen; sie geben aber ziemlich falsche Anstiege, da sie durch den Bezug auf einen weit entfernten Punkt einen großen Fehler f 00 (ξ1 )h/2
machen.
Im mittleren Bild bekommt man halbwegs richtige Anstiegswerte in akzeptablen Toleranzgrenzen.
Rechts sind die Punkte recht nahe, h ist klein. Man könnte das lokale Verhalten der Funktion recht genau
ermitteln, wenn nicht die Ungenauigkeiten bei der Bestimmung der Funktionswerte wäre, die dafür sorgt,
daß der Bereich der möglichen Anstiege sehr weit auseinanderklafft.
Praktische Schlußfolgerungen:
1. Eine Formel mit einem kleinen theoretischen Fehlerterm ist günstig, denn sie erlaubt es, mit einer relativ
großen Schrittweite h zu arbeiten. Dann wirkt sich aber der Einfluß der Ungenauigkeiten wenig aus, denn
dieser ist proportional zu 1/h.
2. Wir hatten festgestellt, daß in der zentralen Differenzenformel die Ungenauigkeiten einen Fehler ε/h verursachen können. In der einseitigen Formel wäre er - im schlimmsten Falle - aber (3ε − 4(−ε) + ε)/2h = 4ε/h,
also viermal größer. - Das ist ein weiterer Grund, auf die einseitige Formel nicht ohne zwingenden Grund
zurückzugreifen.
3. Wenn man eine empirisch zu ermittelnde Funktion differenzieren soll und ihre Werte experimentell nur
relativ ungenau ermitteln kann, so kann man sich helfen, indem man in der Umgebung von x0 eine größere
Anzahl von Meßwerten erfaßt, durch diese eine Ausgleichsgerade oder -parabel legt, und dann deren Anstieg
in x0 als Näherungswert zu f 0 (x) ansieht. Durch den Ausgleich wird die Wirkung der - vermutlich zufälligen
- Meßfehler zumindest teilweise neutralisiert. Weiteres siehe Lehrbücher zur Statistik bzw. 6.7.: ’Anpassung
an Tabellen’.
Die Berechnung der zweiten Ableitung:
Man kann analog vorgehen; beutzen wir die drei Stellen x−1 , x0 und x1 und setzen die gesuchte Näherungsformel wieder in der Gestalt Ay−1 + By0 + Cy1 an. Einsetzen der Taylor-Polynome ergibt
Ay−1 + By0 + Cy1 =
f 00 (x0 ) 2 f 000 (x0 ) 3 f 0000 (ξ−1 ) 4
0
h −
h +
h + Bf (x0 )+
= A f (x0 ) − f (x0 ) +
2
6
24
f 00 (x0 ) 2 f 000 x0 ) 3 f 000 (ξ1 ) 4
+C f (x0 ) + f 0 (x0 ) +
h +
h +
h
=
2
6
24
f 00 (x0 ) 2
f 000 (x0 ) 3
Af 000 (ξ−1 ) + Cf 0000 (ξ1 ) 4
h · (A + C) +
h · (C − A) +
h
2
6
24
Um den gewünschten Wert f 00 (x0 ) zu erhalten verlangt man
= (A + B + C)f (x0 ) + (C − A)h · f 0 (x0 ) +
A+B+C = 0,
C −A = 0,
(A + C)h2 /2 = 1
für die ersten drei Ausdrücke; man erkennt dann aber, daß damit auch der Summand mit h3 verschwindet.
Es resultieren die Koeffizienten A = C = 1/h2 und B = −2/h2 , also die Formel (nach analoger Bearbeitung
des Fehlerterms)
f 0000 (ξ) 2
y1 − 2y0 + y−1
+
f 00 (x0 ) =
h .
12
h2
Diese Formel (’zentrale Differenzenformel für die zweite Ableitung’ genannt) besitzt wiederum die Ordnung
p = 2.
Eine andere Vorgehensweise zur Herleitung dieser Formel ist recht anschaulich und liefert eine praktikable
Verallgemeinerung:
Man betrachtet fiktive Punkte x0 ± h/2; fiktiv deshalb, weil die Funktion f (x) in Wirklichkeit dort nicht
ausgewertet wird.
Die zweite Ableitung in x0 ist die Ableitung der ersten Ableitung; diese wird als zentrale Differenzenformel
bezüglich dieser beiden Punkte geschrieben, wobei man beachten muß, daß der Abstand von x0 zu diesen
Punkten nur h/2 ist:
y 0 (x0 + h/2) − y 0 (x0 − h/2)
.
y 00 (x0 ) =
2 · (h/2)
25
Nun ersetzt man diese beiden ersten Ableitungen ihrerseits durch zentrale Differenzen in den beiden jeweils
h/2 entfernten Nachbarpunkten, die aber nicht mehr fiktiv sind - es handelt sich um x−1 , x0 und x1 :
y 0 (x0 − h/2) ≈
y(x0 ) − y(x0 − h)
y0 − y−1
=
,
2 · (h/2)
h
y 0 (x0 + h/2) ≈
y(x0 + h) − y(x0 )
y1 − y0
=
2 · (h/2)
h
=⇒
y0 − y−1
y1 − y0
−
y1 − 2y0 + y−1
h
h
=
y 00 (x0 ) ≈
.
h
h2
Man gelangt zu derselben zentralen Differenzenformel für die zweite Ableitung. Diese Herleitung ist anschaulich, liefert aber keinen Fehlerterm.
Dafür kann man die erhaltene Zwischenformel praktisch nutzen:
Beispiel: Näherungsweise Lösung eines Randwertproblems
Gesucht ist die Funktion y(x), die der Differentialgleichung 2. Ordnung
dy
d
p(x)
+ q(x) · y = f (x)
dx
dx
mit gegebenen Funktionen p(x), q(x) und f (x) genügt, und die in den Punkten a < b die - ebenfalls
gegebenen - Werte y(a) = ya und y(b) = yb annimmt.
(Formal könnte man die DGl. in die Form p(x)y 00 + p0 (x)y 0 + q(x)y = f (x) bringen; dies ist aber aus einer
Reihe von Gründen nicht günstig.)
Man sucht eine Näherungslösung dieses Randwertproblems, und zwar in Form einer Tabelle. Der Abschnitt
[a, b] wird in n gleichgroße Teile der Länge h geteilt; es gilt h = (b − a)/n. Man setzt x0 = a, xk = a + k · h
und xn = b. In diesen Punkten xk werden Näherungswerte yk zu den exakten Lösungswerten y(xk ) gesucht.
Zur Bestimmung der yk ersetzt man die Ableitungen durch Differenzenformeln. Den Term (py 0 )0 behandelt
man unter Verwendung fiktiver Punkte in der beschriebenen Weise; die ’äußere’ Ableitung wird als zentrale
Differenzenformel bezüglich der fiktiven Punkte geschrieben, und die ’inneren’ Ableitungen als ebensolche
um diese fiktiven Punkte herum.
Die Funktion p(x) kann an jeder Stelle des Intervalls ausgewertet werden, auf y(x) greift man nur in den
Punkten xk zu (auch Maschen- oder Gitterpunkte genannt). Es resultiert die folgende Differenzengleichung für
die yk , formuliert für einen (jeden) Punkt xl im Inneren des Intervalls (a, b), d. h. für l = 1, 2, 3, . . . , n−2, n−1.
Zur Abkürzung wurde mit halbzahligen Indizes gearbeitet und xk ± h/2 = x0 + kh ± h/2 = x0 + (k ± 1/2)h =
xk±1/2 bezeichnet:
yl − yl−1
yl+1 − yl
1
p(xl + h/2)
+ q(xl )yl = f (xl ) .
− p(xl − h/2)
h
h
h
Zusammengefaßt und verkürzt geschrieben - mit bekannten bzw. berechenbaren Werten ql = q(xl ) usw. resultiert
pl−1/2 + pl+1/2
pl−1/2
pl+1/2
yl−1 + ql −
yl +
yl+1 = fl , l = 1, 2, . . . , n − 1 .
h2
h2
h2

1
 p1/2

 0
 0

 0
0
Das ist ein lineares Gleichungssystem für die gesuchten Werte yl , das noch durch die zwei Gleichungen
y0 = ya und yn = yb abgeschlossen wird.
Im Falle n = 5 hätte man in Matrixschreibweise - jede Gleichung mit h2 multipliziert, mit Ausnahme der
ersten und letzten:

 

0
h2 q1 − (p1/2 + p3/2 )
p3/2
0
0
0
0
p3/2
h2 q2 − (p3/2 + p5/2 )
p5/2
0
0
0
0
p5/2
h2 q1 − (p5/2 + p7/2 )
p7/2
0
0
0
0
p7/2
h2 q1 − (p7/2 + p9/2 )
0
0
0
0
0
p9/2
1






y0
y1
y2
y3
y4
y5
 
 
 
=
 
 
ya
h2 f 1
h2 f 2
h2 f 3
h2 f 4
yb
Im allgemeinen arbeitet man mit wesentlich größeren Werten von n; man kann zeigen, daß unter gewissen
- in der Regel erfüllten - Bedingungen die Abweichungen zwischen yk und y(xk ) wiederum proportional h2
und damit proportional zu n−2 sind.
In der Matrix des Gleichungssystems sind alle Elemente aij mit |i − j| > 1 gleich Null; diese Matrix heißt
schwach besetzt oder sparse. Nicht - Null - Elemente findet man also nur auf der Hauptdiagonalen sowie
26






unmittelbar darunter oder darüber. Statt der (n+1)2 Elemente dieser Matrix braucht man im Computer nur
die 3n − 1 von Null verschiedenen Elemente zu speichern, und das Gauss-Verfahren läßt sich so modifizieren,
daß das System sehr effektiv gelöst werden kann. In vielen Fällen kann man das Pivotelement immer auf
der Haupdiagonale wählen, so daß die Hinrechnung nur im Eliminieren der Werte darunter besteht. (vgl.
insgesamt Beispiel 3)
3.4
Aufgaben
1. Ein Meßgerät schwingt sich nach der Formel x(t) = A + Be−λt sin(ωt + α) langsam auf seinen Meßwert
ein. Man möchte nicht warten, bis sich der Zeiger beruhigt hat, und registriert drei aufeinander folgende
Maximalausschläge x1 , x2 und x3 .
Überzeugen Sie sich, daß man mit Hilfe des Aitkenschen ∆2 -Verfahrens daraus sofort den Meßwert
ermitteln kann!
27
Kapitel 4
Lösen von Gleichungen
4.1
4.1.1
Eine Gleichung einer Unbekannten
Vorbemerkungen
Eine Gleichung der Form g(x) = h(x) mit gegebenen Funktionen g und h sei formuliert, aus der die Werte x
ermittelt werden sollen, die sie erfüllen. Diese Bestimmungsgleichung für x kann immer in eine äquivalente
(d. h. mit genau derselben Lösungsmenge) Nullstellenaufgabe überführt werden, indem man die Funktion
f (x) = g(x) − h(x) einführt und f (x) = 0 betrachtet.
Hier sei x ein Element der Menge der reellen Zahlen.
Die formulierte Gleichung f (x) = 0 beinhaltet drei Fragen:
1. Gibt es Lösungen?
2. Wenn ja, wieviele?
3. Wo liegen sie (...konkrete Werte)?
Der ideale Weg zur Lösung einer Gleichung besteht darin, daß man sie nach x auflöst; das ist aber oftmals
nicht möglich oder wäre sehr umständlich. In diesen Fällen ist es notwendig, numerische Verfahren anzuwenden, die einem (wenigstens) den Wert der (oder einer) Lösung liefern.
Ein gutes, sachgemäß realisiertes numerisches Verfahren liefert oftmals noch gewisse Aussagen über die Punkte 1. und 2..
Typischerweise sind numerische Verfahren in diesem Falle Vorschriften, die eine Folge von Werten x0 , x1 , . . .
liefern, die gegen die wahre Nullstelle x∗ konvergiert. Solche Methoden nennt man Iterationsverfahren1 , da
sie in der Regel immer wieder dieselbe Vorschrift wiederholen.
Ein Wert x0 muß zumeist vorgegeben werden; er heißt Startwert, weil das Verfahren mit ihm beginnt. Es
gibt auch Verfahren, die mehr als einen Startwert benötigen.
Diese Rechnung wird bei irgendeinem xn abgebrochen, und es wird dies als Näherungswert akzeptiert.
Welche Eigenschaften sollte ein gutes Iterationsverfahren haben?
1. Schnelle Konvergenz, d. h. man muß nur wenige Schritte machen und kann z. B. bereits x3 akzeptieren.
2. Sicherheit, d. h. bei ’vernünftig’ gestellten Problemen soll es die Lösung liefern, nicht auf halben Weg
abstürzen oder etwas anderes als die Lösung offerieren.
3. Genauigkeitsaussagen ermöglichen; speziell ist es günstig, wenn die Werte ’monoton’ besser werden, wenn
man also annehmen kann, daß diejenigen Dezimalstellen, die in xk und xk+1 übereinstimmen, bereits halbwegs richtig sind.
4. Einfache Rechenvorschrift; im besten Fall kommt man mit einem Programm aus, das nur die Ermittlung
der Werte f (x) erfordert. (Noch weniger zu verlangen wäre unrealistisch.)
Zur Charakterisierung der Annäherungsgeschwindigkeit der Werte xk an x∗ verwendet man den Begriff der
Konvergenzordnung. Sie wird beschrieben durch eine Zahl α ≥ 1, und zwar ist es derjenige Wert, für den der
positive endliche Grenzwert
|xk+1 − x∗ |
∗ α
k→∞ |xk − x |
lim
1 itero
=
lat. - wiederholen
28
q,
0 < q < +∞
existiert. (Falls er existiert; es gibt Verfahren, für die keine Konvergenzordnung definiert werden kann.)
Für große Werte von k gilt dann also näherungsweise
|xk+1 − x∗ | = q|xk − x∗ |α .
Man beachte, daß xk − x∗ eine Nullfolge sein soll.
Je größer α, desto schneller konvergiert das Verfahren.
Bei α = 1 nennt man ein Verfahren linear konvergent; damit Konvergenz eintritt muß in diesen Fall q < 1
gelten. Ist q = 0.5, so wird der Abstand von xk zu x∗ folglich von Schritt zu Schritt etwa halbiert (wenigstens
ab einem gewissen k). Bei q = 0.1 gewinnt man pro Schritt eine Dezimalstelle der Lösung.
Bei linear konvergenten Verfahren kann man die Annäherung an die Nullstelle beschleunigen, indem man
auf die gewonnene Folge das Aitkensche ∆2 -Verfahren anwendet.
Im Falle α > 1 spricht man von superlinearer Konvergenz.
Verfahren mit α = 2 heißen quadratisch konvergent; der Fehler |xk+1 − x∗ | in einem neuen Schritt ist (von
einem Faktor q abgesehen, der hier eine beliebige positive Zahl ist) etwa das Quadrat des Fehlers |xk − x∗ |
im vorigen Schritt. Das ist eine viel schnellere Abnahme.
Man beachte, daß dieser Wert α eine theoretische Orientierung ist und im Einzelfall manchmal wenig aussagt. Es wird nur festgestellt, daß die Näherungswerte xk sich irgendwann einmal so oder so verhalten; wann
dies eintritt bleibt offen. Es kann also sein, daß ein linear konvergentes Verfahren nach vier Schritten den
gewünschten Wert mit akzeptabler Genauigkeit liefert, während ein quadratisch konvergentes erst einmal
sechs tastende Schritte in ziemlicher Entfernung macht und dann aber loslegt!
4.1.2
Intervallhalbierung
Die Funktion f (x) sei auf [a, b] stetig und es gelte f (a) · f (b) < 0.
Sie besitzt also mindestens eine Nullstelle zwischen a und b;2 es liegt eine Einschließung (mindestens) einer
Nullstelle vor.
Wir setzen a0 = a und b0 = b sowie x0 = (a + b)/2 - der Mittelpunkt des Intervalls. Nun wird y0 = f (x0 )
berechnet.
Falls y0 · f (a0 ) < 0 ist, so wird a1 = a0 und b1 = x0 gesetzt, ansonsten a1 = x0 und b1 = b0 . Sei nun
x1 = (a1 + b1 )/2.
Dieser Prozeß wird fortgesetzt, bis an und bn nahe genug beieinander liegen; dann kann man z. B. xn als
Näherung zu der (zu einer...) Nullstelle akzeptieren.3
...
.....
.
.
.
.
.
.
f (x) .......
........
..........
.
.
.
.
.
.
.
.
.
.
.
..
..............
..............
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
..........
......................................................................................................................................................................................................................................................................................................................................................................................................................
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
....
.........................
...................................
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
..............................................
...........................................................
|..u... ..... ..... ..... ..... ..... ..... ..... ..... ..... ..... ..... ..... ..... ..... ..... ..... ..... ..... ..... ..... ..... .....|u..... ..... ..... ..... ..... ..... ..... ..... ..... ..... ..... ..... ..... ..... ..... ..... ..... ..... ..... ..... ..... ..... .....|u
.|.u... ..... ..... ..... ..... ..... ..... ..... ..... ..... ..... ....|.u..... ..... ..... ..... ..... ..... ..... ..... ..... ..... .....|u
.|.u... ..... ..... ..... ..... .....|u..... ..... ..... ..... ..... ....|u
.|.u... ..... ..... |u
..... ..... .....|u
Hat man das Genauigkeitsziel bn − an < ε, so sind wegen bn − an = (b − a) · 2−n also
n
>
b−a
1
· ln
ln 2
ε
Schritte zu machen und n + 1 Funktionswerte zu berechnen.
Vorteile dieses Verfahrens:
1. Man braucht ausschließlich Funktionswerte. - Das Verfahren läßt sich also auch dann anwenden, wenn
diese Funktionswerte nicht berechnet werden, sondern nur als Meßresultate anfallen, nach denen man eine
2 Welche
Zahl von Nullstellen ist noch möglich?
passiert, wenn man in irgendeinem Schritt die Nullstelle genau trifft? Muß oder sollte man im Programm auf diesen
Fall testen?
3 Was
29
Eingangsgröße so einstellen will, daß eine gewisse Ausgangsgröße erreicht wird.
2. Das Verfahren ist extrem einfach zu programmieren; man kann dabei kaum Fehler machen.
3. Wegen seiner Einfachheit ist das Verfahren von extremer Robustheit und nicht hereinzulegen; es sei denn,
man setzt ihm eine unstetige Funktion ohne Nullstelle vor, z. B, 1/x zwischen -1 und 1. Aber das ist unfair.4
4. Man behält die ganze Rechnung über die Einschließung der Nullstelle bei.
5. Man hat automatisch eine Genauigkeitsaussage; es gilt x∗ = (an + bn )/2 ± (bn − an )/2.
Nachteile:
√
1. Man braucht eine Einschließung; die Nullstelle von f (x) = x oder von f (x) = x2 kann man damit nicht
ermitteln.
2. Das Verfahren ist nicht sehr effektiv und braucht ziemlich viele Funktionswertberechnungen. - Wenn eine
Funktionswertberechnung durch ein zweiwöchiges Experiment mit beträchtlichen Kosten realisiert wird sollte
man sich tunlichst etwas suchen, das weniger derartige Aktionen benötigt.
Das Verfahren empfiehlt sich, wenn man schnell eine oder einige wenige Nullstellen berechnen will; als innere
Prozedur in einem Programm, die unzählige Male aufgerufen wird, ist es nicht geeignet.
Zu sonstigen Einsatzzwecken vgl. den Kommentar zur Regula falsi.
4.1.3
Regula falsi
Die Grundidee dieses Verfahrens, die - abgewandelt - auch für das später behandelte Newton-Verfahren
zutrifft, ist die folgende:
Man sucht die Nullstelle der Funktion f (x); diese Aufgabe ist in irgendeinem Sinn schwierig bis unlösbar. In
dieser Notsituation ersetzt man deshalb f (x) durch eine ähnliche, aber einfache Funktion f0 (x) und bestimmt
ohne große Mühe deren Nullstelle x0 .
Da die Funktion f0 (x) der eigentlich betrachteten Funktion f (x) in irgendeinem Sinne ähnlich sein sollte
wird ihre Nullstelle x0 in der Nähe (wiederum in irgendeinem Sinne) der wahren Nullstelle x∗ liegen.
Der Preis (der Aufwand) für die Ermittlung des wahren Wertes war einem zu hoch; auf diese Weise bekommt
man billig ein Resultat, aber es ist ungenau, also von minderer Qualität.
Will man etwas Besseres, ohne auf einen Schlag mehr zu bezahlen, so muß man sich auf Ratenzahlung
einlassen.
Hier könnte man, dank der Kenntnis von x0 mit weiterer Information zum Problem versehen, eine neue,
f (x) noch ähnlichere Funktion f1 (x) konstruieren und deren Nullstelle x1 bestimmen, die evtl. eine bessere
Näherung zu x∗ darstellt als x0 .
Und diesen Schritt kann man dann nochmals wiederholen usw.. Es entsteht also eine Folge {x0 , x1 , x2 , . . .}
von Werten, die (hoffentlich) gegen x∗ konvergiert.
Das konkrete Vorgehen im Falle der Regula falsi, auch Sekantenverfahren genannt, ist nun das folgende (es
wird vorausgesetzt, daß wir nicht aus dem Definitionsbereich von f (x) herausgeraten):
Es seien a0 und b0 6= a0 zwei Startwerte, beide in der Nähe von x∗ . ’In der Nähe’ bedeutet, daß die
Funktionskurve in dem Bereich, der x∗ , a0 und b0 enthält, halbwegs gerade verlaufen soll.
Durch die Wertepaare (a0 , f (a0 )) und (b0 , f (b0 )) wird nun eine lineare Funktion f0 (x) gelegt:
f0 (x)
=
f (a0 ) +
f (b0 ) − f (a0 )
(x − a0 ) .
b0 − a0
Das ist eindeutig möglich, da b0 6= a0 vorausgestzt war. f0 (x) ist als lineare Funktion natürlich sehr einfach,
und da die Gerade die Kurve von f (x) in zwei Punkten schneidet oder zumindest berührt ist auch eine
gewisse Ähnlichkeit zwischen den beiden Funktionen zu erwarten.
...
f (x).............
.
.
.
.
..
........
................. .....
.
.
.
.
.
u
.
.
.
.
.
.
.
..... ....................
.... ....................................
.
.
.
.
.
.
f
(x)
.
.
.
.
.
0
a0
x0
b
...........
. ..... .....
........................................................................|...........................................................................................................................................................|.............................................................................................................................................|.0...............................................
.
.
.
.
.
.
.
.
.
.
.
.
.
.
...
..... .... ..... .....................
...........................................................
.
.
.
.
.
.
.
.
.
.
.
..... .........................................
..................................
...u
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
........................................... ..... ..
4 vgl.
das Schicksal von Andrew Jackson in: Mark Twain, Der berühmte Springfrosch von Calaveras.
30
Der Wert von x0 ist die Lösung einer einfachen Nullstellenaufgabe:
f (a0 ) +
f (b0 ) − f (a0 )
(x0 − a0 ) = 0
b0 − a0
=⇒
x0 = a0 −
b0 − a 0
f (an ) .
f (b0 ) − f (a0 )
Nun wird einer der beiden Werte a0 oder b0 durch x0 ersetzt; dieser heißt jetzt a1 oder b1 . Der andere Wert
bleibt erhalten und ergibt b1 bzw. a1 . Die lineare Funktion durch dieses Wertepaar sei f1 (x) usw..
Es resultiert das Bildungsgesetz für das k-te Element der Folge xk :
xk
=
ak−1 −
bk−1 − ak−1
f (ak−1 ) .
f (bk−1 ) − f (ak−1 )
Diese Formel soll noch in zwei unwesentlichen Modifikationen angegeben werden, von denen die erste ein
leichteres Merken ermöglicht, und die zweite eine Interpretation: Mit den Differenzen ∆yk−1 = f (bk−1 ) −
f (ak−1 und ∆xk−1 = bk−1 − ak−1 wird
xk = ak−1 −
f (ak−1 )
∆xk−1
f (ak−1 ) = ak−1 −
∆xk−1 .
∆yk−1
∆yk−1
Falls man eine Einschließung der Nullstelle hatte, also f (bk−1 ) und f (ak−1 unterschiedliches Vorzeichen besaßen, so ist der Faktor f (ak−1 /∆yk−1 betragsmäßig kleiner als 1; der Abstand ∆xk−1 zwischen bk−1 und
ak−1 wird also nicht ausgeschöpft und der Wert xk liegt dazwischen.
Umgekehrt, haben bk−1 und ak−1 dasselbe Vorzeichen, so wird der Faktor betragsmäßig größer als 1, und
xk muß dann außerhalb dieses Bereiches liegen.
Die Regula falsi ist superlinear konvergent;
ihre Konvergenzordnung ist, wie man mit Hilfe der Taylorschen
√
Formel berechnen kann, α = (1 + 5)/2 = 1.618 . . .. Sie ist folglich unvergleichlich effektiver als das Verfahren der Intervallhalbierung. Ebenso wie dieses benötigt sie nur Funktionswerte für ihre Arbeit.5
Diese Effektivität hat ihren Preis, und der drückt sich in einer Reihe von Problemen und Achillesfersen aus.
Dieses Verfahren kann scheitern, und das auch dann, wenn das gestellte Problem lösbar ist.
Löst man die Gleichung f (x) = 0 ’von Hand’, so wird nicht viel passieren. Man überlege sich aber, wie man
die verschiedenen Probleme in einem Programm abfangen kann, also einen Computer befähigt, die Situation
zu erkennen und den richtigen Ausweg einzuschlagen.
1. Die Rechnung bricht ab, wenn f (ak ) = f (bk ) ist. Die Gerade der Hilfsfunktion verläuft dann horizontal
und außerhalb der x-Achse, hat also mit ihr keinen Schnittpunkt xk .
In dem Fall muß man einen der beiden Werte ak oder bk ändern. - Sinnvoll ist es aber, dies gründlich zu
tun, denn sonst gerät man zum Fall 2.
Werte zu ändern ist bisweilen leichter gesagt als getan; wenn man nicht aufpaßt, so landet man außerhalb
des Wertebereichs D(f ). Damit diese Landung nicht auch
√ noch außerhalb des Programms - d. h. im Operationssystem - erfolgt sollte man z. B. bei f (x) = x + x − 7 die Funktion so programmieren, daß bei x < 0
kein Absturz durch die Wurzel ausgelöst wird, sondern z. B. der Ausdruck x − 7 ausgerechnet wird.
Die dadurch entstandene neue Funktion ist auf der gesamten reellen Achse definiert, stetig und hat nur eine
einzige Nullstelle - die gesuchte. (Wichtig ist eigentlich nur, daß sie keine neuen Nullstellen hat).
2. In der Numerischen Mathematik muß nicht der schlimmste Fall der Theorie eintreten; oft reicht es aus,
wenn man nur in dessen Nähe kommt.
Bei f (ak ) 6= f (bk ) ist die Formel formal anwendbar, doch können die beiden Funktionswerte relativ nahe
beieinander liegen (relativ zu ihrem Wert), und dann geht die Gerade mit geringer Neigung durch zwei
ziemlich weit von der Achse entfernte Punkte. Ihr Schnittpunkt xk mit der Achse liegt also recht weit weg.
Schlimmstenfalls kann man jetzt den Traum von der Nullstelle begraben:
5 Sicher kommt man als Nutzer der Intervallhalbierung früher oder später ganz von allein auf die Idee einer Verbesserung:
Wenn f (1) = 0.0445 und f (3) = −72.915 ist, so ist es wenig sinnvoll, mit x = 2 weiter zu probieren - höchstwahrscheinlich liegt
die Nullstelle ganz nahe bei 1. Wie nahe? - Die lineare Interpolation gibt einen Hinweis.
31
...........
.................. ........f (x)
..
........
.... ............................
....
... ..
................................
.............
.
... ...
.............
.. .....
.............
.... ..
.. ...
.............
.
.............
.
.............
.. ...
..
.............f0 (x)
...
...
..
.............
.
...
.............
..
..
.............
...
.....................................
...
...
...
...
.............. .................................................................
.
...
..
.
.
.
.
.
.
.
...........
.
.......................
..
.....
..... ...... ..... ..... ..... ....... ..... ..... ......... ..... ..... ..... ..... ..... ..... ..... ..... ..... ..... ................ ..... ..... ..... ..... ..... ..... ..... ....................................... ..... ..... ..... .........................................................................................................
...
.
.
.
.
.
.
..
..
.............
..
...
...........
....
............|.................................|..................................................................................................................................................................................................................................................................................|.........................................................................................
.
...
..
a0
x0 .......................
b0
....
....
.
.
.....
.
.......
......
...........................
Das Beispiel soll eine Funktion zeigen, die rechts von x0 auf einen positiven Wert hinausläuft, also keine
Nullstelle bis +∞ mehr besitzt, auch nicht als Grenzwert.
Es ist geometrisch offensichtlich, daß die formal gebildete Folge xk hier gegen Unendlich geht, und noch dazu
sehr schnell.
Praktisch bewirkt das einen Überlauf in der Rechnung.
Es ist also notwendig, nach der Berechnung der xk nachzusehen, ob der Wert weit weggeschleudert wurde
(von ak und bk im Sinne ihres Abstandes). Wenn ja, sollte man ihn ggfs. verwerfen und nur einen kleinen
Schritt in seine Richtung machen (ähnlich dem gedämpften Newton-Verfahren, s. d.).
3. Es ist immer günstig, wenn man eine Einschließung hat: f (a0 ) · f (b0 ) < 0, denn dann kann man sicher
sein, dazwischen (mindestens) eine Nullstelle zu haben. Es liegt nahe, diese Einschließung zu bewahren, also
f (x0 ) zu berechnen und von a0 und b0 denjenigen Wert zu bewahren, der das entgegengesetzte Vorzeichen
hat. Leider verlangsamt das bisweilen die Konvergenz sehr stark.
Ein drastisches Beispiel ist die - ansonsten triviale - Funktion f (x) = x30 − 2. Sie hat eine Nullstelle etwas
oberhalb von 1; sei a0 = 1 und b0 = 10. Das ist eine Einschließung; die Regula falsi muß konvergieren, und
sie tut es theoretisch auch.
Aber nicht praktisch. Berechnen wir x0 :
x0 = 1 −
9
10 − 1
· (130 − 2) = 1 + 30
.
(1030 − 2) − (130 − 2)
10 − 1
√
Man macht also einen Schritt von etwa 0.9 · 10−29 in die richtige Richtung; die Nullstelle ist x∗ = 30 2 =
1.02337 . . .. Der Einfachheit halber angenommen, die weiteren Schritte des Verfahrens wären von derselben
Länge, so würde man rund 2.6 · 1027 Schritte brauchen. - Bei einer Million Schritte pro Sekunde wären dafür
zirka 8 · 1019 Jahre erforderlich, etwa dreißig Millionen mal das Alter des Universums.
Eine genauere Betrachtung wirkt allerdings ernüchternd - diese Schätzung war viel zu optimistisch, denn in
Wirklichkeit dauert es ewig, und auch dann ist man nicht fertig.
In der Tat, es ist x0 = 1 + 0.9 · 10−29 , und wenn man nicht mit einer dezimal dreißigstelligen Mantisse rechnet
- was kaum vorkommt - so wird dieser Wert zu exakt 1 gerundet. Folglich ist x0 = a0 , und man hat nicht
nur einen sehr kleinen Schritt gemacht, sondern überhaupt keinen!
Erkenntnis: Es sind triviale Situationen denkbar, in denen die Regula falsi die Nullstelle finden müßte, es
aber nicht tut.
Fast alle numerischen Verfahren lassen sich austricksen; das Finden dieser Achillesfersen ist wichtig, um die
Verfahren in der Anwendung sicher zu machen. Zu den Ausnahmen aus dieser Regel gehört die im vorigen
Punkt betrachtete Methode der Intervallhalbierung.
Ein Mensch wird bei Handrechnung nicht den Unfug machen, die obige Aufgabe in dieser Weise zu rechnen;
was kann man einem Computer mit auf den Weg geben?
Angenommen, man hat eine im Prinzip gutartige Aufgabe - wie f (x) = x30 − 2 = 0 - und eine Einschließung
der Nullstelle bei Beginn der Rechnung.
Zuerst werden f (a0 ) und f (b0 ) berechnet. Liegen diese beiden Werte um Zehnerpotenzen auseinander,6 so
macht man einen Schritt mit der Intervallhalbierung; danach wird dieser Test wiederholt.
6 Sei
A = f (a0 ) und B = f (b0 ), so kann das durch die folgenden beiden Tests geschehen:
if A ∗ B = 0 then haben wir eine Nullstelle...;
if abs(A/B) + abs(B/A) > 20 then ...
32
Im geschilderten dramatischen Beispiel ist f (1) = −1 und f (10) = 1030 − 1. (in Wirklichkeit steht in der
Maschine natürlich nur 1030 , und auch das nur, wenn sie wirklich dezimal rechnen würde. - Ein realer, im
Dualsystem arbeitender Computer kann allerdings auch 1030 nicht exakt darstellen, zumindest nicht bei den
üblichen Mantissenlängen.)
Die Intervallhalbierung bringt uns auf das Paar 1 und 5.5, zum letzten Argument gehört der Funktionswert
1.625 · 1022 .
Es wird also nochmals halbiert, wir erhalten 3.25 und f (3.25) = 2.272 · 1015 . Eine erneute Halbierung liefert
2.125 mit f (2.125) = 6.619 · 109 , die Fortsetzung führt zu 1.5625 und f (1.5625) = 652 538.5 . . .. Nach zwei
weiteren Halbierungsschritten kann man getrost die Regula falsi starten.
Man sieht also, daß man in der Praxis oft nicht mit einem, in Reinkultur genutzten, Verfahren hinkommt,
vielmehr sind Hybride mit anderen Methoden notwendig.
Und die primitiven Verfahren haben eine Daseinsberechtigung, da sie auch im schwierigen Gelände arbeiten.
Werden Hochleistungsrassen überzüchtet, so verlieren sie Widerstandskraft. Es ist üblich, zur Stabilisation
der Rasse von Zeit zu Zeit wieder Wildlinge einzukreuzen, deren Erhalt im Genfond unbedingt erforderlich
ist.
4. Bisweilen kann die Funktion f (x) nur relativ ungenau berechnet werden. Beispielsweise könnte es sich
um eine recht langsam konvergierende Fourierreihe handeln, die man an irgendeiner Stelle abbricht, wobei
man einen ziemlich großen Fehler in Kauf nimmt.
Dann ist die Regula falsi problematisch in dem folgenden Sinne:
Im Nenner steht die Differenz f (bk ) − f (ak ), hier sind beide Werte um irgendwelche Fehler εk und δk verfälscht, so daß dort in Wirklichkeit (f (bk ) + εk ) − (f (ak ) + δk ) = (f (bk ) − f (ak )) + (εk − δk ) steht.
Man nähert sich der Nullstelle; die erste Differenz soll also klein werden (betragsmäßig), die zweite muß eine
gewisse Schranke nicht unterschreiten.
Irgenwann wird also der nächste Wert wesentlich durch die Rechenfehler bestimmt, und das ist sicher nicht
gut.
Als Ausweg bietet sich an, in jedem Schritt den Quotienten Qk = (bk − ak )/(f (bk ) − f (ak )) explizit zu
berechnen. Er müste sich im Laufe der Rechnung halbwegs stabilisieren; wird er aber irgendwann wieder
unruhig, so verzichtet man auf die neuen Werte und nimmt den letzten ordentlichen für alle zukünftigen
Schritte.
Im Falle einer nur genähert berechenbaren Funktion f (x) kann natürlich auch die Nullstelle nur genähert
berechnet werden; das Verfahren soll also nur bis zu einer gewissen Genauigkeit getrieben werden.
Übrigens ist diese Vorgehensweise auch dann anwendbar, wenn man keine Lust hat, diesen Quotienten stets
aufs Neue zu berechnen - irgenwann hört man auf und arbeitet mit dem letzten Wert weiter. - So entsteht die
vereinfachte Regula falsi; sie ist nur noch linear konvergent, aber praktisch kaum schlechter als die Rechnung
nach der ursprünglichen Vorschrift.
√
Beispiel: Es soll 2 als Lösung der Gleichung f (x) = x2 − 2 = 0 berechnet werden.
Sei a0 = 1 und b0 = 2; die Rechnung nach der klassischen Variante der Regula falsi ist in der folgenden
Tabelle angegeben, wobei immer die letzten beiden Näherungswerte xk−2 und xk−1 als ak und bk benutzt
wurden:
k
ak
bk
f (ak )
f (bk )
bk − ak
f (bk ) − f (ak )
Qk
xk
0
1
2
3
4
5
6
1.000000
1.000000
1.428571
1.413793
1.414211
1.414214
1.414214
2.000000
1.333333
1.333333
1.428571
1.413793
1.414211
1.414214
-1.000000
-1.000000
0.040816
-0.001189
-0.000006
0.000000
-0.000000
2.000000
-0.222222
-0.222222
0.040816
-0.001189
-0.000006
0.000000
1.000000
0.333333
-0.095238
0.014778
-0.000418
-0.000002
0.000000
3.000000
0.777778
-0.263039
0.042005
-0.001183
-0.000006
0.000000
0.333333
0.428571
0.362069
0.351820
0.353606
0.353554
0.353553
1.333333333333
1.428571428571
1.413793103448
1.414211438475
1.414213562689
1.414213562373
1.414213562373
Der letzte Schritt diente nur dazu, das Resultat zu bestätigen.
Man erkennt die Stabilisierung der Werte Qk .
Was erhält man nun, wenn man Q2 fixiert und damit weiterrechnet? Angenehm ist dabei, daß man nun nur
noch einen Wert xk betrachten muß statt der zwei Werte ak und bk .
33
k
ak
bk
f (ak )
f (bk )
bk − ak
f (bk ) − f (ak )
Qk
xk
0
1
2
3
4
5
6
7
8
1.000000
1.000000
1.428571
1.413793
1.414224
1.414213
1.414214
1.414214
1.414214
2.000000
1.333333
1.333333
-
-1.000000
-1.000000
0.040816
-0.001189
0.000028
-0.000001
0.000000
0.000000
0.000000
2.000000
-0.222222
-0.222222
-
1.000000
0.333333
-0.095238
-
3.000000
0.777778
-0.263039
-
0.333333
0.428571
0.362069
-
1.333333333333
1.428571428571
1.413793103448
1.414223625405
1.414213319961
1.414213568212
1.414213562232
1.414213562376
1.414213562373
Zum Erreichen derselben Genauigkeit waren jetzt zwei Schritte mehr erforderlich.
Diese Vorgehensweise kann man allerdings auch interpretieren als Newton-Verfahren, kombiniert mit numerischer Differentation, s. d..
Man könnte auf die Idee kommen, das Verfahren zu verbessern, indem man den Grundgedanken noch einmal
aufgreift: Die Funktion f (x) der Nullstellenaufgabe wird durch eine einfachere Funktion ersetzt.
Die gewählte lineare Funktion ϕ(x) ist eine solche einfache Funktion; einfach in dem Sinne, daß man ihre
Nullstelle problemlos berechnen kann. - Die Nullstelle einer quadratischen Funktion ist aber auch leicht zu
finden, und damit entsteht das folgende Verfahren: Mit Hilfe von drei Wertepaaren (eine quadratische Funktion hat drei Koeffizienten) bestimmt man eine solche Funktion ϕ(x) und nimmt deren Nullstelle x0 als erste
Näherung usw..
Die Rechenvorschrift soll nicht hergeleitet werden; man vergleiche mit dem Punkt ’Interpolation’.
Man gewinnt so eine Methode, die wesentlich effektiver ist als die Regula falsi, allerdings ist jeder ihrer
Schritte aufwendiger als bei dieser, und man hat noch ein Problem: Man muß unter den beiden Nullstellen
des Hilfsproblems die richtige aussuchen. Und was macht man, wenn die quadratische Gleichung keine reellen
Lösungen hat?
Dieses Verfahren ist m. E. sinnvoll, wenn man eine gute Aufgabe hat: einfache Nullstelle, keine weiteren
Lösungen in unmittelbarer Nähe, glatte Funktion, ..., und obendrein über recht genaue Informationen zur
Lage der Nullstelle verfügt; dann kann man so ggfs. durch einen einzigen Schritt eine ausreichend gute Näherungslösung gewinnen.
Beispiel: Es soll ein Anfangswertproblem F (x, y, y 0 ) = 0, y(x0 ) = y0 numerisch gelöst werden, d. h. es sollen
in gewissen Werten x1 , x2 , . . . Näherungswerte y1 , y2 , . . . zu den exakten Werten y(x1 ), y(x2 ), . . . ermittelt
werden.
Die gängigen Verfahren hierzu (vgl. Kapitel ’Differentialgleichungen’) gehen von expliziten Differentialgleichungen y 0 = f (x, y) aus; um sie anzuwenden ist also in jedem Schritt die Gleichung F (x, y, y 0 ) = 0 bezüglich
y 0 zu lösen; x und y können als gegegeben angesehen werden.
0
Beim k-ten Schritt dieser Rechnung hat man gewisse Vorgängerwerte; beispielsweise war yk−3
= 5.82256,
0
0
0
0
0
0
yk−2
= 5.64562 und yk−1
= 5.82256. Die Differenzen yk−3
− yk−2
= 0.17694 und yk−2
− yk−1
= 0.16501
nahmen um 0.01193 ab; diese Abnahme erneut unterstellt würde 0.16501 − 0.01193 = 0.15308 ergeben.
0
0
Man vermutet also yk−1
− yk0 = 0.15308, also yk0 = −yk−1
− 0.15308 = 5.48061 − 0.15308 = 5.32753.
0
Das ist nicht der wahre Wert von yk , aber eine vermutlich sehr ordentliche Startnäherung, von der man
ausgehen kann, um diesen Wert zu verbessern.
Das Beispiel sollte zeigen, daß Aufgaben, in denen man recht gute Vorinformationen besitzt, durchaus vorkommen; in diesem Falle wird diese Nullstellenaufgabe in jedem Rechendschritt des übergeordneten Verfahrens zur Behandlung des Anfangswertproblems gelöst, also sicher viele Male. Somit lohnt sich hier ein
effektiver Algorithmus.
4.1.4
Das Newton-Verfahren
Das Newton-Verfahren basiert auf derselben Grundidee wie die Regula falsi: Die schwierige Funktion f (x)
wird durch eine Folge einfacher Funktionen ϕk (x) ersetzt, deren Nullstellen xk gegen die Lösung x∗ der
Gleichung f (x) = 0 konvergieren.
Es handelt sich dabei wiederum um lineare Funktionen. Allerdings sind sie nicht durch die Interpolationsbedingung ϕ(ak ) = f (ak ) und ϕ(bk ) = f (bk ) bestimmt, sondern sie sind jeweils das lineare Taylor-Polynom
34
zu f (x) an der Stelle xk . Dieses wird gleich Null gesetzt und ergibt den nächsten Wert xk+1 :
ϕ(x) = f (xk ) + f 0 (xk ) · (x − xk ) = 0
=⇒
xk+1 = xk −
f (xk )
.
f 0 (xk )
............................
...........................
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
f (x)
.... .... ......................
.................................
.
.
.
.
.
.
.
.
.
.
.
...
...................
..........
.
.
.
.
.
.
.
.
.
.
.
.
..
............
.........s...
.
.
.
.
.
.
.
.
.
.
.........
..........
xk+1 . ..........................
. .
.......................................................................................................................|..........................................................................................|.............................................................................................................................................................................................
.
.
.
.
.
.
. ..... ......... ∗
xk
..... ..................... x
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
ϕ(x) ..... .... .. .............
.
. .....
........
..... ....
........
.
.
.
.
.
.
.
.
.
.
.
.
.
.
....
........
........
.
.
.
.
.
.
.
..
........
........
.
.
.
.
.
...
Der Graph von ϕ(x) ist die Tangente an die Kurve von f (x) in x = xk ; hieraus ist der Name Tangentenverfahren abgeleitet, der auch für diese Methode benutzt wird.
Es gibt zwei wesentliche Unterschiede zur Regula falsi:
- Man hat es jeweils nur mit einem Punkt zu tun.
- Neben f (x) braucht man auch den Wert seiner Ableitung f 0 (x).
Berechnen wir die Konvergenzordnung α dieses Verfahrens. Dabei wird vorausgesetzt, daß f 0 (x∗ ) 6= 0 ist;
damit ist in genügender Nähe von x∗ - nur dort ist diese Überlegung sinnvoll - auch f 0 (xk ) 6= 0. Die Funktion
und ihre Ableitung werden an der Stelle x = x∗ in Taylor-Ausdrücke entwickelt; es sei weiterhin vorausgesetzt, daß die Funktion ’gutartig’ und diese Entwicklung folglich möglich sei. Man beachte, daß f (x∗ ) = 0
ist.
1 00 ∗
∗
0 ∗
∗
∗ 2
f
(x
)
+
f
(x
)(x
−
x
)
+
f
(x
)(x
−
x
)
+
.
.
.
k
k
f (xk )
∗
∗
∗
2
− x = (xk − x ) −
|xk+1 −x | = xk − 0
=
f (xk )
f 0 (x∗ ) + f 00 (x∗ )(xk − x∗ ) + . . .
1 00 ∗
∗
0
∗
00
∗
∗
0
∗
∗
∗
2
(xk − x ) [f (x ) + f (x )(xk − x ) + . . .] − f (x )(xk − x ) + f (x )(xk − x ) + . . . 2
=
= 0 ∗
00 ∗
∗
f (x ) + f (x )(xk − x ) + . . .
f 00 (x∗ ) + . . .
f 00 (x∗ )(xk − x∗ )2 + . . .
= (xk − x∗ )2 .
= 0 ∗
00 ∗
∗
0 ∗
00 ∗
∗
2 [f (x ) + f (x )(xk − x ) + . . .]
2 [f (x ) + f (x )(xk − x ) + . . .] Der Ausdruck mit den Betragsstrichen konvergiert gegen
00 ∗ f (x ) 2f 0 (x∗ ) ,
und da die alte Abweichung xk − x∗ als Quadrat dabeisteht ist das Verfahren also quadratisch konvergent.7
√
Beispiel: Berechnung der Quadratwurzel a, a > 0.
Dieses Verfahren ist die universelle Vorgehensweise, die - mit Modifikationen - überall angewandt wird.
Es handelt sich um die Suche nach der positiven Lösung der Gleichung f (x) = x2 − a = 0. Die Iterationsvorschrift ist
x2k − a
1
a
xk+1 = xk −
=
xk +
.
2xk
2
xk
7 Im allgemeinen Fall; bei f 00 (x∗ ) = 0 ist die Konvergenz noch schneller. Aber in diesem Fall hat die Funktion in der Nullstelle
keine Krümmung und läßt sich also sehr gut durch eine lineare Funktion annähern.
Falls allerdings andererseits f 0 (x∗ ) = 0 gilt (Fall der mehrfachen Nullstelle), so ist die Konvergenz schlechter als quadratisch.
35
Die Multiplikation mit 0.5 kann natürlich am schnellsten durch Subtraktion von 1 aus dem Exponenten der
Gleitkommazahl realisiert werden, falls man Zugriff auf deren
Struktur hat. √
√
Der neue
Die Formel kann plausibel interpretiert werden. Sei xk < a, dann ist a/xk > a, und umgekehrt.
√
Näherungswert xk+1 ist das arithmetische Mittel von x√
a als diese.
k und a/xk , liegt also näher an
Die Funktion der Methode soll an der Berechnung von 2 demonstriert werden; Startwert sei x0 = 1. Dann
ist
1 1+2
1 1.5 + 2
x1 =
= 1.5 , x2 =
= 1.41666 . . . ,
2
1
2
1.5
und die weitere Rechnung ist in der folgenden Tabelle dargestellt:
k
xk
0
1
2
3
4
5
6
7
8
1.0000000000000000000000000000000000000000000000000000000000000000000000000000000000000
1.5000000000000000000000000000000000000000000000000000000000000000000000000000000000000
1.4166666666666666666666666666666666666666666666666666666666666666666666666666666666667
1.4142156862745098039215686274509803921568627450980392156862745098039215686274509803921
1.4142135623746899106262955788901349101165596221157440445849050192000543718353892683590
1.4142135623730950488016896235025302436149819257761974284982894986231958242289236217849
1.4142135623730950488016887242096980785696718753772340015610131331132652556303399785318
1.41421356237309504880168872420969807856967187537694807317667973799073247846210704
1.4142135623730950488016887242096980785696718753769480731766797379907324784621070388504
Die Stellen, die sich nicht mehr ändern, sind fett gedruckt (und der siebente Wert ist aus Platzgründen etwas
gekürzt). Man erkennt, daß sich die Anzahl der zutreffenden Kommastellen pro Schritt etwa verdoppelt. Der
achte Schritt ist nur noch die Bestätigung des vorigen Wertes.
Das Newton-Verfahren ist das üblicherweise angewandte Verfahren zur Lösung formelmäßig gegebener Gleichungen. Seine Vorteile sind:
1. Einfache rekursive Vorschrift, die aus einem xk seinen Nachfolger xk+1 berechnet.
2. Ist man erst einmal in der Nähe der Nullstelle, so konvergiert das Verfahren sehr schnell.
Natürlich gibt es auch Probleme und Nachteile:
1. Man kann keine Einschließung von Nullstellen mehr ausnutzen.
2. Man braucht einen Startwert; dessen Beschaffung liegt außerhalb der Theorie des Verfahrens. Kritisch
ist es bisweilen, wenn er automatisch gefunden werden muß. Eine einfache Methode besteht ggfs. darin, in
einem gewissen Abschnitt [a, b], in dem eine Nullstelle liegen muß - wenigstens diese Information braucht
man! - einen Startwert x0 ’auszuwürfeln’. Dazu wählt man x0 = a + (b − a)∗ RANDOM; der letzte Ausdruck
bezeichnet eine mit dem Zufallszahlengenerator erzeugte, in (0,1) gleichverteilte Zufallszahl. Danach startet
man das Newton-Verfahren; wenn es nach ca. 15 Schritten keine Nullstelle liefert oder schon vorher aus dem
Abschnitt [a, b] herausläuft, so wird es abgebrochen und ein neuer Startwert erwürfelt.
Wenn auch das nach vielleicht 100 Versuchen nichts erbrachte sollte sich der Computer (das Programm) unter Ausgabe signifikanter Probleminformation an seinen menschlichen Herrn wenden. Vermutlich wird dieser
feststellen, daß es in [a, b] doch keine Nullstelle gibt.
3. Es ist nicht garantiert, daß man, von x0 ausgehend, zur naheliegendsten Nullstelle kommt:
...
..
...
...
...
.
.
...
...
..
..................
.
.
.
.
.
.
...
.....
.
....
...
....
..
....
.
.
.
...
.
.
.
...
.
...
...
...
...
...
...
...
.
.
.
...
...
..
..
...
...
...
..
.
...
.
.
.
.
...
...
.
...
....
...
...
...
.
....
.
.
.
.
.
x0
..
.
.
...........................................................................................................|............................................................................................................................................................................................................................................................................|................................
.
.
.
.
.
.
....
.
.
.
.
.
.
.
...
.
x1
.....
.... ..... .... ..... ..... ..... ..... ... .......
...
.....
.
.........
....
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.....
.
.
.
.....
......
..... ..... ..... ....
....
....
.....
..... ..... ..... .... ..... ..... .... .....
........
.....
......
.
.
.
.
.
.
.
.
.
.
.
.
.
................................
......................s.............. ..... .....
.
..... ..... .... .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.....
Der Startwert liegt zwischen den beiden linken Nullstellen; das Verfahren würde aber zu der ganz rechten
konvergieren.
36
Einige weitere Bemerkungen:
Bei Handrechnung empfiehlt es sich, die Werte zum besseren Vergleich in einer Tabelle anzuordnen.
Als Beispiel sei die Gleichung ex = 7 + 5x mit dem Startwert x0 = 3 behandelt. Zunächst wird die Gleichung in eine Nullstellenaufgabe überführt; dabei ist es offenbar egal, ob man von ex − 7 − 5x = 0 oder
7 + 5x − ex = 0 ausgeht; nehmen wir die erste Form: f (x) = ex − 7 − 5x = 0, es folgt f 0 (x) = ex − 5.
k
xk
f (xk )
f 0 (xk )
f (xk )/f 0 (xk )
1
2
3
4
3
3.126 907
3.117 425
3.117 367
-1.914 463
0.168 808
0.001 022
0.000 000
15.085 536
17.803 343
17.588 148
-
-0.126 907
0.009 482
0.000 058
-
Bei einer korrekten Rechnung müssen die Funktionswerte - dritte Spalte - und entsprechend die Korrekturen
(letzte Spalte) ziemlich schnell gegen Null gehen, zumindest dann, wenn man in der Nähe der Nullstelle ist.
Die Werte der ersten Ableitung dagegen werden konstant.
Das ist eine nützliche Kontrolle.
Darüber hinaus kann man sich bei Betrachtung der Werte die Frage stellen, ob man irgendwann die sich nur
noch wenig ändernden Ableitungswerte tatsächlich in jedem Schritt neu berechnen muß. - Sobald sie einigermaßen genau sind kann man darauf verzichten; dies lohnt sich besonders dann, wenn die Berechnung der
Ableitung recht aufwendig ist. In der obigen Tabelle hätte man problemlos statt f 0 (x3 ) die letzte Korrektur
mit f 0 (x2 ) machen können.
Diese Vorgehensweise nennt man das vereinfachte Newton-Verfahren.
Nun zur Rolle der zweiten Ableitung:
Betrachten wir die beiden Funktionen ex − 2 und x2 − 1:
...
.
....
..
.. x
...
..
.
.
.
.
.
.
e
−
2
...
.
..
....
..
...
..
.
.
.
.
.
.
...
.. ...
....
..
....
....
...
..
....
.
....
.
..
.
..
....
....
.
....
.
....
....
..
....
.
....
.
.
..
..
....
....
....
.
.
.
..
..
....
....
....
.
.
.
.
. 2
..
....
....
....
.
.
.
.
.
.
....
....
....
...
. x −1
.
.
.
.
.
.
....
..
.
..
....
.
.
.
e
.
.
.
.
.
.
.
.
.
....
....
... ........ ....
....
.
.
....
.
.
... ......... ....
....
....
.
....
.
.
.
.
.....
....
....
....
..... .. ...........
.
.
.
.
..... .
.
.
..
.
..
.......
.... u
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
u
.
.
.
.
.................................................................................................................................................................................................................................... .................... ..... ................................................. .....................................................................................................
.
.
.
... .....
.
.
.
.
.
.
.
.
.
..
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
..... ..... .....
........ .................................................................................................
.........................................................................................e
.....
.
.
.
..
..
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
..
..................
...e
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
x
x2
x1
.
.
.
.
.
.
.
.
.
.
.
.
0
......................................................
.
Die beiden Nullstellen sind als schwarze Kreise markiert.
Beide Funktionen haben die wesentliche Eigenschaft, daß ihre zweite Ableitung überall positiv ist: ex > 0
und 2 > 0; geometrisch drückt sich das in dem Umstand aus, daß die Kurven ’nach oben’ gekrümmt sind.
Eine auf der gesamten Achse definierte und dort überall zweimal stetig differenzierbare Funktion f (x) mit
f 00 (x) > 0 ∀x hat dort entweder keine Nullstelle (x2 + 1), eine einfache oder doppelte Nullstelle (ex − 2 oder
x2 ) oder zwei einfache Nullstellen (x2 − 1).
Startet man das Newton-Verfahren mit einem Startwert x0 , der größer als die einzige Nullstelle oder aber die
größere der beiden Nullstellen ist - also ziemlich weit rechts - so wird die erzeugte Folge xk streng monoton
abnehmend in diese Nullstelle laufen.
Liegt dagegen x0 links der Nullstelle oder etwas links der größeren, so wird x1 oberhalb jener liegen, worauf
die monotone Abnahme einsetzt.
Dieser Fall ist an x2 − 1 mit x0 bis x2 angedeutet.
Bei dieser Funktion erkennt man auch, daß bei einem Start links der kleineren Nullstelle eine monoton
wachsende Folge von xk entsteht, und daß man bei x0 etwas oberhalb der kleineren zunächst unter diese
katapultiert wird, usw..
Bei ex − 2 geht es spätestens ab x1 nur noch abwärts, egal, wo man startete.
Ist die zweite Ableitung auf der gesamten Achse negativ, also wiederum vorzeichenkonstant, so sind die Verhältnisse analog; man veranschauliche sich die Verhältnisse an einer Zeichnung!
37
Üblicherweise hat eine Funktion f (x) in einer gewissen Umgebung der Nullstelle x∗ keine Nullstelle ihrer
zweiten Ableitung, also dort Vorzeichenkonstanz, so daß sich ein entsprechendes Verhalten zumindest lokal
einstellt.
Anwendungsbeispiel: Man hat ein Polynom Pn (x) = an xn + . . . + a1 x + a0 , von dem man weiß, daß es genau
n reelle Nullstellen x∗i haben muß (nicht unbedingt verschiedene; aber mehrfache Nullstellen sind immer
etwas problematischer). Denken wir sie der Größe nach sortiert: x∗1 ≤ x∗2 ≤ . . . ≤ x∗n .
Es gilt die Produktdarstellung dieses Polynoms (die man allerdings noch nicht kennt):
Pn (x) = an ·
n
Y
(x − x∗i ) .
i=1
Die zweite Ableitung ist
Pn00 (x) = an ·
n X Y
X
(x − x∗i ) .
k=1 l6=k i6=k,l
x∗n
Sie hat bei x >
das (konstante) Vorzeichen von an , und bei x < x∗1 das von (−1)n an .
Schlußfolgerung: Startet man mit einem großen positiven Startwert x0 das Newton-Verfahren, so gelangt
man mit fallenden Werten in die größte Nullstelle x∗n .
Beginnt man dagegen mit einem betragsgroßen negativen x0 , so läuft man wachsend in die kleinste (nicht
unbedingt betragskleinste!) Nullstelle x∗1 .
Unterwegs kann es keinen Ärger der Form f 0 (xk ) = 0 oder nahe Null geben! (Das gilt natürlich nur, wenn
alle Nullstellen als reell vorausgesetzt werden können.)
Beispiel: P3 (x) = (x + 1)(x + 2)(x + 3) = x3 + 6x2 + 11x + 6 - drei einfache negative Nullstellen.
Gestartet wird mit x0 = 100 (eigentlich unsinnig groß):
k
xk
P3 (xk )
P30 (xk )
Korrektur
0
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
100.000000
66.002179
43.338054
28.230272
18.160868
11.451610
6.984291
4.014364
2.046868
0.753965
-0.079622
-0.592531
-0.871857
-0.981026
-0.999483
-1.000000
1061106.000000
314394.221980
93148.805988
27596.287300
8174.437624
2420.560974
716.205015
211.540692
62.229277
18.133002
5.161692
1.380682
0.307651
0.039034
0.001035
0.000001
31211.000000
13871.888932
6165.617399
2740.607949
1218.381797
541.837449
241.152440
107.517732
48.131432
21.752974
10.063556
4.942904
2.818118
2.114922
2.003103
2.000002
-33.997821
-22.664125
-15.107782
-10.069404
-6.709258
-4.467319
-2.969926
-1.967496
-1.292903
-0.833587
-0.512909
-0.279326
-0.109169
-0.018457
-0.000517
-0.000000
Man erkennt, daß das Verfahren anfangs einfach mit großen Schritten zur weit entfernten Nullstelle marschiert.
Wenn man die größte Nullstelle gefunden hat, so kann man den Faktor (x − x∗n ) aus dem Polynom herausdividieren. Das Restpolynom hat immer noch die Eigenschaft, nur reelle Nullstellen zu besitzen, und man
kann genau diesen Prozeß wiederholen: Man startet rechts der größten Nullstelle des Restpolynoms (oder
zumindest nicht links von ihr) und läuft in diese. Dabei braucht man jetzt keinen großen Wert aus der Luft
nehmen, sondern kann mit dem soeben gefundenen x∗n beginnen - das muß in jedem Fall gehen.8
Abschließend eine Bemerkung zur Weiterentwicklung des Newton-Verfahrens zu einem kubisch konvergenten
Verfahren:
Anstelle des linearem Taylor-Polynoms im Punkt xk verwenden wir ein quadratisches, und nutzen aus, daß
8 Das gilt in der Theorie.
Im Falle einer mehrfachen größten Nullstelle kann es Probleme durch Rundungs- oder Abbruchfehler geben.
38
sich quadratische Gleichungen ebenfalls gut lösen lassen:
f (x) = f (xk ) + f 0 (xk ) · (x − xk ) +
f 00 (xk )
(x − xk )2 + . . .
2
=⇒
f 00 (xk )
f 00 (xk )
(xk+1 − xk )2 = f (xk ) + f 0 (xk ) · ∆xk +
(∆xk )2
2
2
Setzen wir f 00 (xk ) 6= 0 voraus und ermitteln wir ∆xk aus dieser Gleichung:
0 = f (xk ) + f 0 (xk ) · (xk+1 − xk ) +
(∆xk )2 +
∆xk
f 0 (xk )
= − 00
±
f (xk )
s
f 0 (xk )
f 00 (xk )
2f (xk )
2f 0 (xk )
∆xk + 00
= 0
f 00 (xk )
f (xk )
2
=⇒
s
"
#
f 0 (xk )
2f (xk )
2f (xk ) · f 00 (xk )
= − 00
− 00
1± 1−
.
f (xk )
f (xk )
(f 0 (xk ))2
Der Bruch unter der letzten Wurzel müßte nahe Null liegen (wegen f (xk )), und dasselbe muß für die Korrektur
∆xk gelten; folglich ist in der eckigen Klammer das Minuszeichen zu nehmen.
Für Werte x nahe Null gilt als Näherung aus der Taylor-Formel
√
1+x
=
1+
x x2
−
+ ...
2
8
recht genau der quadratische Teil dieser Formel, und diesen wenden wir auf die obige Formel an, um die
lästige Quadratwurzel zu eliminieren:
s
"
#
f 0 (xk )
2f (xk ) · f 00 (xk )
∆xk = − 00
1− 1−
≈
f (xk )
(f 0 (xk ))2
"
f 0 (xk )
1−
≈ − 00
f (xk )
f (xk ) · f 00 (xk ) 1
1−
−
2
(f 0 (xk ))2
2f (xk ) · f 00 (xk )
(f 0 (xk ))2
2 ! #
.
Es folgt
xk+1 = xk + ∆xk = xk −
[f (xk )]2 · f 00 (xk )
f (xk )
−
.
0
f (xk )
2[f 0 (xk )]3
Der erste Term nach xk ist gerade die Newton-Korrektur.
Es fällt angenehm auf, daß diese Endformel nicht mehr von der Bedingung f 00 (xk ) 6= 0 der Herleitung
Gebrauch macht; sie demonstriert sogar sehr schön, daß f 00 (xk ) = 0 ein günstiger Fall ist.
√
Beispiel: Quadratwurzel a, a > 0, durch Lösung von f (x) = x2 − a:
f (x) = x2 − a, f 0 (x) = 2x, f 00 (x) = 2 =⇒ xk+1 = xk −
x2k − a (x2k − a)2 · a
3xk
3a
a2
=
+
.
−
−
2xk
8
4xk
16x3
8x3k
Diese Formel ist wesentlich komplizierter als die auf Seite 36 angegebene, aber dafür auch deutlich schneller:
k
xk
0
1
2
3
4
5
1.00000000000000000000000000000000000000000000000000000000000
1.37500000000000000000000000000000000000000000000000000000000
1.41419750187828700225394440270473328324567993989481592787378
1.41421356237309401311625101763271393310729238185591552830762
1.41421356237309504880168872420969807856967187509921754613921
1.41421356237309504880168872420969807856967187537694807317668
Im Unterschied zum Newton-Verfahren verdreifacht sich die Anzahl zutreffender Kommastellen (fett gedruckt) in der Nähe der Nullstelle pro Schritt (in etwa).
Herleitung und Programmierung der Rechenformel ist hier merklich aufwendiger als beim ’einfachen’ NewtonVerfahren, so daß sich diese Formel nur rentiert, wenn es auf höchste Effektivität ankommt.
Abschließend sei auf Beispiel 4 der Beispielsammlung verwiesen, in dem eine einfach aussehende Gleichung
mit vielen Nullstellen behandelt wird. Dort ist auch beschrieben, wie man (manchmal) feststellen kann, wie
weit es bis zur nächsten Nullstelle mindestens oder höchstens ist.
39
4.1.5
Fixpunktiteration
Beispiel: Man berechne den Radius eines Ballons.
Der Ballon sei kugelförmig, mit Helium gefüllt (Auftrieb 1.1kp/m3 ), 1m2 der Hülle hat eine Masse von 95g;
die Gondel samt Last (750kp) hängt an 36 Seilen, die eine Länge gleich dem dreifachen Radius haben. Die
Masse von 1m Seil beträgt 78g.
Der Auftrieb muß gleich dem Gesamtgewicht sein, das ergibt die Gleichung (r in Meter, Gewicht in kp):
4π
· 1.1 · r3 = π · 0.095 · r2 + 36 · 3 · 0.078r + 750
3
=⇒
4.61r3 = 0.298r2 + 8.424r + 750 .
Das ist eine kubische Gleichung; zu ihrer Lösung sei ein ganz anschaulicher Weg gewählt.
p
Vernachlässigen wir zunächst das Gewicht der Hülle und der Tragseile; dann müßte r = 3 750/4.61 = 5.459
sein.
Daraus würde ein zusätzliches Gewicht
von 54.9kp resultieren, das zur Gondel hinzukommt. Um es zu tragen
p
müßte der Ballonradius auf r = 3 (750 + 54.9)/4.61 = 5.589 vergrößer werden.
Das ändert allerdings die Last von Hülle
p und Seilen; sie wächst entsprechend auf 56.4kg.
Das zwingt dazu, den Radius auf r = 3 (750 + 56.4)/4.61 = 5.593 zu erhöhen.
Die Rechnung kann nun in dieser Weise fortgesetzt werden; die letzte Korrektur betraf aber nur 4mm und
war sicher praktisch bereits unwesentlich.
Rein formal erhält man folgende Werte (stabilisierte Stellen unterstrichen):
k
rk
k
rk
0
1
2
3
4
5
0
5.459088220196206
5.589092406466883
5.592615883497953
5.592711641908623
5.592714244551719
6
7
8
9
10
11
5.592714315289785
5.592714317212398
5.592714317264653
5.592714317266073
5.592714317266112
5.592714317266113
Diese plausible und praxisnahe Rechenweise soll nun mit einer ordentlichen Theorie unterlegt werden.
Was ist eigentlich gemacht worden? Die Gleichung 4.61r3 − 0.298r2 − 8.424r − 750 = 0 läßt sich zwar nach
r auflösen, aber diese Formel ist recht umständlich. Statt dessen wurde die Gleichung nur nach dem ersten
der drei in ihr vorkommenden r-Werte aufgelöst:
s
2
3 0.298r + 8.424r + 750
4.61r3 − 0.298r2 − 8.424r − 750 = 0 =⇒ r =
.
4.61
Für jemand, der in der Schule gelernt hat, daß man eine Bestimmungsgleichung nach der Unbekannten
auflösen soll, und daß dabei selbstverständlich jedes Vorkommen der Unbekannten berücksichtigt werden
muß, ist der Gedanke, nur nach einem Teil dieses Vorkommens aufzulösen, sicher zumindest neu, wenn nicht
schlimmer.
Auf den ersten Blick ist eine solche Vorgehensweise tatsächlich sinnlos: Löst man f (x; a) = 0 auf (a steht für
den oder die in der Gleichung enthaltenen Parameter), so resultiert ein Formelausdruck x = ϕ(a), den man
ausrechenen muß, und dann hat man die Antwort.
Gelangt man dagegen nur zu einer Formel der Form x = ϕ(x, a), so ist die Kenntnis der Antwort Voraussetzung für die Antwort, der Kreis schließt sich und läßt uns im Regen stehen.
Falls nun allerdings diese Funktion ϕ(x, a) nur schwach von x abhängt, sich bei Änderung von x also selbst
relativ wenig ändert, so kann man das x grob schätzen und in diese Funktion einsetzen. Damit berechnet
sich ein Wert, der zwar vermutlich nicht stimmt, da ein Teil seiner Daten zweifelhaft ist, aber er ist immerhin
berechnet und nicht nur geschätzt.
Mit diesem x-Wert, der sicher genauer ist als die anfängliche Schätzung, kann nun erneut in ϕ(x, a) eingegangen werden, und man gewinnt einen noch besseren Wert, usw..
Das ist die Grundidee der Fixpunktiteration.
Zunächst: Ein Wert x∗ ∈ D(ϕ) heißt Fixpunkt der Funktion ϕ(x), wenn ϕ(x∗ ) = x∗ gilt. - Normalerweise
unterscheidet sich ein Funktionswert y = f (x) vom Argument: y 6= x; hier tritt der Fall ein, daß die Funktion
ϕ(x), auf dieses x∗ angewandt, denselben Wert liefert - als hätte sie nichts gemacht. Das x∗ ist also fest (oder
fix). Übrigens schneidet die Kurve der Funktion ϕ(x) in jedem Fixpunkt die Gerade y = x.
Die Fixpunktiteration beruht auf zwei Begriffen: Selbstabbildung und Kontraktion.
40
Eine auf dem Abschnitt [a, b] definierte Funktion ϕ(x) heißt (dort) Selbstabbildung, wenn jeder ihrer Funktionswerte wiederum in [a, b] liegt: ϕ(x) ∈ [a, b] ∀x ∈ [a, b].
Eine auf dem Abschnitt [a, b] definierte Funktion ϕ(x) heißt (dort) kontrahierend, wenn eine positive Zahl
q < 1 existiert, so daß: |ϕ(x1 ) − ϕ(x2 )| ≤ q|x1 − x2 | ∀x1 , x2 ∈ [a, b] gilt. Der Abstand zwischen zwei Funktionswerten ist also stets kleiner als der zwischen den beiden Argumenten, und zwar mindestens um einen
festen Prozentsatz. Die Forderung ’einfach kleiner’ reicht nicht.9
Die letzte Bedingung ist sicher erfüllt, wenn ϕ(x) auf [a, b] eine stetige Ableitung besitzt, deren Betrag nie
größer als q < 1 wird: |f 0 (x)| ≤ q < 1 (folgt unmittelbar aus dem Mittelwertsatz).
In der x − y-Ebene ist der Bereich a ≤ x ≤ b, a ≤ y ≤ b ein Quadrat; die Gerade y = x ist eine seiner
Diagonalen. Die Bedingung der Selbstabbildung fordert, daß die Kurve der Funktion in diesem Quadrat
verlaufe. Damit muß sie diese Diagonale mindestens einmal schneiden (linkes Bild):
...
....
....
.......
....
....
..........
.
.
.
.
.
.. .... ..
.
.
...
...
..
b ........ ..... ....... ..... ..... ..... ..... ..... ..... ..... ..... ..... ..... ..... ..... ..... ..... ..... ..... ...............
b ....... ..... ....... ..... ..... ..... ..... ..... ..... ..... ..... ..... ..... ..... ..... ..... ..... ..... ..... ...............
.
.
.
.
.
.
..
.
.
..
.
..
.... .
.... .
...
...
...
.... ...
.... ...
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
..
.
.
.......e......
.
...
...
...
...
..
....
.. ....................
...
...
...
...
...
...
...
....
....
.
.
.
.
...
.. .
.
.
...
...
...
.
.
.
.
.
.
.
...
.
..
.
.
..
.
.
........................................ ...
..
..
................e
........
...
...
...
. .......
...
.
.
.
.
.
.
.
.
.
. ......
..
..
.... ......
.
.
.
.
ϕ(x)
.
.
.
...
.
.
.
.
................................................................................. .....
.
.
..
...
...
.
........
...
...
...
...
.
.
.
...
.
.
.
ϕ(x)
...
...
....e
.
.
.
.
.
.
..
.
.
.
.
...
..............................
.
.
.
.
.
..
..............
....
........
...
.
.
.
..
..
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.............. ... .....
...
...
...
.....e
.
.
.
.
.
.
.
.
.
.
.
.
..
.
.
.
..
.
..
...
....
....
...
...
...
...
.
.
.
.
.
.
.
.
..
..
...
...
.
.
.
.
.
.
.
...
...
.
...
.
.
.
.
..
..
...
...
...
...
...
....
....
...
.
.
.
.
.
.
.
...
..
...
...
.
.
.
..
.
.
.
.
...
.
.
.
.
. y=x
. y=x
.
.
..
...
... ........
...
... ........
...
.
.
..
..
...
..
.
.
.
.
...
... .......
...
...
.
. ....
..
.
a ....... .............. ..... ..... ..... ..... ..... ..... ..... ..... ..... ..... ..... ..... ..... ..... ..... ..... ..... ...
a ....... .............. ..... ..... ..... ..... ..... ..... ..... ..... ..... ..... ..... ..... ..... ..... ..... ..... ..... ...
.. .... ..
.. .... ..
..
..
. ....
... ...... .
..
.
.
.
.
.
.
................................................................................................................................................................................................................ .........................................................................................................................................................................................................................
.
.
.
.
a
a
b ..
b
Jeder Schnittpunkt der Kurve von ϕ(x) mit der Geraden y = x bedeutet ϕ(x) = x, ist also ein Fixpunkt.
Im linken Bild besitzt diese Funktion also drei Fixpunkte im Bereich [a, b].
Die Forderung der Kontraktion verlangt einen flachen Verlauf der Kurve von ϕ(x), und damit kann dieser
Fall nicht mehr eintreten: Wenn sich die beiden geschnitten haben, so holt ϕ(x) die Funktion y = x nicht
wieder ein. Folglich gibt es dann genau einen Fixpunkt x∗ (rechtes Bild).
Zum Finden dieses Fixpunktes kann man folgendermaßen vorgehen:
Man wählt einen beliebigen Wert x0 in [a, b] und berechnet seinen Funktionswert ϕ(x0 ), diesen setzen wir
gleich x1 und ermitteln den zugehörigen Wert ϕ(x1 ).
Diese Vorgehensweise läßt sich veranschaulichen, indem man vom Punkt (x0 , ϕ(x0 )) waagerecht bis zur Diagonalen y = x geht. Genau unter der Stelle, wo man auf sie trifft, liegt x1 (falls man über der x-Achse ist,
natürlich), und senkrecht über (oder unter) dieser Stelle liegt auf der Kurve von ϕ(x) der Funktionswert
ϕ(x1 ).
Diesen nennen wir x2 und ermitteln seinen Funktionswert: waagerecht auf y = x, hoch (oder runter) auf
ϕ(x), usw.:
9 Jede
auf [a, b] kontrahierende Funktion ist notwendigerweise auf [a, b] stetig; sie muß aber nicht differenzierbar sein.
41
.
.
....
.........
....
.
.
.
.. .... ...
.
....
..
....
.
.
.
...
....
b ........ ..... ..... ..... ...... ..... ..... ..... ..... ..... ..... ..... ..... ..... ..... ..... ..... ..... ..... ..... ..... ..... ..... ..... ..... ..... ..... ..... ..... ..... ..... ..... ..... ..... ..... ..... ..... ..... ..... .................
.
..
...
.... ..
..
.... ..
..
.
.
.
.
...
....
..
..
..
....
.
.
..
.
.
.
.
.
.
...
...
.
.
...
.
...
...
..
..
....
..
..
.
.
.
...
...
..
.
.
...
.
.
..
..
....
..
..
.
.
....
.
...
.
.
...
...
.
..
..
..
..
x∗.......
...
..................................................
..
.
h
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
..........................................
.
...... ....
...
..
..
.............................
.
.
.
.
.
...
.
ϕ(x)
...... .......
.
.
.
...
...
..
.
.. . . .
..... .......... ..
..
...............................
.
...
.
.
.
.
.
.
.. ...................................................................................................................................................................................... .........................
...
..
.
.
.
.
.
.
...
.
.
.
.
.
.
.
.
.
.
.....................................
.
.
...
..
.... ..
.
..
.
..
.
.
...
.
.
.
...
...
.
.
.
.
..
.
.
..
..
.
.
.
...
....
...
.
..
..
.
.
.
.
.
.
.
...
...
...
.
.
.
.
.
.
.
..
.
.
...
..
...
..
..
..
..
....
.
.
.
...
..
...
.
.
.
.
.
.
.
..
..
...
.
.
...
..
..
..
..
..
....
...
.
.
.
.
..
...
..
.
.
.
.
.
.
..
.
.
.
..
..
...
..
..
..
..
....
.
.
..
..
.
...
.
.
.
.
.
.
..
..
.
...
.
.
...
..
...
....
..
..
..
..
.
.
.
.
..
..
...
.
.
.
.
.
.
..
.
.
.
..
..
...
..
..
..
..
....
.
.
..
..
.
...
.
.
.
.
...
.
..
..
.
.
...
..
...
..
..
..
..
.... y = x
.
.
.
.
.
...
...
.
.
.
.
.
.
..
.
.
.
.. .....
..
..
..
..
..
.........
...
.
.
.
.
.
.
..
..
.
...
.. .
..
..
.. ....... ...
..
..
...
.
......... ...
.
.
.
..
.
a ........ ..... ..... ..... .................. ..... ...... ..... ..... ..... ..... ..... ..... ..... ..... ..... ..... ..... ..... ..... ..... ..... ..... ..... ..... ...... ..... ....... ..... ..... ..... ..... ..... ..... ..... ..... ..... ..... ..... ......
.
.
..
.... .
..
..
..
...
...
.... ..
.
.
.
..
..
..
.
...
... ......
.
.
.. ......
..
.
..
.
...
..
..
.......................................................................................................................................................................................................................................................................................................................................................................................................................
..
x
x
x
.
.
1
2
3
.
.
.. .
a
b
Es resultiert eine ’Treppe’, die in (x∗ , ϕ(x∗ ) = x∗ ) läuft.
Im Falle einer fallenden Funktion ϕ(x) sieht das Bild etwas anders aus, das Resultat ist aber dasselbe:
42
.
.
....
.........
....
.
.
.
.. .... ...
.
....
..
....
.
.
.
...
....
b ........ ..... ..... ..... ...... ..... ..... ..... ..... ..... ..... ..... ..... ..... ..... ..... ..... ..... ..... ..... ..... ..... ..... ..... ..... ..... ..... ..... ..... ..... ..... ..... ..... ..... ..... ..... ..... ..... ..... .................
.
..
...
.... ..
..
.... ..
..
.
.
.
.
...
....
..
..
..
....
.
.
..
.
.
.
.
.
.
...
...
.
.
...
.
...
...
..
..
....
..
..
.
.
.
...
...
..
.
.
...
.
.
..
..
....
..
..
.
.
....
.
...
.
.
...
...
.
..
..
..
..
....
...
.
.
.
..
..
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
...
.
.
.
.
.
.....................................................................................................................................................................................................................................................
...
.......
.
...
..
...
.
.
.
.
.
.
...
......
.......................... ....
...
...
...
..
...
... .......h
.
..
...
........... .....
ϕ(x)
...................
.
.
.
.
.
.
...
...................................................
.
.
.
.
.
.
.
.
.
.
.
.
..
.
.
.
..
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
. .................................
.
..
.... .
..
..
..
..
...
.... ..
.
.
.
.
.
.
.
..
.
...
.
..
..
.
..
...
....
..
..
..
...
..
.
.
.
...
...
.
.
.
..
.
.
.
.
.
..
.
.
.
..
...
..
...
..
...
..
....
.
.
.
..
...
.
.
.
.
.
.
.
...
..
..
...
.
..
..
..
...
..
..
....
...
.
.
.
...
..
.
.
.
.
.
.
.
.
..
.
.
.
.
.
..
...
..
..
..
..
..
....
.
.
..
.
...
.
.
.
.
.
.
...
..
..
.
...
.
.
..
...
....
..
..
..
..
..
.
.
.
..
...
.
.
.
.
.
.
.
.
..
.
.
.
..
...
..
..
..
..
..
....
.
.
..
.
...
.
.
.
.
...
.
..
.
..
.
..
..
...
..
..
..
..
..
.... y = x
.
.
.
...
.
.
.
. ........
..
.
.
.
.
..
..
..
..
..
.. .......
...
...
.
.
.
.
.
.
.
..
..
.
...
..
..
..
.. ....... ..
..
..
...
.
......... ..
.
.
.
..
.
a ........ ..... ..... ..... .................. ..... ....... ..... ..... ..... ..... ..... ..... ..... ..... ..... ..... ..... ..... ..... ..... ..... ..... ..... ....... ..... ..... ....... ..... ..... ..... ..... ..... ..... ..... ..... ..... ..... ..... ......
.
..
.... .
..
..
..
..
...
.... ..
.
.
.
..
..
..
..
.
... ......
.. ......
..
..
..
..
..
..
..
........................................................................................................................................................................................................................................................................................................................................................................................................................
..
x
x
x
.
.
1
3
2
.
.
.. .
a
b
Die Iterationsvorschrift
xk+1
=
ϕ(xk )
mit einer kontrahierenden Selbstabbildung nennt man Fixpunktiteration; sie konvergiert i. a. mindestens
linear, und zwar verringert sich der Abstand von xk zum Fixpunkt x∗ wenigstens um den Faktor q:10
|xk − x∗ | = |ϕ(xk−1 ) − ϕ(x∗ )| ≤ q|xk−1 − x∗ | .
Ein kleiner Wert von q bedeutet also schnelle Konvergenz.
Was passiert, wenn man auf die Eigenschaft der Kontraktion verzichtet?
Bei ’steilen’ Funktionen werden die Werte sich vom Fixpunkt entfernen; veranschaulichen Sie sich diesen
Prozeß durch eine Zeichnung!
Beispiel: ex = x + 3
10 Man kann eine Fehlerabschätzung angeben; sie stimmt mit der zum Gesamtschrittverfahren (s. S. 67) überein, die eigentlich
nur ein Spezialfall ist. Der dortige Wert q̂ ist gerade das hiesige q.
43
Die Gleichung kann man interpretieren als die
Frage nach den Schnittpunkten der links stehenden Exponentialfunktion und der rechten
linearen Funktion. Eine Zeichnung ergibt die
Existenz zweier Lösungen dieser Gleichung:
x1 < 0 und x2 > 0 (rechts):
Diese sollen nun durch Fixpunktiteration ermittelt werden; dazu löst man diese Gleichung
nach jedem der beiden x einzeln auf:
x = ex − 3
bzw.
x = ln(x + 3)
Zu diesen beiden Fixpunktgleichungen gehören die folgenden Funktionsverläufe der rechten Seiten:
. ...
...
.........
...........
.
.
....
......
....
.... ...
.
.
.
.
....
.... .
.... ....... ...
... ....
.
..
....................................|........................|.......................|...........................|.............................|..........................|.........................
..
.
.
.
.
.
.
.1
-3
-2
-1 ....... .....
2
.
...
.
....
.... ...
....
.
.
.
.
.... .... x
....
....
.... .... e − 3
.
.
.
.......
...
.
.
.
.
.......
...
.
.
.
.
.
.
.
. .
.
....
......... .....
.... ...................................
.
.
....
.
..........................................
.
......
....
.. ... ...
.......
.
.
.
...
.....
.... ...
..
.
.
.
... .
..
... ....... ..
.
.. .....
.....
..
.
.
.
.
.
.... .
..
.... ....
.
.
.
.
.
..
. x
....
.. ... e
x + 3 .......
.
... ....
....
.. ....
....
.
.
.
.....
...
.
.
.
.
.
...
........
.
.
.
.
.
.
.
..
x1 .......
x2
......... ..
.
............................................
..
.
.
|
.
............|...........................|........................|........................|.......................|...........................|............|............|........................
.
.
..
.
.
.
-4 ..... -3
-2
-1
1
2
..
.
...
....
....
..
....
...
....
...........
....................
.
.
.
.
.... ...............................
.........
.
.
.
.
.
....
.
.
.
.
.
.
ln(x + 3) .......... ...
....
.
.
.
.
.
.
.
.
.
.
.
..
.... ......
.........
... ....
......
.
..
.
.
.
............|..........................|........................|...........................|............................|........................|...................................
.
..
.
.
.
.
.
.
.
-3 .... -2
-1 ....... .....
1
2
...
.
....
..
....
....
.
.
....
.
...
....
.
.
.
..
...
....
.
.
.
..
....
...
.
.
.
...
.
....
.. ........
....
.. ......
....
........
..
Im ersten Fall (linke Gleichung, linkes Bild) ist der günstige flache Verlauf bei x1 , rechts dagegen bei x2 .
Startet man in der Nähe des jeweiligen Fixpunktes, so erhält man nacheinander:
k
0
1
2
3
4
5
6
7
8
9
10
I
-2
-2.864665
-2.942998
-2.947293
-2.947518
-2.947530
-2.947531
-2.947531
-2.947531
-2.947531
-2.947531
II
-1
-2.632121
-2.928074
-2.946500
-2.947477
-2.947528
-2.947531
-2.947531
-2.947531
-2.947531
-2.947531
III
1.5
1.481689
1.400372
1.056709
-0.123113
-2.115836
-2.879467
-2.943835
-2.947337
-2.947521
-2.947530
IV
1.51
1.526731
1.603104
1.968429
4.159418
61.034252
-
V
1
1.386294
1.478485
1.499285
1.503918
1.504948
1.505176
1.505227
1.505238
1.505241
1.505241
VI
2
1.609438
1.528106
1.510304
1.506364
1.505491
1.505297
1.505254
1.505244
1.505242
1.505242
VII
-2.9
-2.302586
-0.360376
0.970636
1.378926
1.476804
1.498909
1.503835
1.504929
1.505172
1.505226
VIII
-2.93
-2.659261
-1.076638
0.654074
1.295843
1.457648
1.494621
1.502881
1.504717
1.505125
1.505216
Die linke Gruppe (I bis IV) bezieht sich auf ex − 3; die Rechnung konvergiert, wenn man in -1 oder -2 startet;
sie würde auch bei x0 = −100 konvergieren. Wählt man den Startwert 1.5 ganz in der Nähe des anderen
Fixpunktes, so irrt die Folge etwas herum und konvergiert schließlich zum kleineren Wert. Vergrößert man
aber den Startwert nur ganz unwesentlich auf 1.51, so wachsen die Werte xk erst langsam und dann explosionsartig; die Konvergenz entfällt. (Es wäre x6 ≈ e61 = 3.2 · 1026 , IV.)
Rechts geht es um ln(x + 3); startet man in 1 oder 2, so konvergiert das Verfahren schön in den Fixpunkt. Beginnt man dagegen nahe des unteren Wertes (VII und VIII), so ist die Folge zunächst etwas
ratlos, um dann doch gegen den oberen Grenzwert zu gehen. Und das bestenfalls - bei x0 = −2.95 ist
x1 = ln 0.05 = −2.9957 . . ., x2 = ln 0.0042677 . . . = −5.45667 . . ., und dann bricht der Prozeß ab wegen
’Logarithmus aus negativer Zahl’.
Jede der beiden Umformungen der Ausgangsgleichung liefert also nur eine der beiden Lösungen als Fixpunkt;
obendrein hat so ein Fixpunkt nur ein gewisses Gebiet (eine Umgebung), in der man den Startwert wählen
kann.
Die jeweilige Funktion ϕ(x) ist im linken Fall flacher als im rechten; man erkennt, daß die Fälle I - III besser
44
konvergieren als V - VII.
Die Fixpunktiteration liefert oft einfache und vor allem recht natürliche Rechenvorschriften. Wenn die Konvergenzbedingung erfüllt ist, so ist das Verfahren auch ’selbstkorrigierend’, d. h. ein Rechenfehler - sofern er
nicht aus dem Konvergenzbereich herausführt - ergibt zwar einen falschen Wert in der Folge, man kann ihn
aber als neuen Startwert ansehen und muß dann die Konvergenz erst ab hier zählen. Bei Computerberechnung kann das sicher nicht vorkommen - das Programm rechnet entweder immer richtig oder (fast) immer
falsch; aber dort ist es ggfs. günstig, daß dieser Prozeß die Auswirkung der Rundungsfehler automatisch
unterdrückt.
Nachteilig ist, daß man jeden Fall einzeln behandeln muß, und etwas Geschick und Erfahrung für die Überführung der Nullstellenaufgabe in ein Fixpunktproblem benötigt.
Die folgende Überlegung ordnet das Newton-Verfahren bei der Fixpunktiteration ein:
Die Gleichung 0 = f (x) wird mit a multipliziert, und man addiert auf beiden Seiten x:
x = x + af (x) = ϕ(x) .
Für die Fixpunktiteration ist es günstig, wenn die Ableitung von ϕ(x) möglichst nahe bei Null liegt; verlangen
wir exakte Übereinstimmung: ϕ0 (x) = 1 + af 0 (x) = 0 =⇒ a = −1/f 0 (x).
Wenn wir uns nun - in Abwandlung der Grundidee - für jeden Iterationsschritt auch noch eine neue Funktion
ϕk (x) leisten, so wäre xk+1 = ϕk (xk ) = xk − f (xk )/f 0 (xk ) gerade die Rekursion des Newton-Verfahrens.
4.1.6
Polynomnullstellen
Allgemeine Feststellungen und Abschätzungen
Polynome sind eine spezielle, in der Praxis häufig vorkommende Funktionenklasse.
Ihre spezifische Struktur erlaubt eine Reihe detaillierter Aussagen, und ihre Werte (und die der Ableitungen)
sind leicht zu berechnen.
Trotzdem kann die Aufgabe, ihre Nullstellen zu finden, recht schwierig werden.
Bekannt ist, daß ein Polynom vom Grade n ≥ 1 genau n Nullstellen besitzt, die aber ggfs. mit ihren Vielfachheiten gezählt werden müssen, und die komplex sein können, selbst wenn das Polynom nur reelle Koeffizienten
hat. Im letzten Fall treten sie als konjugiert komplexe Paare auf.
Es gibt geschlossene Lösungsformeln für die Fälle n = 1, 2, 3 und 4, die aber meist nur für n ≤ 2 benutzt
werden; selbst bei n = 3 sind Näherungsverfahren meist bereits bequemer.
Zunächst einige elementare Aussagen über Polynome und ihre Nullstellen; aus der Theorie sind subtilere
Abschätzungen und Formeln bekannt, die es bisweilen erlauben, recht genaue Informationen über die Eigenschaften der Nullstellen zu gewinnen, ohne diese im Einzelnen zu berechnen.
Betrachtet wird das Polynom Pn (x) = an xn + an−1 xn−1 + . . . a2 x2 + a1 x + a0 mit n > 0 und an 6= 0.
1. Die Polynome Pn (x) und
P̂n (x) = xn +
a1
a0
Pn (x)
an−1 n−1
x
+ ... +
x+
=
= xn + bn−1 xn−1 + . . . + b1 x + b0
an
an
an
an
(Pn (x) dividiert durch an ) sind i. a. verschiedene Funktionen, haben aber dieselben Nullstellen mit denselben
Vielfachheiten.
2. Falls a0 = a1 = . . . = am = 0 gilt (bzw. b0 = b1 = . . . = bm = 0) mit n > m ≥ 0 und am+1 6= 0 (bzw.
bm+1 6= 0), so hat Pn (x) die m-fache Nullstelle x∗ = 0.
Die verbleibenden, von Null verschiedenen Nullstellen sind im Restpolynom
Pn−m (x) = an xn−m + an−1 xn−m−1 + . . . + am+2 x + am+1
enthalten.
3. Satz von Vieta (Spezielle Variante):
Seien x1 , x2 , . . . , xn alle Nullstellen von Pn (x) (die mehrfachen entsprechend oft aufgeführt), so ist
an (x1 + x2 + . . . + xn ) = −an−1
bzw. x1 + x2 + . . . + xn = −bn−1
und
an · x1 · x2 · . . . · xn = (−1)n a0
bzw. x1 · x2 · . . . · xn = (−1)n b0 .
45
Folglich ist
bn−1
x1 + x2 + . . . + xn
=
n
n
das arithmetische Mittel aller Nullstellen.
Durch Einführung der neuen Variablen s = x + bn−1 /n kann man ein äquivalentes Polynom P̃n (s) mit ggfs.
viel handlicheren Koeffizienten gewinnen.
Die Nullstellen von P̃n (s) sind rechts und links von s = 0 verteilt (bzw. rechts und links von der imaginären
Achse der s-Ebene).
In P̃n (s) fehlt der Summand mit sn−1 , da der Durchschnitt der neuen Nullstellen gerade Null sein muß.
−
4. Sei x0 eine (evtl. komplexe) Nullstelle von Pn (x) mit |x0 | ≥ 1, dann gilt
an xn0 = −an−1 xn−1
− . . . − a1 x0 − a0 ,
0
also
|an xn0 | = |an | · |x0 |n = | − an−1 xn−1
− . . . − a1 x0 − a0 | ≤ |an−1 x0n−1 | + . . . + |a1 x0 | + |a0 | =
0
= |an−1 | · |x0 |n−1 + . . . + |a1 | · |x0 | + |a0 | ≤ |an−1 | · |x0 |n−1 + . . . + |a1 | · |x0 |n−1 + |a0 | · |x0 |n−1
wegen vorausgesetztem |x0 | ≥ 1. Folglich ist nach Division durch den positiven Wert |an | · |x0 |n−1
|x0 | ≤
|an−1 | + . . . + |a1 | + |a0 |
= |bn−1 | + . . . + |b1 | + |b0 | .
|an |
Erkenntnis: Für jede Nullstelle |x0 | des Polynoms Pn (x) gilt die Abschätzung
|an−1 | + . . . + |a1 | + |a0 |
|x0 | ≤ max 1,
.
|an |
Beispiel: P3 (x) = x3 − 7x − 6 hat die Nullstellen -2, -1 und +3.
Es gilt hier
|0| + | − 7| + | − 6|
= max {1, 13} = 13 .
|x0 | ≤ max 1,
|1|
Tatsächlich sind die Beträge aller Nullstellen deutlich kleiner als 13.
Diese Abschätzung erlaubt es, sehr einfach einen Kreis um den Nullpunkt der komplexen Ebene anzugeben,
in dem alle Nullstellen des Polynoms liegen müssen. Das ist immerhin ein begrenztes Gebiet, und damit sind
die Nullstellen schon einigermaßen lokalisiert.
Es lohnt sich dabei ggfs., das Polynom in der beschriebenen Weise in den Mittelpunkt seiner Nullstellen zu
verschieben (die Variablentransformation s = x + an−1 /(nan ) zu machen.
Beispiel: Das Polynom P2 (x) = (x − 999)(x − 1001) = x2 − 2000x + 999999 hat laut Abschätzung seine
Nullstellen in einem großen Kreis mit dem Radius (| − 2000| + |999 999|)/|1| = 1 001 999.
Der Suchtrupp, der sie dort finden soll, muß eine Fläche von π · 1 001 9992 = 3.15 · 1012 abgrasen.
Mit s = x + (−2000)/(2 · 1) = x − 1000 wird P̃2 (s) = (s + 1)(s − 1) = s2 − 1, und der zugehörige Kreis hat
den Radius 1 sowie die Fläche π; diese ist um den Faktor 9.96 · 10−13 kleiner als die des ersten Kreises.
Man erkennt also: Es muß |s0 | ≤ 1 sein, oder, in der ursprünglichen Variablen, |x0 + 1000| ≤ 1. - Jede
Nullstelle dieses Polynoms hat also von x = 1000 (oder von x = 1000 + 0 · j, falls es in der komplexen
Ebene gewünscht wird) höchstens den Abstand 1. Das ist ein Kreis um diese Stelle, und nicht mehr um den
Nullpunkt der komplexen Ebene.
Die Nullstellen sind hier offensichtlich, und sie haben gerade diesen Abstand 1. Das zeigt, daß es mindestens
ein Polynom gibt, wo die von der Abschätzung gebotene Grenze tatsächlich erreicht wird. Demzufolge kann
man diese Formel nicht mehr universell verbessern.
5. Sei a0 6= 0; betrachten wir das Polynom
Qn (x) = a0 xn + a1 xn−1 + . . . + an−1 x + an ,
das sich von Pn (x) dadurch unterscheidet, daß es gewissermaßen ’umgekehrt’ aufgeschrieben wurde.
Es ist (bei x 6= 0)
1
1
1
1
.
Pn (x) = an xn + an−1 xn−1 + . . . + a1 x + a0 = xn an + an−1 + . . . + a1 n−1 + a0 n = xn · Qn
x
x
x
x
46
Sei nun x0 eine Nullstelle von Pn (x) (wegen a0 6= 0 ist x0 6= 0), so gilt also Qn (1/x0 ) = 0, und damit ist
z0 = 1/x0 eine Nullstelle von Qn (x). Diese Aussage gilt auch umgekehrt.
Zurück zum Beispiel des Polynoms P3 (x) = x3 − 7x − 6; hier ist Q3 (x) = −6x3 − 7x2 + 1, und dessen
Nullstellen müssen in einem Kreis der komplexen Ebene mit dem Radius
8
4
| − 7| + |1|
= max 1,
=
.
r = max 1,
| − 6|
6
3
Damit gilt für jede Nullstelle x0 des Ausgangspolynoms P3 (x) die Abschätzung |1/x0 | ≤ 4/3, also ist |x0 | ≥
3/4 = 0.75.
Mithin erfüllen alle Nullstellen x0 dieses Polynoms die Bedingungen
0.75 ≤ |x0 | ≤ 13 .
Den Kreis mit dem Radius 13 kann man also um einen innenliegenden Kreis des Radius 0.75 verkleinern, in
dem keine Nullstellen liegen können.
Es verbleibt ein Gebiet, das einer Unterlegscheibe ähnelt.
Bisweilen ist es nützlich, eine Abschätzung für einen Mindestabstand der Nullstellen zur Null zu haben.
Beispiel: Gegeben ist die homogene Differentialgleichung
2
d3 x
−1 d x
−2 dx
+
0.563s
+ 11.081s−3 x = 0
3
2 − 2.774s
dt
dt
dt
in irgendeiner Variablen x = x(t).
Das charakteristische Polynom mit der Variablen λ (Maßeinheit: 1/s) wird
P3 (λ) = λ3 + 0.563λ2 + 2.774λ + 11.081 .
Für seine Nullstellen λ0 gilt analog (an der unteren Grenze muß man hier wegen (1 + 0.563+2.774)/11.081
< 1 das Maximum gleich 1 nehmen):
1 ≤ |λ0 | ≤ 0.563 + 2.774 + 11.081 = 14.418 .
Ohne weitere Rechnung ist damit klar:
• Wenn die Lösung der Differentialgleichung schwingt, so gilt für die Winkelgeschwindigkeit 1.000s−1 ≤
ω ≤ 14.418s−1 .
• Wenn die Lösung der Differentialgleichung wächst, so nicht schneller als e14.418t .
• Wenn die Lösung der Differentialgleichung abklingt, so nicht schneller als e−14.418t .
Diese Aussagen sind vielleicht bereits eine gewisse Auskunft zum Verständnis des Prozesses.
6. Das Polynom Pn (x) habe Null als arithmetisches Mittel seiner Nullstellen (ggfs. wurde es so transformiert),
oder, was dasselbe ist, der Koeffizient an−1 ist Null.
Dann kann die Herleitung der Abschätzung aus 4. modifiziert werden:
Sei wiederum |x0 | ≥ 1 eine Nullstelle dieses Polynoms, dann gilt
|an | · |x0 |n ≤ |an−2 | · |x0 |n−2 + . . . + |a1 | · |x0 | + |a0 | ≤ |an−2 | · |x0 |n−2 + . . . + |a1 | · |x0 |n−2 + |a0 |n−2 ,
also wird
s
(
|x0 | ≤ max
1,
|an−1 | + . . . + |a1 | + |a0 |
|an |
)
.
Angewandt auf das Beispiel P3 (x) = x3 − 7x − 6 - das der Voraussetzung a2 = 0 genügt - ist
√
|x0 | ≤ max {1, 13 } = 3.61 .
Damit ist der Radius des Kreises drastisch verkleinert: von 13 auf 3.61. Anders ausgedrückt: Seine Fläche das innere ’Loch’ nicht mitgerechnet - hat sich auf 1/13 verringert.
Die betragsgrößte Nullstelle ist 3; dieser Wert liegt noch geringfügig unter der Schranke 3.61.
Die innere Grenze kann man hier nicht so einfach umrechnen, da −6x3 − 7x2 + 1 nicht der getroffenen
Voraussetzung genügt.
47
Das Horner-Schema
Das Horner-Schema ist eine einfache und sehr effektive Rechenvorschrift für verschiedene mit Polynomen
im Zusammenhang stehende Operationen. Es sei nachstehend am Fall n = 3 eines kubischen Polynoms
P3 (x) = a3 x3 + a2 x2 + a1 x + a0 demonstriert, um die Übersichtlichkeit zu bewahren; die Aussagen gelten
aber für Polynome beliebigen Grades:
a3
I
II
III
a2
x0
a3 x0
a3 = b2
a3 x0 + a2 = b1
a3
2a3 x20
2a3 x0 + a2
a0
+ a2 x0
a3 x20 + a2 x0 + a1 = b0
a3 x0
IV
V
a1
a3 x20
3a3 x20
+ a2 x0
+ 2a2 x0 + a1 =
a3 x30 +
a3 x30
a2 x20
+ a2 x20 + a1 x0
+ a1 x0 + a0 = P3 (x0 )
-
P30 (x0 )
-
In Zeile I stehen alle Koeffizienten des Polynoms in ihrer natürlichen Reihenfolge, d. h. nach fallenden
Potenzen geordnet. Fehlt eine Potenz im Polynom, so ist dafür unbedingt eine Spalte mit dem Koeffizienten
Null vorzusehen!
Die Werte in Zeile III werden - mit dem Argument x0 multipliziert - in die Zeile II übertragen, und zwar ein
Feld nach rechts versetzt. Dann wird der Polynomkoeffizient aus Zeile I mit den Wert in II addiert und gibt
das neue Element in III; zuletzt steht dort der Polynomwert in x0 .
Programmiert berechnet sich der Polynomwert y zu
y:=a[n]; for k:=n-1 downto 0 do y:=x∗y+a[k];
Mit Hilfe der Zeilen IV und V berechnet man den Ableitungswert des Polynoms; die Berechnung ist völlig
analog, aber statt auf die Polynomkoeffizienten aus Zeile I wird auf die Werte der Zeile III zurückgegriffen
(Das x0 muß also dasselbe sein!). Und man beachte, daß man eine Spalte vorher aufhört!
Dividiert man P3 (x) durch den Linearfaktor (x − x0 ), so wird
(a3 x3 + a2 x2 + a1 x + a0 ) : (x − x0 ) = b2 x2 + b1 x + b0 + R = a3 x2 + (a3 x0 + a2 )x + (a3 x20 + a2 x0 + a1 ) + R ,
wobei R = r/(x − x0 ) den Rest der Division bezeichnet.
Dann ist P3 (x) = (x − x0 )(b2 x2 + b1 x + b0 ) + r, und setzt man x = x0 , so sieht man, daß r gerade der
Polynomwert in x0 ist.
Das Horner-Schema liefert also auch die Koeffizienten des Quotientenpolynoms P (x)/(x − x0 ) (für Polynome beliebigen Grades).
Ist x0 eine Nullstelle des Polynoms P (x), so geht die Division durch x − x0 ohne Rest auf, und man erhält
also im ersten bis vorletzten Wertefeld von III die Koeffizienten des betreffenden Restpolynoms, das die
verbleibenden Nullstellen von P (x) enthält.
Fügt man zu IV und V analoge Zeilen VI und VII an (wiederum eine Spalte kürzer), so erhält man 12 P 00 (x0 ),
usw. - jeweils den Wert der m-ten Ableitung, dividiert durch m!.
Polynomwert y und erste Ableitung ys können in einem Programm zusammen berechnet werden:
y:=a[n]; ys:=a[n]; for k:=n-1 downto 1 do
begin y:=x∗y+a[k]; ys:=x∗ys+y; end;
y:=x*y+a[0];
Das Newton-Verfahren für Polynome
Durch Anwendung des Horner-Schemas kann man das Newton-Verfahren sehr effektiv durchführen.
Beispiel: P3 (x) = x3 − 2x − 31, Startwert: x0 = 3
x=3
1
0
-2
-31
-
3
9
21
1
3
7
-10
-
3
18
-
1
6
25
-
P3 (3) = −10 ,
P30 (3) = 25 ,
48
x1 = 3 − (−10)/25 = 3.4
x=3
x=3
x=3
1
0
-2
-31
-
3.4
11.56
32.504
1
3.4
9.56
1.504
-
3.4
23.12
-
1
6.8
32.68
-
1
0
-2
-31
-
3.353978
11.249168
31.021506
1
3.353978
9.249168
0.021506
-
3.353978
22.498336
-
1
6.707956
31.747505
-
1
0
-2
-31
-
3.353301
11.244625
31.000005
1
3.353301
9.244625
0.000005
-
3.353301
22.489249
-
1
6.706601
31.733874
-
P3 (x1 ) = 1.504 , P30 (x1 ) = 32.68 ,
x2 = x1 − 1.504/32.68 = 3.35397792
P3 (x2 ) = 0.021506 , P30 (x2 ) = 31.747505 ,
x3 = x2 − 0.021506/31.747505 = 3.35330055
P3 (x2 ) = 0.000005 , P3 (x2 )0 = 31.733874 ,
x3 = x2 − 0.000005/31.733874 = 3.35330040
Eine Fortsetzung der Rechnung ist evtl. nicht
mehr nötig.
Restpolynom: P2 (x) = x2 + 3.3533x + 9.2446
Wenn die betragsgrößte Nullstelle eines Polynoms reell und positiv ist, so konvergiert das Newton - Verfahren sicher zu ihr, wenn man nur x0 größer als diese Nullstelle wählt, also einfach weit genug rechts beginnt.
Analog, wenn die betragsgrößte Nullstelle reell und negativ ist, so sollte man x0 kleiner als diese wählen,
und man gelangt zu ihr. Speziell bedeutet dies, daß bei einem Polynom mit nur reellen Nullstellen diese in
wachsender oder fallender Reihenfolge sukzessive ermittelt werden können. (Man vergleiche mit den dortigen
Aussagen und dem Beispiel auf Seite 38).
Das Newton - Verfahren konvergiert auch bei mehrfachen Nullstellen, allerdings langsamer, und man muß
sorgfältig rechnen, da man sehr kleine Werte durcheinander teilt.
Ermittelte Linearfaktoren sollten abdividiert werden, worauf man das Restpolynom auf die verbleibenden
Nullstellen untersucht. Die dabei unvermeidlichen Rundungsfehler können aber dessen Nullstellen schon
spürbar stören, weshalb eine Korrektur der so gewonnenen Nullstellenwerte im Ausgangspolynom anzuraten
ist.
Das Horner-Schema und das Newton-Verfahren lassen sich übrigens mit komplexen Variablen völlig analog
rechnen.
Beispiel: P3 (z) = (4 − 2j)z 3 + (7 + 6j)z 2 − (8 + 3j)z + 5 − 9j = 0
Gestartet wird mit dem Startwert z0 = 1 + j; das Horner-Schema ist
1+j
4-2j
4-2j
4-2j
7+6j
6+2j
13-8j
6+2j
19+10j
-8-3j
5+21j
-3-18j
9+29j
6+47j
5-9j
-21+15j
-16-6j
-
Damit wird z1 = z0 − P3 (z0 )/P30 (z0 ) = (1 + j) − (−16 − 6j)/(6 + 47j) = 0.917149 + 0.648998j.
Die weitere Rechnung ist in der nachstehenden Tabelle dargestellt.
Man beachte, daß sich die Rechnung natürlich komplett mit reellen Zahlen ausführen läßt; man muß nur
die vier komplexen Grundrechenarten in der betreffenden Weise emulieren und pro Koeffizient oder Variable
entsprechend zwei Werte vorsehen.
Wenn man in einem Programmsystem arbeitet, daß zur unmittelbaren Behandlung komplexer Zahlen fähig
ist (z. B. FORTRAN), so ist dies allerdings nicht nötig, und man kann das Newton-Verfahren in der ursprünglichen Form programmieren.
49
0.917149+0.648998j
0.947030+0.540249j
0.957481+0.537787j
4-2j
4-2j
4-2j
7+6j
4.9666+0.7617j
11.9666+6.7617j
4.9666+0.7617j
16.9332+7.5234j
-8-3j
6.5868+13.9678j
-1.4132+10.9678j
10.6476+17.8897j
9.2344+28.8574j
5-9j
-8.4142+9.1419j
-3.4142+0.1419j
-
4-2j
4-2j
4-2j
7+6j
4.8686+0.2669j
11.8686+6.2669j
4.8686+0.2669j
16.7372+6.5339j
-8-3j
7.8542+12.3470j
-0.1458+9.3470j
12.3208+15.2300j
12.1750+24.5770j
5-9j
-5.1877+8.7731j
-0.1877-0.2269j
-
4-2j
4-2j
4-2j
7+6j
4.9055+0.2362j
11.9055+6.2362j
4.9055+0.2362j
16.8110+6.4724j
-8-3j
8.0455+12.3737j
0.0455+9.3737j
12.6154+15.2379j
12.6610+24.6116j
5-9j
-4.9974+8.9996j
0.0026-0.0004j
-
mit dem Resultat z ∗ = 0.957452 + 0.537877j.
Das Graeffe-Verfahren
Das ist die übliche Bezeichnung dieser Methode in der deutschsprachigen Literatur; sie wurde von Dandelin
(1826), Lobac̆evskij (1834) und Graeffe (1837) unabhängig voneinander entwickelt.
Dies mag als Beispiel für eine Methode dienen, die nur für Polynome zutrifft, die auf einer ganz anderen
Grundidee basiert als das universelle Newton-Verfahren, und die obendrein sämtliche Nullstellen auf einmal
liefert.
Es soll hier nur seine Grundidee für den einfachsten Fall skizziert werden. Dieser besteht darin, daß alle
Nullstellen betragsmäßig verschieden und damit auch nur einfach sind (im Falle reeller Koeffizienten des
Polynoms müssens sie dann obendrein alle reell sein).
Gegeben sei das Polynom Pn (x) = xn +an−1 xn−1 +. . .+a1 x+a0 ; sei also an = 1, was bei Nullstellenaufgaben
keine Einschränkung der Allgemeinheit darstellt.
Wir können die Nullstellen nach der Größe ihrer Beträge ordnen; sei
|x1 | > |x2 | > . . . > |xn−1 | > |xn | .
Falls nun |x1 | sehr viel größer ist als |x2 | (und die restlichen), so gilt nach der Formel von Vieta
an−1 = −(x1 + x2 + . . . + xn ) ≈ −x1
d. h. x1 ≈ −an−1 ist (näherungsweise) sofort ablesbar.
Beispiel: x2 + 2783x + 1.83 = 0
Das Produkt der beiden Nullstellen ist 1.83, ihre Summe -2783. Ein Wert muß also betragsmäßig sehr groß
sein, und der andere sehr klein.
Es folgt x1 ≈ −27883 und x2 ≈ 1.82/(−2783); exakt ist x1 = −2782.9993 . . ..
(1)
(2)
Die Idee des Graeffe-Verfahrens besteht nun darin, aus Pn (x) neue Polynome Pn (x), Pn (x), . . . desselben Grades zu erzeugen, deren Nullstellen relativ immer weiter auseinder liegen, andererseits aber leicht
mit denen des Ausgangspolynoms in Beziehung gesetzt werden können.
(m)
Bei irgendeinem Pn (x) ist das Ziel erreicht, daß dessen betragsgrößte Nullstelle so viel größer als alle
anderen ist, daß man sie mit genügender Genauigkeit ablesen kann; danach werden die weiteren sukzessive
ermittelt.
(1)
Die neuen Polynome Pn (x) usw. haben nun als Nullstellen gerade die Quadrate der Nullstellen des jeweiligen
Vorgängerpolynoms. Falls z. B. x1 = 2x2 dessen Doppeltes ist, so stehen x21 = 4x22 bereits im Verhältnis des
Vierfachen.
Zur Rechenvorschrift:
Realisiert wird sie mit dem Polynom in der Summenform: Pn (x) = xn + an−1 xn−1 + . . . + a1 x + a0 ; um zu
verstehen, was intern geschieht, werden wir es auch in der Produktform Pn (x) = (x−x1 )·(x−x2 )·. . .·(x−xn )
schreiben, die man natürlich in der Praxis zu diesem Zeitpunkt noch nicht kennt.
Ersetzen wir in Pn (x) das Argument x durch −x:
Pn∗ (x) = Pn (−x) = (−1)n · (x + x1 ) · (x + x2 ) · . . . · (x + xn ) =
50
= (−x)n + an−1 (−x)n−1 + . . . + a2 (−x)2 + a1 (−x) + a0 =
= (−1)n xn − an−1 xn−1 + . . . + (−1)n−2 a2 x2 + (−1)n−1 a1 x + a0 (−1)n .
Die beiden Polynome werden miteinander multipliziert:
Pn (x) · Pn∗ (x) = (x − x1 ) · (x − x2 ) · . . . · (x − xn ) · (−1)n · (x + x1 ) · (x + x2 ) · . . . · (x + xn ) =
= (−1)n · (x2 − x21 ) · (x2 − x22 ) · . . . · (x2 − x2n ) .
(1)
Das Produkt enthält nur gerade Potenzen in x bis hin zu 2n; bilden wir aus ihm das Polynom Pn (x) des
Grades n, indem wir x2 wieder durch x ersetzen und den für die Nullstellensuche unwesentlichen Faktor
(−1)n einfach weglassen:
Pn(1) (x) = (x − x21 ) · (x − x22 ) · . . . · (x − x2n ) .
Es hat offenbar gerade die Nullstellen x2i , mit den Nullstellen xi des Ausgangspolynoms.
Es verbleiben zwei Bemerkungen:
Erstens: Dieser Prozeß wird entsprechend oft wiederholt.
Zweitens: Die Multiplikation der Polynome geschieht natürlich in der Summenform - man hat ja nichts
anderes zur Verfügung.
Beispiel: P3 (x) = x3 − 2x2 − 5x + 5
P3∗ (x) entsteht, indem man in diesem Polynom bei jedem zweiten Koeffizienten das Vorzeichen ändert:
P3∗ (x) = x3 + 2x2 − 5x − 5
Diese beiden Polynome werden multipliziert:
(1)
P3 (x2 ) = P3 (x) · P3∗ (x) = (x3 − 2x2 − 5x + 5) · (x3 + 2x2 − 5x − 5) = x6 − 14x4 + 45x2 − 25 .
(1)
Durch die Substitution x2 := x folgt P3 (x) = x3 − 14x2 + 45x − 25.
Nächster Schritt:
(2)
(1)
(1)∗
P3 (x2 ) = P3 (x)·P3
(x) = (x3 −14x2 +45x−25)·(x3 +14x2 +45x+25) = x6 −286x4 +1325x2 −625 ,
(2)
also P3 (x) = x3 − 286x2 + 1325x − 625.
Die Rechnung kann als formaler Algorithmus geschrieben und damit programmiert werden:
Pn(k) (x)
=
(k)
(k)
(k)
x3 + a2 x2 + a1 x + a0 ,
(k)
(k)
(k)
(k)
(k)
(k)
Pn(k+1) (x2 ) = Pn(k) (x) · Pn(k)∗ (x) = (x3 + a2 x2 + a1 x + a0 ) · (x3 − a2 x2 + a1 x − a0 ) =
h
i
h
i
(k)
(k)
(k)
(k) (k)
(k)
= x6 + 2a1 − (a2 )2 x4 + (a1 )2 − 2a2 a0 x − (a0 )2 .
Damit erzeugt man eine Tabelle von Koeffizienten.
k
(k)
(k)
(k)
Unterstellt man für die betragsgrößte Nullstelle x1 die Beziehung x1 = −a2 , so folgt wegen x1 = x21
die Gleichung
q
2k
(k)
|a2 | .
|x1 | ≈
Dieser Wert wird ebenfalls berechnet und seine Stabilisierung beobachtet.
I
II
III
IV
V
k
(k)
a3
(k)
a2
(k)
a1
(k)
a0
Rechnung
-
2 · IV − III 2
IV 2 − 2 · III · V
−V 2
0
1
2
3
4
5
6
7
1
1
1
1
1
1
1
1
2
-14
-106
-8586
-70473146
-496120865E+07
-246135775E+23
-605828197E+54
-5
45
1325
1623125
2627826953125
690545299E+16
476852810E+41
227388602E+91
-5
-25
-625
-390625
-152587890625
-232830644E+14
-542101086E+36
-293873588E+81
51
VI
q
(k)
|a2 |
2k
2.00000000
3.74165739
3.20868044
3.10258623
3.09386585
3.09376348
3.09376346
3.09376346
Für praktisch interessierende Genauigkeiten sind also hier etwa fünf Schritte ausreichend.
Rechts steht folglich zuletzt der Betrag von x1 .
Die Formeln von Vieta lassen sich für alle Koeffizienten aufstellen; für das Absolutglied und die zweithöchste
Potenz sind sie nur besonders einfach.
Speziell wird, die starken Größenunterschiede der Nullstellen ausnutzend,
(7)
a1
(7) (7)
(7) (7)
(7) (7)
= x1 x2 + x1 x3 + x2 x3
(7) (7)
≈ x1 x2
(7)
(7)
also gilt wegen x1 = 605828197 · 1054 die Beziehung 605828197 · 1054 · |x2 | = 227388602 · 1091 , mithin
(7)
|x2 | = 3.7533 · 103 6.
(7)
Der Betrag von x2 ist nun die 128. Wurzel hieraus, also 1.930 802.
Wir haben nicht direkt die Nullstellen erhalten, sondern nur ihre Beträge. Im vorliegenden einfachen Fall der
nur reellen Nullstellen muß man nun die gewonnenen Werte mit beiden Vorzeichen ins Ausgangspolynom
einsetzen11 und klären, welcher zu nehmen ist.
Hier wird P3 (3.0938) = 0.000414 und P3 (−3.0938) = −28.287, also ist x1 = 3.09376346.
Analog wird x2 = −1.930802 als negativer Wert bestätigt.
Nach Vieta gilt x1 x2 x3 = −a0 = −5, damit resultiert x3 = −5/(−1.930802 · 3.093763) = 0.837038.
Die Beträge der beiden bedeutendsten Nullstellen stehen im Verhältnis 1:1.602; durch die Transformation
wurde daraus das Verhältnis 1 : 3.7533·1036 im siebenten Polynom. Das bedeutet aber - grob gesprochen - die
(7)
(7)
Übereinstimmung der ersten 36 Stellen von a2 mit denen von x1 (ohne Berücksichtigung des Vorzeichens).
Das illustriert den Begriff ’eine Nullstelle ist betragsmäßig viel größer als die anderen’.
Allgemein muß dieses Verfahren etwas subtiler durchgeführt werden, um auch die Fälle betragsgleicher (oder
fast betragsgleicher), mehrfacher oder komplexer Nullstellen behandeln zu können; vgl. hierzu ggfs. die
Literatur.
4.2
Gleichungssysteme
4.2.1
Vorbemerkungen
Wir suchen einen Satz von Werten x1 , x2 , . . . , xn , die m Gleichungen erfüllen sollen, die wir ohne Beschränkung der Allgemeinheit in der Nullstellenform schreiben können:
fi (x1 , x2 , . . . , xn ) = 0,
j = 1, 2, . . . , m
Es bietet sich an, die Unbekannten zu einem Vektor x zusammenzufassen, und die Funktionen zu einem
Vektor f (x); dies ist zunächst nur eine kompakte Schreibweise.
Der typische Fall ist die Übereinstimmung der Anzahl der Unbekannten mit der der Gleichungen; das muß
aber nicht so sein. Das ’System’
(x1 − 1)2 + 5(x2 − 7)4 + 3|x3 + 4| = 0
von einer Gleichung mit drei Unbekannten ist (im Reellen!) nichtsdestoweniger eindeutig lösbar.
Im gewissen Umfang kann man derartige Systeme geometrisch interpretieren. Prinzipiell besitzt jede Gleichung fi (x1 , x2 , . . . , xn ) = 0 eine gewisse Lösungsmenge Li , und die Lösung des Systems ist der Durchschnitt
aller dieser Lösungsmengen.
Bei n = 2 ist Lk i. a. eine Kurve in der Ebene (die sogenannte Nullkurve) ; evtl. besteht sie aus mehreren
getrennten Stücken. Bei zwei Gleichungen hat man also zwei Kurvensätze, und die Lösungsmenge besteht
aus deren Schnittpunkten.
Beispiel: f1 (x1 , x2 ) = x21 − x2 + a und f2 (x1 , x2 ) = x22 − x1 + b
Die Menge L1 = {(x1 , x2 )|f1 (x1 , x2 ) = 0} ist - gezeichnet - die Parabel x2 = x21 + a um die x2 -Achse;
entsprechend ist L2 eine Parabel um die x1 -Achse, ’liegend’ und nach rechts geöffnet. Beide Parabeln haben
ihre Scheitelpunkte auf der jeweiligen Achse in (0, a) oder (b, 0).
Bei a = b > 1/4 besitzt das Gleichungssystem keine Lösung (links), und bei a = b = 1/4 genau eine (rechts):
11 In
Wirklichkeit reicht hier ein Vorzeichen.
52
...
.
.
..
...
..
........ x2
...
..
...
.. .... ...
...
.
...
....
...
..
...
..
.
.
.
...
.
..
...
...
..
..
...
.
.
...
....
.
...
...
...
..
..
.
...
.
.
.
.
...
...
...
..
...
...
..
.
.
.
...
..
............
.. .. ...
...
.................
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
...
....
..
. ...
..............
...
...
... . .... .....................
...
.
.
.... .. .... . .. ..........
..... .. .... .. .......
.................. .... ....
.. ... ....
..
......................................................................................................................................................................................................................
.
.. ... ...
.
.....
x1
.. ..
.
......
...
...
.
.
.
.
.
.
..........
...
..
...........
...
.............
...
...
..............
.
................
.
..
.
.
.................
..
...
.
............
.
.
.
.
.
.
...
...
...
...
....
.
...
.
.
..
..
...
........ x2
...
..
...
.. .... ...
.
...
...
....
...
..
...
..
.
.
.
.
...
...
...
...
..
..
..
.
.
...
....
.
...
...
...
..
...
.
...
.
.
.
.
..
...
...
..
...
...
...
.
.
.
...
..
.
..
..................
...
.................
.. ... .
.
...
.
.
.
.
.
.
.
.
.
.
.
.
.
.
...
....
...
. ...
..............
...
..
... .........................
.
...
.
..
. .. ......
...
.... ... ................
.
..... . ....e
.....................
..
......................................................................................................................................................................................................................
.
.. .. ...
.
x1
.. .. ......
.
.......
...
...
.
.
.
.
.
..........
...
...
...........
...
.............
..
...
..............
.
.
................
..
.
.
.................
...
...
.
.................
.
.
.
.
.
...
...
..
...
....
..
Für 1/4 > a = b > −3/4 hat man es mit zwei Lösungen zu tun (links), und bei a = −1, b = −1.129515 sind
es genau drei (rechts):
...
...
..
..
..
..
..
..
...
...
....... x2
........ x2
...
...
..
..
...
...
.. ... ..
.. .. ..
...
...
.
.
.
.
.
.
..
...
...
...
...
...
..
...
..
..
..
..
...
...
.
.
.
.
...
...
.
...
...
.
....
....
...
...
..
...
...
..
...
..
.
.
.
.
...
...
..
..
.
.
...
..
...
...
....
....
..
...
...
..
.
.
...
.
.
.
.
.
.
.
...
.
..
..
...
..
.. . ...
...
.
........
...
.
.. .... .
.
...
.
.
.
.
.
.
.
....................
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
...
.
..
.
.
.
.. ...
.
.
.
...
.....
...
. .. .................
...
.................
...
...
..e
.................
.
.
.
..... ... ...........................
.
.
.
.
...
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
...
.....
...
.. .................... .... ..
...
...
................
...
... ...................e
........
.
.
.
.
.
... .
.
.
.
.
...
...
..... ....
.. ...
... ........... ......
.
.
.
.
.
.
...
.
... ....
.... ... ..
... . ... ..
...
...e
...
.... ...... .... ......
. ...
.
...........
..
.
.
.
.
.
.
.
...........................................................................e...................................................................................................................................... .......................................................................................................................................................................................................................
.
.. ...........
..
..
.
.
.
.
.
.
.
.
.
.
.
........ ... .
.
x1
x1
.. ......
.
.
.
.
.
.
.
.
.
.
.
.
....
...............e .. .......
... ............
.
.
..........
.................
..
..
...
...........
.. ...............
...
...
.............
..
..............
.
.
.
.
...
.
.
.
.
.
.
.
.
.
.
.
...............
.
.
.
.
.
.
...............
...
................
..
.
....
.
.
.
.
.
.
.
.
.
.
.
.
.
..................
..................
.
.
.
.
.
.
.
.
.
.
...................
.
.
.
.
.
.
.
.
.
.
.
.
.
.
...........
..
..
.....................
..
...
.
.
....
.
..
.
.
.
.
.
..
..
.
.
.
.
..
...
....
....
53
Liegt a = b unter -3/4, so gibt es vier Lösungen dieses Systems (s. rechts):
...
.
.
..
..
...
........ x2
...
..
...
.. ... ...
.
...
...
....
...
..
...
...
.
.
.
.
.
.
.
...
.
.
..
...
...
..
...
...
...
.
.
.
...
...
...
.. ...
..
...
.
.....
...
. ...
...
.....................
...
... ........................................
...
.
...
..........
..
..........e
...
... ............................... .....
...
.
.
...
............
.... ...
........... ....
.
.
.
...
.
.
.
.
.
.
.
.
.
.
... ...........
...
....
..
.
..
.....e
.
.
.
.
... ... .
... ...
..
..
...........................................................................................................................................................................................................................
.
..
.. ...
... ...
.
.
..... .. ... .
x1
.
.
.
.......... ...
.
...
........e
.
.
. .........
.
.
... .............................. .....
.
...
.
.
.
..... . ........e
.................... ........................
...
.................
..
...
.
...................
...
....................
..
.
.....................
..
...
.......
..
.
.
.
.
....
.
Die Struktur der Lösungsmenge ist also im allgemeinen Fall keine simple Frage; nur bei linearen
Gleichungssystemen gibt es die ’einfache’ Dreiteilung
’keine Lösung - eine Lösung - unendlich viele Lösungen’.
Der Begriff ’nichtlineare(s) Gleichung(ssystem)’ ist
eine negative Definition; sie beschreibt den größten
Teil (was immer das bedeuten mag...) aller Gleichungen. Analog kann man die Menge aller Gegenstände
unterteilen in ’Bleistift’ und ’kein Bleistift’. Über die
Elemente der ersten Menge kann man einige Aussagen machen; über die der zweiten eigentlich nur eine
- daß sie keine Bleistifte sind. Sie enthält ein recht
breites Spektrum an Objekten: Ölplattformen, ausgestopfte Goldhamster im Glaskasten, Tomahawks,
....
Man kann also nicht erwarten, daß es eine abgeschlossene und detaillierte Theorie der nichtlinearen Gleichungen gibt, analog zu der der linearen.
Lineare Systeme werden im Grundkurs Mathematik
behandelt; hier sollen nur einige ergänzende Bemerkungen gemacht werden.
Ein weiteres Beispiel zur Lösungsmenge:
Man hat eine gedämpfte Schwingung und weiß, daß es sich um eine reine Kosinusschwingung ohne Phasenverschiebung handelt; der Wert bei t = 0 ist bekannt: f (0) = A0 .
Weiterhin hat man für 0 < t1 < t2 zwei Werte bestimmt: f (t1 ) = A1 und f (t2 ) = A2 . Aus diesen Angaben
soll der Dämpfungskoeffizient λ und die Winkelgeschwindigkeit ω der Funktion f (t) = Ae−λt cos ωt bestimmt
werden.
Sei A1 /A0 = y1 und A2 /A0 = y2 , so ist also das Gleichungssystem e−λt1 cos ωt1 = y1 und e−λt2 cos ωt2 = y2
bezüglich λ und ω zu lösen.
Man kann beide Gleichungen nach λ auflösen und diese Ausdrücke gleichsetzen; dann bleibt eine Gleichung
für eine Unbekannte. Das ist der sinnvolle Weg; eine solche Reduktion des Problems ist fast immer zu empfehlen.
Diese Gleichung hat die Gestalt
g(ω) =
ln(y1 / cos ωt1 ) ln(y2 / cos ωt2 )
−
= 0.
t1
t2
Um das Beispiel konkret zu machen seien einige Werte gegeben: t1 = 1.1, t2 = 3.4, y1 = 3.38 und y2 = −4.11.
(Diese Angaben sind willkürlich; es wurde nichts speziell konstruiert.)
Damit erhält man im Bereich 0 < ω < 11 den folgenden Verlauf der Funktion g(ω):
54
...
...
...
...
...
.......... g(ω)
.
...
...
....
...
.
...
....
.......
...
...
...
.. ...
...
...
...
...
.. ...
.
.
.
.
..
.
...
...
.. ....
...
.
...
.
.
...
......
.
.. ....
..
.
.
.
.
...
.
.
.
.
...
...
...
.
.
.
.
.
.
.
.
.
...
...
...
...
...
..
...
.
.
.
.
...
.
.
...
...
...
..
....
..
.
...
.
.
.
.
.
...
.
.
.
.
....
.
...
...
...
...
...
.
.
.
..
.
....
.
..
..
.
6
.
......................................|......................................|...................................|..................................|..................................|....................................|........................................|..................................|...................................|..................................|..................................................
...
...
... . ω
...
.
....
...
...
.
...
...
2
4
8
10
....
...
...
...
...
.
.
.
.
.
...
...
...
...
....
...
...
...
....
....
.
.
...
.
...
...
..
....
...
.
.
.
.
...
....
....
....
....
....
...
...
....
.
.
....
...
...
....
.
.
....
...
.
Der Definitionsbereich besteht aus einzelnen Stücken, und der Verlauf ist keineswegs trivial. In der Nähe von
ω = 1.4 macht die Funktion zuerst Anstalten, nach +∞ zu gehen, um es sich plötzlich anders zu überlegen
und die Richtung zu wechseln. Die dort liegende Nullstelle ist etwas unerwartet.
Es sei aber nun das System e−1.1λ cos 1.1ω − 3.38 = 0 und e−3.4λ cos 3.4ω + 4.11 = 0 unreduziert betrachtet.
Die Nullkurven der ersten Gleichung sind gestrichelt, die der zweiten ausgezogen:
...
... .
...
...
.. .
..
....
..e
...
...
... ..
...
...
λ .. .........
... ..
...
...
.
.
......
...
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
...
... ..
...
...
.
.
...
... .
...
... ..
...
...
...
.
.
.......
....
...
.
.
.
.
.
.
.
... .
...
...
.
...
..
..
..
....
... ...
...
...
.......
...
...
... ..
...
.
.
.
....
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
...
... ...
...
...
....
...
... ..
...
...
...
... .
...
...
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
... ..
...
...
.
..
..
..
3 .................... .....
... ..
...
...
.. .....
...
... ..
...
...
.
.
.
....
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
...
... ..
...
...
. ....
....
...
.....
...
...
... .
...
...
.
.
.
.
.
.
.
.
.
.
.
.
.
....
.
...
... ..
...
...
...
...e
...
...
...
...
...
...
....
.. .....
...
...
.....
...
... ...
...
...
.
.
.
.
.
....
...
...
...
...
...
..
..
. ..
.. ....
....
...
...
...
...
...
. .....
...
.
.
.
.
..
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
...
...
...
...
2
..
.
...
.
.
....
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.. ..
...
...
...
...
.
....
..
...
...
...
...
...
...
... ...
.. .....
....
...
...
.
... ....
...
.
...
.
.
.
.
.
.
.
.
.
.
.
.
...
.. ..
.
... ..
...
...
....
..
..
..
...
......e
...
... . .
...
....
...
...
...
....
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
...
...
........ ..... ........e
..
..
.. . ..... ..... ..... ..........e....
..
...
...
...
........... .....
...
...
...
...
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
1
...
...
...
...
..
..
..
..
....
...
...
...
...
..
..
..
..
....
.
.
.
.
.
.
.
.
.
.
.
.
...
...
...
...
....
..
..
..
..
....
....
....
....
....
.................
.................
.................
.................
...
...
.
...................................................................|...........................................|...........................................|..........................................|...........................................|...........................................|...........................................|..................................................
ω
....
1
2
3
4
5
6
7
..
Die fünf in der Grafik enthaltenen Lösungen sind eingekreist.
In dieser Darstellung ist der Ursprung der Lösungsmenge deutlicher zu erkennen. Die Nullkurven sind jeweils
getrennte parabelähnliche Äste, die sich periodisch wiederholen, wobei aber die Perioden im Verhältnis 11:34
stehen, so daß die Gesamtperiode recht lang wird. Und damit gibt es eine beträchtliche Anzahl von Lösungen,
von Periodizitäten ganz abgesehen.
Praktisch sind aber sicher nur die kleinen Werte von Interesse; vermutlich will man das kleinste ω ermitteln.
Konkret wäre also die linke Nullstelle von g(ω) bzw. der linke Kreis in der ω − λ-Ebene gesucht.
Die zweite - in Richtung wachsendes ω Nullstelle ist offenbar sehr empfindlich gegenüber kleinen Änderungen
der Aufgabenparameter, zumindest was ihren λ-Wert betrifft.
55
4.2.2
Lineare Systeme
Das Gauss-Verfahren
Das Gauss-Verfahren ist das universelle Verfahren zum Lösen beliebiger linearer Gleichungssysteme.12
Es ist anwendbar bei unter- wie bei überbestimmten Systemen und liefert - im Prinzip! - eine endgültige
Aussage über die Lösbarkeit und ggfs. die Lösungsmenge.
In der Praxis sollte man realistisch bleiben; Wunder kann es nicht vollbringen. Bei den beiden Systemen
x1 + 3x2 = 3
x1 + 3x2 = 4
und
0.333x1 + x2 = 1
0.333x1 + x2 = 1
kommt es sehr darauf an, wie der Faktor 0.333 interpretiert wird.
Nimmt man ihn wörtlich, so ist das linke System eindeutig lösbar, und das rechte auch (die Determinante
der Systemmatrix ist dann 1 · 1 − 3 · 0.333 = 0.001 6= 0.
Sieht man ihn als eine Rundung von 1/3 an, so wäre das linke System mehrdeutig lösbar und das rechte
unlösbar (Determinante = 0).
Allgemein kann man festhalten, daß ein unlösbares (oder nicht eindeutig lösbares) System von n Gleichungen mit n Unbekannten durch eine beliebig kleine Änderung der Matrixelemente oder der rechten Seiten in
ein eindeutig lösbares überführt werden kann (die Umkehrung dieser Aussage gilt nicht; eindeutig lösbare
Systeme bleiben eindeutig lösbar, solange ihre Koeffizienten nicht zu stark geändert werden). Damit wird
die Frage nach der Struktur der Lösungsmenge eigentlich hinfällig in allen Fällen, wo man die Parameter
nur mit einer gewissen Unsicherheit kennt und wo ein kritischer Fall (keine oder unendlich viele Lösungen)
in dieser Parametermenge vorkommen kann.
Zur Lösung von n Gleichungen mit n Unbekannten muß man beim Gauss-Verfahren rund n3 /3 Multiplikationen und Divisionen ausführen; der Rechenaufwand wächst also mit n recht schnell. Daneben bringt aber
eine große Zahl von Operationen ggfs. auch merkliche Rundungsfehler mit sich. Das ist ein Gesichtspunkt,
der bei Handrechnungen kaum eine Rolle spielt, in einem Computer aber beachtet werden muß.
Der wesentliche Teil des Lösungsprozesses ist die Hinrechnung; dabei wird haupsächlich ein jeweiliges Vielfaches der Pivotzeile von gewissen anderen Zeilen abgezogen. Sei i∗ die Nummer der Pivotzeile und j ∗ die der
Pivotspalte, so ergibt sich das modifizierte Element a0ij im Schema aus seinem Vorgänger durch die Formel
a0ij = aij −
ai∗ j · aij ∗
.
ai∗ j ∗
Nehmen wir an, alle Werte sind durch Rundungsfehler u. ä. bereits geringfügig verfälscht, so berechnet man
also einen Wert
(aij + εij ) −
(ai∗ j + εi∗ j ) · (aij ∗ + εij ∗ )
ai∗ j · aij ∗
ai∗ j εij ∗ + aij ∗ εi∗ j
≈ aij −
+ εij −
.
∗
∗
∗
∗
∗
∗
ai j + εi j
ai j
ai∗ j ∗
Man wird versuchen, den letzten Bruch betragsmäßig möglichst klein zu machen - das ist das Einzige, was
man tun kann, und der Freiheitsgrad besteht in der Wahl der i∗ und j ∗ , also in der Wahl des Pivotelements.
Diese Formel legt nun nahe, dieses betragsmäßig möglichst groß zu machen.
Löst man Übungsaufgaben mit ganzzahligen Koeffizienten, so wählt man das Pivotelement ebenfalls mit
Bedacht, aber nach ganz anderen Gesichtspunkten: Es sollte möglichst ±1 sein, damit man im laufenden
Schritt Brüche vermeiden kann, usw.. In einem Computerprogramm spielen diese Bequemlichkeitsüberlegungen keinerlei Rolle; und ganze Zahlen kann man fast nie erwarten.
Die prinzipielle Forderung an ein Pivotelement ist seine Verschiedenheit von Null; bei numerischer Rechnung
weiß man aber, daß ein Wert durch Rundungsfehler von Null verschieden sein kann, aber diese meint (vgl. das
Beispiel mit dem Koeffizienten 0.333 eingangs). Durch diese Zahl dürfte man zwar dividieren, sollte es aber
tunlichst unterlassen, denn sie ist ein Rundungsfehler, also völlig willkürlich. - Um nun zu verhindern, an ein
solches Pivotelement zu geraten, ist es also notwendig, von diesen mehr zu fordern als nur ’verschieden von
Null’ zu sein. Die Wahl des betragsgrößten Elements unter allen in Frage kommenden Kandidaten schließt
solche falschen Freunde meist aus.
’Meist’ bedeutet ’nicht immer’. Wenn alle verbleibenden Elemente nahe bei Null liegen, so sind sie vielleicht
allesamt Rundungsfehler? Man weiß, daß ein System nicht lösbar ist, wenn in einem Schritt des GaussVerfahrens im Matrixteil lauter Nullen stehen und in der rechten Seite ein von Null verschiedener Wert.
Aber das ist ist Theorie - praktisch sind diese Nullen weder links noch rechts unbedingt exakt, und damit
12 Was
ist von der Cramerschen Regel zu halten?
56
ist die Grenze verwischt.
Man muß also im Programm ein Kriterium festlegen, wann man diesen Fall als eingetreten ansieht.
Die Strategie, unter allen verbliebenen Kandidaten den betragsgrößten zu wählen, nennt man ’totale Pivotisierung’. Dann wird im rechts stehenden Bruch der letzten Formel
ai∗ j
ai∗ j εij ∗ + aij ∗ εi∗ j
aij ∗
=
εij ∗ +
ε i∗ j .
ai∗ j ∗
ai∗ j ∗
ai∗ j ∗
Die beiden Abweichungen εi∗ j und εij ∗ werden beide mit Faktoren multipliziert, deren Betrag höchstens 1
ist; sie werden also keineswegs vergrößert.
Das ist die in einem gewissen Sinne beste Variante; wie alles Gute hat sie ihren Preis. Bevor man den
betreffenden Schritt der Hinrechnung macht muß man also all diese Werte durchsuchen und vergleichen. Das
dauert seine Zeit; der Vergleich x < y erfolgt meist als Vorzeichentest von x − y. Bei einem n × n-System
sind also im m-ten Schritt (n − m)2 Werte zu prüfen, und insgesamt fallen wiederum rund n3 /3 Vergleiche
an. Das erhöht die Rechenzeit merklich, und es hängt von der Situation ab, ob man diesen Preis zahlen kann
oder muß.13
Oftmals begnügt man sich damit, das Pivotelement nicht unter allen möglichen Kandidaten zu suchen,
sondern nur unter den in Frage kommenden Elementen der betreffenden Spalte oder Zeile. Dementsprechend
nennt man diese Varianten ’Spaltenpivotisierung’ oder ’Zeilenpivotisierung’. Sie sind i. a. weniger genau als
die totale Pivotisierung, aber dafür wählen sie unter nur n − m Elementen und sind damit deutlich schneller.
Und sie schließen das Hereinfallen auf eine getarnte Null ebenfalls ziemlich sicher aus.
Jeder dieser Größenvergleiche ist allerdings sinnlos wie ein unfairer Wettkampf, wenn man nicht für gleiche
Bedingungen sorgt. Angenommen, man hat einen verzweigten Stromkreis; in einer Masche gilt I2 +I4 −I5 = 0,
und über eine Kontur hat man I1 /R1 + I2 /R2 + I4 /R4 = −9V . Bei R1 = 200Ω, R2 = 400Ω und R4 = 500Ω
sind die Zahlenkoeffizienten in der letzten Gleichung 0.005, 0.0025 und 0.002; das Pivotelement wäre bei
totaler Pivotisierung eine 1 aus der ersten Gleichung.
Mißt man dagegen die Widerstände in kΩ, was an der Aufgabe inhaltlich nichts ändert, so hätte die zweite
Gleichung die Koeffizienten 5, 2.5 und 2, und der erste davon wäre das Pivotelement.
Eine solche Willkür ist natürlich nicht akzeptabel. Man beachte, daß man jede Gleichung eines Systems mit
jedem von Null verschiedenen Wert multiplizieren darf. Das würde die Reihenfolge der Pivotwahl aber total
ändern, ohne daß es dafür einen sachlichen Grund gibt (die in den Parametern enthaltenen Fehler werden
dabei mitmultipliziert).
Hieraus ergibt sich die Notwendigkeit, das System zu skalieren. Das kann auf verschiedene Weise geschehen; in
jedem Fall wird jede Gleichung mit einem spezifischen Wert multipliziert, der sich aus den Matrixkoeffizienten
ergibt (die rechte Seite spielt keine Rolle, wird aber mitmultipliziert):
• Kehrwert der Länge des Zeilenvektors
In der i-ten Zeile ermittelt man den Wert
v
uX
u n 2
t
aij
j=1
und dividiert die gesamte Zeile durch diesen14 . Das System Ax = b geht über in ein äquivalentes System
A0 x = b0 , wobei alle Zeilenvektoren a(i)0 von A0 gleichlang (im geometrischen Sinne: |a0(i) | = 1) sind.
Alle Matrixelemente (nicht die rechten Seiten!) sind danach betragsmäßig kleiner oder gleich 1.
Diese Aktion ist ziemlich aufwendig.
• Kehrwert der Summe der Beträge der Elemente der Zeile
Man ermittelt analog
n
X
|aij | ,
j=1
analog zum vorigen Fall, aber etwas weniger aufwendig.
• Kehrwert des betragsgrößten Elements der Zeile
Nach der Division ist dieses - und evtl. noch andere - genau 1 (oder -1), die restlichen sind betragsmäßig
kleiner.
13 Wenn man Zugriff auf die Struktur der Gleitkommazahlen hat, so kann man den Prozeß beschleunigen, indem man nicht
die kompletten Zahlen vergleicht, sondern nur deren Dualexponenten. Damit bekommt man evtl. ein Pivotelement, das nur
etwa die Hälfte des größten (betragsmäßig) ist, aber das ist nicht so schlimm. Der Vergleich der ganzzahligen Exponenten geht
schneller. Allerdings muß man aufpassen: Die Zahl 0 hat in der Regel den Exponenten 0.
14 Was ist, wenn er Null ist?
57
Korrekterweise müßte man diese Operation nach jedem Schritt mit der verbliebenen Restmatrix machen, aber
das treibt den Aufwand sehr hoch. Ein weiterer Nachteil ist, daß diese Skalierungen allesamt Rundungsfehler
erzeugen. Das kann man vermeiden, indem man jede Zeile mit einer exakten Zweierpotenz multipliziert, die
man so wählt, daß die maximalen Werte halbwegs in dieselbe Größenordnung kommen. Dabei werden die
Mantissen der Gleitkommazahlen nicht verändert, also keine Rundungsfehler erzeugt. (Diese Multiplikation
kann als Addition in den Exponenten ausgeführt werden.)
Die genannten Methoden der Matrixskalierung und der Pivotwahl sind keineswegs ausgeklügelt; es gibt tiefsinnigere Strategien. Es soll damit demonstriert werden, daß Löser für lineare Gleichungssysteme nicht gebaut
werden sollten, indem man den Basisalgorithmus des Gauss-Verfahrens allzu blauäugig programmiert und
es dabei bewenden läßt. Wenn vorhanden sollte man auf seriöse professionelle Software zugreifen.
Ein möglicher Kompromiß zwischen Aufwand und Genauigkeit des Resultats besteht darin, daß das Programm das Problem nur minimal aufbereitet und versucht, es nur mit z. B. Spaltenpivotisierung zu lösen.
Dabei achtet es auf mögliche Probleme (sehr klein werdende Pivotelemente ...). Treten sie nicht auf, so ist alles in Ordnung, und es liefert schnell und effektiv eine akzeptabel gute Lösung. Gibt es aber Schwierigkeiten,
so kehrt es zum Ausgangsproblem zurück und rechnet sorgfältiger. Reicht das nicht aus, so wird noch mehr
zugeschaltet: Skalierungen, Pivotwahl, höhere Stellenzahl ..., bis das Programm entweder eine brauchbare
Lösung findet oder feststellt, daß zu diesem System keine angebbar ist.
Bei diesem Problem bewährt sich die sogenannte Intervallarithmetik. Ihre Idee besteht darin, für jeden Wert
zwei Zahlen anzugeben: eine untere und eine obere Grenze. Das kann bereits mit den Eingabewerten geschehen, wenn es sich um Meßfehler mit einer gewissen Fehlerschranke handelt; sind sie exakt, so sind beide
Zahlen gleich. Allgemein wird ein Wert also durch ein Intervall repräsentiert, in dem er mit Sicherheit liegt.
Addiert man zwei Größen, so werden dabei die beiden oberen Grenzen addiert, und entsprechend die beiden
unteren. Im ersten Fall wird dabei nur nach oben gerundet, im zweiten nach unten. Bei der Subtraktion wird
von der oberen Grenze des einen Werts die untere des anderen abgezogen, usw.. Multiplikation und Division
erfordern Vorzeichenbetrachtungen; geteilt werden darf nicht, wenn das Nennerintervall die Null enthält.
Es gibt spezielle Software, die all diese Operationen automatisch ausführt; man programmiert nach wie vor
a:=b+c; intern stehen aber für jede Größe Zahlenpaare, und die Addition ist der geschilderte komplexe Vorgang.
Löst man nun ein Gleichungssystem mit Hilfe dieser Intervallarithmetik, so bekommt man eine Reihe exakter und sicherer Aussagen von z. B. der Form x1 = [6.11456, 6.12072] - zwei Grenzen, zwischen denen
die Lösung liegen muß. Diese Grenzen bestimmen sich aus denen der Eingangsdaten (Matrixkoeffizienten
und rechte Seiten) und den in der Rechnung gemachten Rundungsfehlern. - Bei einer Antwort der Form
x1 = [2.887415, 19.50023] weiß man, daß von diesem System nichts Gutes zu erwarten ist.
Intervallarithmetik läßt sich natürlich auch zur Lösung anderer Probleme einsetzen. Ihr Nachteil ist, daß sie
den Aufwand bei der Erfassung der Eingabedaten verdoppelt, den doppelten Speicherplatz für die Daten
benötigt und ein Mehrfaches an Rechenzeit in Anspruch nimmt (verglichen mit der klassischen Rechenweise).
Und sie nützt demjenigen Computernutzer nichts, dessen gekaufte Software keine beinhaltet.
Mit Hilfe der sogenannten Nachiteration kann man oft das Resultat bei der Lösung eines linearen Gleichungssystems noch verbessern:
Angenommen, man hat einen Lösungsvektor x̄ des Systems Ax = b gefunden, der aber durch Rundungsfehler
verfälscht ist. Er weicht vom richtigen Lösungsvektor x∗ um einen Vektor ε ab: x̄ = x∗ + ε. Setzt man ihn in
das System ein, so erhält man statt der rechten Seite b einen Vektor b + δ. Nun ist wegen Ax∗ = b
Ax̄ = A(x∗ + ε) = Ax∗ + Aε = b + δ
=⇒
Aε = δ
Wenn man ε kennt, so kann man diesen Vektor von x̄ abziehen und damit x∗ erhalten. - Nun ist allerdings
δ problemlos bestimmbar, und ε findet man als Lösung des Systems Aε = δ.
Das bedeutet allerdings, ein fast identisches Gleichungssystem ein zweites Mal zu lösen.
Natürlich entsehen bei dessen Lösung neue Rundungsfehler. Da aber die neue rechte Seite δ sicher wesentlich
kleiner ist als b: |δ| << |b| (ansonsten wäre die Rechnung sinnlos, weil die Rundungsfehler größer ausfallen
als die Werte) sind auch die Fehler in ε jetzt viel kleiner als in x̄, und man erhält eine deutliche Verbesserung.
Diesen Schritt kann man ggfs. nochmals wiederholen, bis x∗ zufriedenstellend genau bestimmt ist.
58
Überbestimmte Systeme
Wenn mehr Gleichungen als Unbekannte gegeben sind, so kann das Gleichungssystem durchaus lösbar sein15 ;
in den meisten Fällen ist es aber unlösbar. Das muß aber nicht bedeuten, daß dieses System sinnlos ist.
Beispiel: An einem Teil mißt man zwei in einer Linie hintereinander liegende Teilstrecken zu 72.6mm und
105.3mm, für die Gesamtstrecke erhält man 177.7mm. - Das paßt nicht zusammen; wenn man keine genaueren
Messungen mehr machen kann, so steht man vor dem Problem, diese Werte vernünftig zu interpretieren.
War keine der drei Messungen besonders verdächtig, so besteht kein Grund, einen der Werte auszuschließen.
Die Information kann man so darstellen: Gesucht sind Streckenlängen x1 und x2 , die den folgenden drei
Gleichungen genügen:
x1 = 72.6 ,
x2 = 105.3 ,
x1 + x2 = 177.7 .
Ein möglicher Ausweg besteht darin, den Begriff der Lösung eines Systems abzuschwächen und zu verallgemeinern. Ideal wäre also ein Vektor x, mit dem Ax = b erfüllt würde. Wenn das nicht zu erreichen ist, so
setzen wir beliebige Vektoren x̄ ein und erhalten statt b einen Vektor u(x̄) : Ax̄ = u(x̄) . Der Begriff der
verallgemeinerten Lösung geht nun von der Idee aus, dasjenige xv unter allen x̄ auszuwählen, für das die zugehörige rechte Seite u dem vorgegebenen b möglichst nahe kommt. Dazu benutzen wir die Abstandsfunktion
%(x, y) = |x − y|, die sich als die Länge der Differenz zweier Vektoren ergibt:
xv :
%(Axv , b) = |Axv − b| ≤ |Ax̄ − b| = %(Ax̄, b) ∀x̄ .
Auf das obige Beispiel angewandt: Gesucht werden Werte x1 , x2 derart, daß der Ausdruck
p
(x1 − 72.6)2 + (x2 − 105.3)2 + (x1 + x2 − 177.7)2
möglichst klein wird. Bestenfalls wird er Null; im konkreten Fall schafft er das aber nie, da dazu alle drei
Quadrate Null werden müßten, für die vorliegenden Werte geht das aber für höchstens zwei von ihnen, und
dafür muß nicht einmal die Summe ihren kleinsten Wert annehmen.
Es ist einleuchtend und kann auch direkt bewiesen werden, daß eine solche verallgemeinerte Lösung stets
existiert; sie muß nicht eindeutig bestimmt sein. Mit ihr befindet man sich auch nicht im Widerspruch zur
Lösung im bisherigen Sinne. Wenn eine Lösung x existiert, die die Gleichung exakt erfüllt: Ax = b, so ist sie
gleichzeitig eine verallgemeinerte Lösung, denn die zu ihr gehörende rechte Seite ist b selbst, und das hat zu
b den nicht mehr zu unterbietenden Abstand Null.
Da nun die Existenz kein Problem mehr ist bleibt die Frage, wie dieses xv gefunden werden kann. Ziel ist
es, diesen Vektor so zu bestimmen, daß die Länge |Axv − b| möglichst gering wird; das ist äquivalent zu
der bequemeren Forderung, daß das Quadrat dieser Länge minimal werden soll. Das Quadrat der Länge des
Vektors y ergibt sich bekanntlich zu |y|2 = y T y .
Nehmen wir für einen Moment an, wir hätten dieses xv schon gefunden, und verwenden wir statt seiner den
abweichenden Vektor xλ = xv + λw mit einem reellen Parameter λ und irgendeinem Vektor w. Dieses w
halten wir fest und variieren das λ, dann ist das Quadrat des Abstandes von Axλ zu b eine Funktion von λ:
F (λ) = |Axλ − b|2 = (Axλ − b)T (Axλ − b) = ((Axλ )T − bT )(Axλ − b) = (xTλ AT − bT )(Axλ − b) =
= xTλ AT Axλ − xTλ AT b − bT Axλ − bT b = (xv + λw)T AT A(xv + λw) − (xv + λw)T AT b − bT A(xv + λw) − bT b =
= xTv AT Axv + λxTv AT Aw + λwT AT Axv + λ2 wT AT Aw − xTv AT b − λwT AT b − bT Axv − λbT Aw − bT b .
Hieraus erkennt man, daß F (λ) in Wirklichkeit ein quadratisches Polynom in λ ist. Wir sortieren seine
Koeffizienten, wobei wir uns aber mit dem Absolutglied keine Mühe machen und es einfach mit c bezeichnen:
F (λ) = (wT AT Aw)λ2 + [xTv AT Aw + wT AT Axv − wT AT b − bT Aw]λ + c .
Besonders interessiert uns der Faktor vor dem linearen Term. Eine Zahl entspricht einer 1 × 1 - Matrix,
und dieses Objekt ändert sich nicht beim Transponieren. Für dimensionsmäßig geeignete, aber ansonsten
beliebige Vektoren x, y und Matrizen B gilt
xT By = (xT By)T = y T B T x .
Damit wird nun
xTv AT Aw + wT AT Axv − wT AT b − bT Aw = 2[wT AT Axv − wT AT b] = 2wT (AT Axv − AT b) ,
15 Typisches Beispiel: Stromstärkeberechnung in einem verzweigten Stromkreis; nutzt man alle Maschen und Knoten, so erhält
man leicht wesentlich mehr Gleichungen als Unbekannte. Trotzdem ist dieses System eindeutig lösbar.
59
und die Forderung, daß xλ bei λ = 0 den optimalen Vektor xv ergeben soll, bringt mit sich, daß die
quadratische Funktion F (λ) bei λ = 0 ein Minimum haben soll. Das Minimum bedeutet bei einer quadratischen Funktion bekanntlich den Scheitelpunkt, und wenn dessen Abszisse Null sein soll, so verlangt dies
das Fehlen des linearen Terms. Mithin ist xv die verallgemeinerte Lösung, wenn wT (AT Axv − AT b) = 0
gilt. Der Vektor w war beliebig; diese Bedingung muß also für jeden Vektor w erfüllt sein. Demzufolge soll
AT Axv − AT b zu allen Vektoren w orthogonal sein, und der einzige Vektor, der ein solches Kunststück
fertigbringt, ist der Nullvektor: AT Axv − AT b = Θ .
Stellt man diese Gleichung um, so gelangt man zur sogenannten Gaussschen Normalgleichung
AT Axv = AT b .
Bei a : m × n, m > n, ist AT A : n × n eine quadratische Matrix, und AT b ist ein genau n-dimensionaler
Vektor. Es resultiert also ein System von n Gleichungen mit n Unbekannten.
Beispiel: Kehren wir zurück zum obigen Exempel; in Matrixschreibweise hat man das System




1 0
72.6
x
1
Ax =  0 1 
=  105.3  = b
=⇒
x2
1 1
177.7
AT Axv =
1
1
0
0
1
1

1
 0
1



0
72.6
x
1
0
1
v,1
 105.3  = AT b
1 
=
xv,2
0 1 1
1
177.7
2 1
xv,1
250.3
=
.
1 2
xv,2
283.0
=⇒
Dieses letzte System wird gelöst:
2
1
1
0
0
1
2
0.5
1.5
1
250.3
283.0
125.15
157.85
105.233
Mit der Rückrechnung erhält man noch xv,1 = 72.533 . Nach dem Runden auf eine der ursprünglichen Meßgenauigkeit angepaßten Exaktheit wird xv,1 = 72.5 und xv,2 = 105.2. Die Methode hat also etwas zwischen
den drei Messungen vermittelt.
Die Berechnung der Matrix AT A kann effektiv durchgeführt werden, wenn man berücksichtigt, daß
(AT A)T = AT (AT )T = AT A gilt. Diese Matrix ist also symmetrisch und es reicht demzufolge aus, die
Elemente auf der Hauptdiagonale und beispielsweise darüber zu berechnen; die restlichen ergeben sich dann
durch die Symmetrie.
Die Matrix AT A ist nicht nur symmetrisch, sondern auch i. a. positiv definit (allgemein: nichtnegativ definit).
Das bedeutet, daß für jeden Vektor x passender Größe das Skalarprodukt AT Ax · x nichtnegativ ist. Für
Gleichungssysteme mit derartigen Matrizen gibt es günstigere Lösungsverfahren als das universelle GaussVerfahren, das weder diese Eigenschaft16 noch die Symmetrie ausnutzt; professionelle Software sollte darauf
zurückgreifen.
Eine Besonderheit der verallgemeinerten Lösung sei erwähnt: Bei einem klassischen Gleichungssystem ändert
sich Lösungsverhalten und Lösung nicht, wenn man Gleichungen mit von Null verschiedenen Faktoren multipliziert. Hier dagegen hat dies eine Wirkung: Multiplizieren wir probehalber im als Beispiel betrachteten
System die erste Gleichung mit 10, so wird
10x1 = 726 ,
x2 = 105.3 ,
x1 + x2 = 177.7 .
Die Rechnung ist

10
Ax =  0
1
16 Der



0
726
x1
1 
=  105.3  = b
x2
1
177.7
=⇒
Begriff der Definitheit ist nur für symmetrische (allgemeiner: hermitesche) Matrizen sinnvoll.
60
AT Axv =
101 1
1
2
xv,1
xv,2




0
726
x
10
0
1
v,1
 105.3  = AT b =⇒
1 
=
xv,2
0 1 1
1
177.7
7437.7
=
=⇒ x1 = 72.5990, x2 = 105.2005, x1 + x2 = 177.7995 .
283.0
10 0 1
1 0 1
10
 0
1
Der Wert von x1 wird damit wesentlich nach der ersten Messung eingestellt; die anderen beiden Werte werden wesentlich schwächer berücksichtigt. Die erste Gleichung ist durch diesen Faktor 10 stärker gewichtet
worden als die anderen beiden. Die Quadrate der Abweichungen in den drei Gleichungen liegen wieder in
vergleichbaren Größenordnungen; die Ausgangsgleichung (1) wird dann aber recht genau erfüllt.
Durch solche Wichtungsfaktoren kann man Meßwerte verschiedener Bedeutung gegeneinander abwägen. Hat
man z. B. zwei Meßreihen für gewisse Werte gewonnen, wobei die Messungen der zweiten Reihe nach einem
prinzipiell weniger genauen Verfahren erfolgten, weswegen man die Resultate hauptsächlich aus den Werten
der ersten Reihe berechnen will und die der zweiten nur geringer beachten möchte, so kann man die entsprechenden identischen Gleichungen aufstellen und die ersten mit Faktoren > 1 multiplizieren (oder die zweiten
mit positiven Faktoren kleiner als 1). (Ein Faktor Null würde eine Gleichung überhaupt aus dem System
werfen.)
Soll eine Gleichung praktisch exakt erfüllt werden, so übernehme man sie mit einem großen Wichtungsfaktor
in das System.
Schlußfolgerung: Bei Systemen von Gleichungen verschiedener Herkunft (vgl. das Beispiel zum verzweigten
Stromkreis auf Seite 57) muß unbedingt sinnvoll skaliert werden.
Was ist zu machen, wenn das System einige Gleichungen enthält, die im Unterschied zu den restlichen nicht
nur näherungsweise, sondern exakt erfüllt werden müssen, und wenn man nicht den Kompromiß mit der
betonten Wichtung dieser Gleichungen wählen will?
Diese p Gleichungen des Systems Ax = b werden als erste geschrieben. (Die Reihenfolge der Gleichungen im
System ist im Prinzip bedeutungslos.)
Aus den oberen p Zeilen der Matrix A : m × n wählt man p Spalten aus, die eine reguläre Matrix P bilden,
und tauscht diese ggfs. nach vorn (was nur eine unwesentliche Änderung der Reihenfolge der Unbekannten
bedeutet).
Nun nennen wir die zugehörigen ersten p Unbekannten y1 bis yp , und die restlichen z1 bis zn−p .
Die ersten p Komponenten des Vektors b der rechten Seite mögen den Vektor c bilden, die verbleibenden
m − p den Vektor d.
Beispiel:
2x1 − 2x2 + x3 + 3x4 + x5 = 5 ,
2x1 − x2 − x3 + 3x4 + x5 = 8
2x1 − 2x2 + 5x4 − 7x6 = 3 ,
x1 + 2x2 − 6x3 − x4 + 5x5 = −1 ,
,
6x1 − 3x4 + 4x5 = 0 ,
x1 − 7x2 − 3x3 = 11 .
Die beiden eingerahmten Gleichungen mögen exakt gelten, der Rest möglichst gut.
Die ersten beiden Spalten der ersten beiden Zeilen Systemmatrix ergeben die Determinante
2 −2 2 −2 = 0 ,
die zugehörige Matrix ist folglich singulär und ungeeignet. Nehmen wir statt dessen die erste und dritte
Spalte
2 1 6
0.
2 0 = −2 =
Die dritte Spalte wird deshalb mit der zweiten getauscht; in Matrixschreibweise resultiert das System (man
beachte den Tausch im Vektor x !)
61
..



..
5
2
1 ... −2
3
1


..




x1
 3 
 2
0 ... −2
5 −7 



 .....................................
..........
..
x3 


 .......


8
3
1 


 2 −1 .... −1
x2 
= 
 .


..




 1 −6 .. 2 −1

−1
5


x




4
...




0 
0 ... 0 −3
4 
x5

 6
..
−11
1 −3 ... −7
0
0
.
Die (neue) Matrix A wird entlang den punktierten Linien in vier Blöcke p, Q, R und S aufgespalten; es
entsteht eine Blockmatrix, also eine Matrix, deren vier Elemente wiederum Matrizen sind:
P Q
A =
R S

mit

P =
2
2
1
0
, Q =
−2
−2
3
5
1
−7
2
 1
, R = 
 6
1


−1
−1
 2
−6 
 , S = 
 0
0 
−7
−3

3 1
−1 5 
 .
−3 4 
0 0
Sei nun y = (x1 , x3 )T und z = (x2 , x4 , x5 )T , ferner c = (5, 3)T und d = (8, −1, 0, −11)T .
Dann gilt exakt P y + Qz = c; hieraus folgt y in Abhängigkeit von z:
P y = c − Qz
=⇒
P −1 P y = P −1 (c − Qz)
=⇒
y = P −1 c − P −1 Qz .
Dabei wurde ausgenutzt, daß P regulär ist.
Diese Beziehung wird in die restlichen Gleichungen eingesetzt, die nur noch möglichst gut erfüllt werden
sollen (und können):
Ry + Sz = d
=⇒
R(P −1 c − P −1 Qz) + Sz = d
=⇒
Sz − RP −1 Qz = d − RP −1 c .
Für das resultierende überbestimmte lineare Gleichungssystem (S − RP −1 Q)z = d − RP −1 c wird die
Gausssche Normalgleichung aufgestellt
(S − RP −1 Q)T (S − RP −1 Q)z = (S − RP −1 Q)T (d − RP −1 c)
und gelöst.
Im vorliegenden Beispiel sind das vier Gleichungen für die drei Unbekannten des Vektors z, also x2 , x4
und x5 in den ursprünglichen Größen. Diese können also damit berechnet werden, und aus der eindeutigen
Darstellung y = P −1 c − P −1 Qz bestimmen sich dann x1 und x3 so, daß die ersten beiden Gleichungen des
Ausgangssystems exakt erfüllt werden.
Schwach besetzte Systeme
... So bestehen wir selbst zu mehr als die Hälfte unseres Körpergewichts aus Wasser, und es gibt z. B.
Meeresalgen oder Quallen, die mehr als 96% Wasser enthalten. Es ist gewiß überaus bemerkenswert,
daß solche Organismen nicht nur ihre Form erhalten können, sondern dazu noch sich bewegen,
schwimmen, fressen, lieben können - und das alles mit 96% Wasser im Leibe!
Wolfgang Ostwald, Die Welt der vernachlässigten Dimensionen
Stellen wir uns ein umfangreiches elektrisches Netz vor, auf dessen Maschen die Ströme berechnet werden
sollen. Es seien n Unbekannte Ij gesucht, wobei n ein recht großer Wert ist. Jede Kontur bestehe aus maximal
sechs Maschen, und in keinen Knoten kommen mehr als fünf Leitungen zusammen.
Das Netz wird durch ein lineares Gleichungssystem modelliert; dabei tauchen aber in jeder Gleichung nur
maximal fünf bzw. sechs Unbekannte auf. Die restlichen gehen mit den Vorfaktoren Null ein.
Reduziert man das System auf n wesentliche Gleichungen, so hat seine Matrix also n2 Elemente; auf Grund
dieser Spezifik sind darin aber nur 5n . . . 6n Elemente von Null verschieden. Bei n = 100 sind das etwa 5.5%,
und die Matrix besteht zu etwa 94.5% aus Wasser ... pardon, Nullen.
Ein noch drastischeres Beispiel: Es wird ein räumliches Feld betrachtet; der Einfachheit halber sei das
Volumen, in dem es vorliegt, würfelförmig und die Feldgröße skalar (z. B. ein Druck, eine Temperatur oder
eine Dichte). Der Würfel, dessen Kanten parallel zu den Koordinatenachsen seien, eine Ecke im Ursprung,
62
wird in jede Richtung in n gleichlange Abschnitte der Länge h geteilt; es entstehen die Punkte xi = ih, yj =
jh und zk = kh.
Für die Feldgröße u(x, y, z) gelte z. B. die partielle Differentialgleichung ∆u = 0 mit dem Laplace-Operator
∆u = uxx + uyy + uzz - der Summe der zweiten partiellen Ableitungen. Auf der Oberfläche des Würfels sei
die Funktion vorgegeben.
Für die Punkte (xi , yj , zj ) wird ein Näherungswert uijk zum Funktionswert u(xi , yj , zj ) gesucht. Auf der
Oberfläche des Würfels wird der gegebene Wert verwendet; in jedem ’inneren’ Punkt wird die Summe der
zweiten partiellen Ableitungen durch ihre Näherung ersetzt:
ui,j+1,k − 2uijk + ui,j−1,k
uij,k+1 − 2uijk + uij,k−1
ui+1,jk − 2uijk + ui−1,jk
+
+
= 0.
h2
h2
h2
Es gibt in jeder Richtung n − 1 innere Punkte; insgesamt entstehen also (n − 1)3 derartige lineare Gleichungen. Das ist ein sinnvolles System, das tatsächlich zur Berechnung dieses Feldes genutzt werden kann. Die
meisten Gleichungen sind homogen, aber nicht alle, denn in den oberflächennahen Schichten gehen Werte
ein, die auf dieser liegen, also bekannt sind. Berechnet werden nur die (n − 1)3 inneren Werte.
Jede Gleichung enthält maximal sieben Unbekannte; eine, zwei oder drei davon können auf der Oberfläche
liegen, so daß sich diese Zahl entsprechend verringert.
Angenommen, man hat mit n = 101 unterteilt - was keine unreal große Zahl ist - so hat man also 106
Gleichungen mit ebenso vielen Unbekannten. Nehmen wir eine Zahl mit 6 Byte an, so braucht man zur
Darstellung des (inneren) Feldes etwa 6 Megabyte.
Versucht man nun, das System in der üblichen Weise zu behandeln: 1.) Berechnen und Abspeichern der
Matrix und der rechten Seite, 2.) Lösen mit dem Gauss-Verfahren, ... so benötigt man zur Speicherung der
kompletten Matrix 1012 Zahlen oder rund 6 Terabyte.
In jeder Matrixzeile gibt es maximal 7 von Null verschiede Zahlen; speichert man nur diese, so spart man
mindestens 99.999993% des Speicherplatzes und kommt mit etwa 42 Megabyte aus.
Solche Matrizen, die nur relativ wenige von Null verschiedene Elemente enthalten, nennt man ’schwach besetzt’ (engl.:’sparse matrices’); die Systeme analog ebenfalls ’schwach besetzt’. Sie enthalten typischerweise
hunderte bis Millionen Unbekannte; eine Abspeicherung der kompletten Matrix wäre uneffektiv bis unmöglich.
Je nach Herkunft des Systems gibt es für solche Gleichungssysteme spezielle Lösungsverfahren; die Feldberechnung kann z. B. durch ein geeignetes Iterationsverfahren (vgl. nächsten Punkt) erfolgen, wobei das
Gleichungssystem nicht einmal explizit aufgestellt werden muß. Auf diese ausgeklügelten Methoden kann
hier nicht näher eingegangen werden; es sollte das Problem dargelegt werden.
Will man ein solches schwach besetztes System mit einem universellen Lösungsverfahren behandeln (was,
wie gesagt, in den meisten Fällen unsachgemäß ist), so muß man dieses wenigstens geeignet programmieren.
Die simpelste Variante besteht nun darin, die von Null verschiedenen Elemente der Matrix und alle rechten
Seiten in zwei fortlaufenden linearen Feldern (Vektoren) zu speichern - den Wert in einem, und seinen Spaltenindex im zweiten.
Wenn die ersten zwei Gleichungen eines Systems mit n = 266 Unbekannten die Form
2x1 − 7x16 + 3x71 + x148 = 0 ,
6x1 + 3x2 − 4x9 + x207 = −7
haben, so kann man dies also komprimieren zu
2
1
-7
16
3
71
1
148
0
267
6
1
3
2
-4
9
1
207
-7
267
...
,
...
wobei die rechten Seiten den Spaltenindex n + 1 = 267 erhalten haben. Das ist natürlich, denn sie werden in
den Formeln der Hinrechnung wie die Matrixemente behandelt; nur als Pivotelemente dürfen sie nicht dienen.
Das Auftreten einer Spaltennummer 267 ist gleichzeitig das Zeichen, daß dahinter die nächste Matrixzeile
beginnt. Rechte Seiten werden immer gespeichert, auch wenn sie Null sind.
Wird im Rahmen der Hinrechnung die erste Zeile dreimal von der zweiten subtrahiert, so entsteht die
Gleichung
3x2 − 4x9 + 21x16 − 9x71 − 3x148 + x207 = −7 oder
...
...
3
2
−4
9
21 −9
16 71
−3
148
+1
207
−7 . . .
.
267 . . .
Damit kann man das Gauss-Verfahren wie gehabt ablaufen lassen; die Programmierung unterscheidet sich
allerdings beträchtlich.
Die beiden Ausgangszeilen hatten je vier Elemente pro Zeile; die neue hat sechs. Dies ist eine unschöne
63
Erscheinung. Dieses sogenannte ’fill in’ muß nach Möglichkeit vermieden werden, da dadurch die Anzahl der
Nicht-Null-Elemente in der Restmatrix geradezu explosionsartig wächst. Das geschieht hauptsächlich durch
sorgfältige Pivotwahl, wobei jetzt noch weitere Gesichtspunkte beachtet werden müssen. Ohne zusätzliche
Theorie ist dabei wenig zu erreichen.
Iterative Lösungsverfahren
... Dafür forderte S. Woolf 60 Prozent vom Reingewinn. Die Company wußte recht gut, daß
das Syndikat ”hard up” war und bot 30 Prozent. S. Woolf aber schwor, daß er sich eher
lebendig einmauern lasse, als auf die Schamlosigkeit einzugehen. Er wandte sich sofort an
die ”American Smelters”, und die Pittsburg Co. kam zurück und bot 40 Prozent.
Woolf ging auf 50 Prozent herab und drohte, daß das Syndikat in Zukunft überhaupt keine
Handvoll Erz mehr fördern werde;... Endlich einigte man sich um 46 13 Prozent. Um das
letzte Drittel kämpfte S. Woolf wie ein Massaikrieger...
B. Kellermann, Der Tunnel
Für Systeme speziellen Typs können Verfahren, deren Idee wesentlich von der des Gauss - Verfahrens abweicht, einfacher oder effektiver sein. Dazu gehören iterative Verfahren.
Dabei kann man aber nicht hoffen, ein universelles Verfahren zu erhalten. Eine mögliche Anwendungssituation ergibt sich im folgenden Fall:
Angenommen, der Ausdruck in jeder Gleichung des linearen Systems von n Gleichungen mit n Unbekannten
hängt stark von einer Variablen ab und kaum von den anderen (jede Gleichung von einer anderen Variablen). Da man die Gleichungen beliebig numerieren kann, so gehen wir davon aus, daß die k- te Gleichung
die Unbekannte xk als wesentliche Einflußgröße enthält. ”Wesentlicher Einfluß” bedeutet in erster Linie, daß
diese Unbekannte einen von Null verschiedenen Koeffizienten aufweist - sonst wäre sie völlig bedeutungslos.
Nehmen wir weiter an, daß man aus der Problemkenntnis die ungefähr zu erwartenden Resultate näherungs(0)
(0)
(0)
weise schätzen kann. Diese Zahlen ergeben den sogenannten Startvektor x(0) = (x1 , x2 , . . . , xn )T . Die
erste Gleichung können wir - da a11 nach Voraussetzung von Null verschieden ist - nach x1 auflösen:
x1 =
1
(b1 − a12 x2 − a13 x3 − . . . a1n xn ) .
a11
Nun wird ausgenutzt, daß der Einfluß von x2 , x3 , . . . , xn gering ist; wenn man also statt der vorläufig unbekannten Werte für die rechts stehenden n − 1 Unbekannten ihre Schätzwerte aus dem Startvektor einsetzt,
so erhält man aus obiger Beziehung ein x1 , das der Wahrheit vielleicht näherkommt, als das nur vermutete
(0)
(1)
x1 . Nennen wir den so berechneten Wert x1 und heben wir ihn auf. Analog löst man die zweite Gleichung
nach x2 auf:
1
(b2 − a21 x1 − a23 x3 − . . . a2n xn ) .
x2 =
a22
(0)
(0)
(0)
(0)
(0)
(1)
Unter Verwendung der Werte aus dem Startvektor, also von x1 , x3 , x4 , . . . , xn , wird x2 zu x2 verbessert, und so geht es weiter mit allen Unbekannten. Das Verfahren wird an einem Beispiel erläutert:
Gleichungssystem:
9x1 − x2 + 2x3 = 13 ,
x1 − 8x2 − x3 = −18 ,
2x1 + x2 + 12x3 = 40 .
Das System ist so konstruiert, daß es die Lösungen x1 = 1, x2 = 2 und x3 = 3 hat. Das ”vergessen” wir
(0)
wieder und schätzen alle Lösungen mit xk = 1 , k = 1, 2, 3,. Hieraus folgt
(1)
x1 =
1
1
12
(0)
(0)
(13 + x2 − 2x3 ) = (13 + 1 − 2) =
= 1.3333 ,
9
9
9
1
1
−18
(0)
(0)
(−18 − x1 + x3 ) =
(−18 − 1 + 1) =
= 2.2500 ,
−8
−8
−8
1
1
37
(0)
(1)
(0)
x3 =
(40 − 2x1 − x2 ) =
(40 − 2 · 1 − 1) =
= 3.0833 .
12
12
12
Wiederholung der Rechnung zeichnet das Iterationsverfahren aus. Mit den soeben berechneten Zahlen wird
alles erneut durchgerechnet, um die Näherungswerte weiter zu verbessern:
(1)
x2 =
(2)
x1 =
1
1
9.0834
(1)
(1)
(13 + x2 − 2x3 ) = (13 + 2.2500 − 2 · 3.0833) =
= 1.0093 .
9
9
9
64
(2)
(2)
In derselben Weise wie oben folgt x2 = 2.0313 und x3
Unbekannte in ihrer Entwicklung betrachtet:
(3)
x1 = 1.0204 ,
(4)
x1 = 1.0021 ,
(5)
= 2.9236. Weiterhin werde nur noch die erste
(6)
x1 = 1.0013 ,
x1 = 1.0002 ,
(7)
x1 = 1.0001 ,
(8)
x1 = 1.0000 ,
und im Rahmen einer vierstelligen Rechnung ändert sich diese Zahl nicht mehr. Wir akzeptieren sie also als
Lösung und dürfen uns nun auch wieder daran erinnern, daß dies ja tatsächlich zutrifft.
1. Bemerkung: Die Vorteile der Methode dürften offenbar sein: Die Idee und die nötigen Formeln sind leicht
zu begreifen und zu merken und die Rechenvorschrift erfordert etwas Fleiß und macht sonst keine Schwierigkeiten. Heutzutage rechnet man so etwas kaum per Hand, und dieser Algorithmus ist wesentlich einfacher
zu programmieren als das Gauss - Verfahren.
2. Bemerkung: Was soeben beschrieben wurde ist nur eines der möglichen Iterationsverfahren. Vielfalt erfordert sprachliche Separation, und so soll diese Methode den Namen Gesamtschrittverfahren tragen, denn man
berechnet in einem Schritt die Gesamtheit der Unbekannten neu, bevor man den nächsten Zyklus startet.
Eine naheliegenden Idee läßt eine bessere Variante des Verfahrens vermuten: Warum soll man eigentlich den
(1)
neuberechneten Wert x1 bis zur nächsten Runde brachliegen lassen? Statt dessen dürfte es günstig sein,
(1)
diese Zahl gleich bei der Ermittlung von x2 zu benutzen:
(2)
x2 =
1
(1)
(0)
(b2 − a21 x1 − a23 x3 − . . . a2n x(0)
n ).
a22
Ebenso wird auch weiterhin verfahren; jedes Resultat jeder einzelnen Rechnung wird sofort weiter benutzt.
Diese Variante trägt den Namen Einzelschrittverfahren. Sie ist in der Regel tatsächlich besser, d.h. man
kommt mit weniger Rechschritten als im Gesamtschrittverfahren in dieselbe Nähe der exakten Lösung. Auf
das vorige Beispiel angewandt erhält man mit dieser Methode nacheinander die Werte:
(1)
x1 = 1.3333 ,
(2)
(3)
x1 = 1.0502 ,
x1 = 1.0040 ,
(4)
x6 = 1.0004 ,
und die folgenden Werte stimmen auf vier Stellen genau mit der exakten Lösung überein. Allerdings gibt es
Beispiele, in denen das Gesamtschrittverfahren günstiger ist; das sind jedoch Ausnahmen. Heutzutage sind
beide Verfahren kaum gebräuchlich; professionelle Software arbeitet nach ausgeklügelteren Methoden, die
sich nicht so kurz darstellen lassen.
3. Bemerkung: Kann man über die Anwendbarkeit des Verfahrens etwas konkreteres aussagen als der verwaschene Begriff ”wesentliche Einflußgröße”? Das geht wirklich; eine verbindliche Bedingung ist zwar formulierbar,17 aber schwer zu überprüfen. Die nachstehende Eigenschaft ist hinreichend; das mag genügen.
Wir nennen die quadratische Matrix A eine Matrix mit dominierender Hauptdiagonale, wenn der absolute Betrag des Hauptdiagonalelements in jeder Zeile größer ist als die Summe der absoluten Beträge der
restlichen Matrixelemente in dieser Zeile:
X
|akk | >
|akl | ∀k = 1, 2, . . . , n .
l6=k
Wenn nun die Matrix A des linearen Gleichungssystems Ax = b eine dominierende Hauptdiagonale besitzt,
so kann dieses System sowohl mit dem Gesamt- als auch mit dem Einzelschrittverfahren gelöst werden, und
zwar unabhängig von der konkreten rechten Seite b und von der Wahl des Startvektors x(0) .
Hieraus folgt nebenbei, daß die Determinante einer Matrix mit dominierender Hauptdiagonale nicht Null sein
kann; eine solche Matrix ist also regulär, sie besitzt eine Inverse. Übrigens hat ihre Determinante dasselbe
Vorzeichen wie das Produkt aller Hauptdiagonalelemente.
Aus dem Gesagten ergibt sich außerdem, daß ein einzelner Rechenfehler bei der Anwendung der genannten
Methoden keinen Einfluß auf das Endresultat hat; er wird sich automatisch wieder herauskorrigieren. Ebenso
haben die Verfahren die Eigenschaft, die Störung durch die beim Rechnen unvermeidlichen Rundungsfehler
fortlaufend zu unterdrücken.
Als Anwendungsbeispiel vergleiche man mit dem System auf S. 97.
4. Bemerkung: Die Anzahl der zur Erreichung einer gewissen Genauigkeit notwendigen Rechenschritte
hängt von den folgenden drei Faktoren ab:
a) von der geforderten Genauigkeit selbst,
17 Der Betrag des betragsgrößten Eigenwerts der Matrix D −1 A−I muß kleiner als 1 sein; dabei ist A die - hier notwenigerweise
quadratische - Matrix des Systems, D eine Diagonalmatrix mit derselben Hauptdiagonale wie A, und I die Einheitsmatrix.
65
b) von der Güte des Startvektors x(0) - er ist zwar im Prinzip beliebig, aber je näher bei der Lösung man
startet, desto weniger braucht man zu verbessern, und
c) bei Matrizen A mit dominierender Hauptdiagonale von der Größe
1 X
|aij | < 1
1≤i≤n |aii |
q̂ = max
j6=i
die im günstigen Fall nahe bei Null liegt und im ungünstigen nur wenig kleiner als Eins ist. Das Beispiel am
Anfang dieses Punktes war ein solcher günstiger Fall; dort war
1+2 1+1 2+1
q̂ = max
,
,
= max(0.3333, 0.2500, 0.2500) = 0.3333 .
9
8
12
Man kann, grob gesprochen, davon ausgehen, daß sich nach einigen Schritten die Abweichung der jeweiligen
Komponente von ihrem exakten Wert pro Schritt auf wenigstens das q̂-fache der im vorigen Schritt verringert;
im angegebenen Beispiel dürfte sich der Fehler also in jeden Schritt mindestens auf ein Drittel des vorigen
reduzieren; zwei Schritte erbringen damit in etwa eine weitere Kommastelle. Meist ist die Verbesserung sogar
schneller als dieses q̂, es gibt aber eine gewisse Orientierung und ist leicht zu berechnen.
Dieser Umstand resultiert (beim Gesamtschrittverfahren) aus der folgenden Überlegung:
Die Matrix A habe eine dominierende Hauptdiagonale; die k-te Gleichung wird nach xk aufgelöst, und das
ergibt die Iterationsvorschrift:
X
X
(i)
bk −
akl xl
bk −
akl xl
n
X
l6=k
l6=k
(i+1)
=⇒ xk
.
=
akl xl = bk =⇒ xk =
akk
akk
l=1
Für die gleichen Komponenten zweier aufeinanderfolgender Iterierter gilt dann die Abschätzung
X
X
X
(i−1)
(i) (i)
(i−1) bk −
akl (xl
− xl ) akl xl
bk −
akl xl
l6=k
l6=k
(i+1)
(i)
= l6=k
≤
−
|xk
− xk | = akk
akk
akk
X
≤
(i−1)
|akl | · |xl
(i)
X
− xl |
l6=k
(i−1)
max1≤j≤n |xj
(i)
− xj | ·
=
|akk |
X
|akl |
l6=k
=
(i)
− xj |
l6=k
≤
|akk |
(i−1)
|akl | · max1≤j≤n |xj
(i−1)
= q̂ · max1≤j≤n |xj
|akk |
(i)
− xj | .
Das k auf der linken Seite ist ein beliebiger Wert zwischen 1 und n, also gilt diese Abschätzung für alle Paare
und folglich auch für das mit der größten Differenz:
(i+1)
(i)
max1≤j≤n |xj
(i)
(i−1)
− xj | = q̂ · max1≤j≤n |xj − xj
|.
Der maximale Betrag zweier gleicher Komponenten zweier aufeinanderfolgender Iterierter ist folglich mindestens um den Faktor q̂ < 1 kleiner als der maximale Betrag der vorangegangenen Iterierten.
Hieraus folgt offenbar sofort die allgemeinere Abschätzung über p Schritte:
(i+1+p)
max1≤j≤n |xj
(i+p)
− xj
(i)
(i−1)
| = q̂ p · max1≤j≤n |xj − xj
|.
Hieraus kann man leicht eine Abschätzung gewinnenen, wie weit man noch von der gesuchten Lösung entfernt
ist. Zu diesem Zweck betrachten wir die Differenz zwischen einer Komponente der i-ten Iterierten und der
maximalen der i + m-ten:
(i+m)
|xk
(i)
(i+m)
− xk | = |(xk
(i+m)
≤ |xk
(i+m−1)
− xk
(i+m−1)
− xk
(i+m−1)
| + |xk
(i+m−1)
) + (xk
(i+m−2)
− xk
(i+m−2)
− xk
(i+2)
) + . . . + (xk
(i+2)
| + . . . + |xk
66
(i+1)
− xk
(i+1)
− xk
(i+1)
| + |xk
(i+1)
) + (xk
(i)
(i)
− xk )| ≤
− xk | ≤
(i)
(i−1)
≤ (q̂ m−1 + q̂ m−2 + . . . + q̂ 2 + q̂) · max1≤j≤n |xj − xj
| =
1 − q̂ m
(i)
(i−1)
· q̂ · max1≤j≤n |xj − xj
|.
1 − q̂
Die Abschätzung gilt für alle Werte m, sie bleibt also erhalten, wenn man m gegen Unendlich gehen läßt.
(i+m)
Dann konvergiert xk
gegen die entsprechende Komponente x∗k der exakten Lösung:18
(i+m)
lim |xk
m→∞
(i)
(i)
−xk | = |x∗k −xk | ≤
q̂
1 − q̂ m
(i)
(i−1)
(i)
(i−1)
·q̂·max1≤j≤n |xj −xj
| =
·max1≤j≤n |xj −xj
|.
m→∞ 1 − q̂
1 − q̂
lim
Mit
∗
(i) xk − xk ≤
q̂
(i)
(i−1) · max1≤j≤n xj − xj
.
1 − q̂
hat man eine Fehlerabschätzung für das Ganzschrittverfahren.
Angewandt auf das betrachtete Beispiel:
Es war x(1) = (1.3333, 2.2500, 3.0833)T und x(2) = (1.0093, 2.0313, 2.9236)T , damit erhält man die Differenzen x(2) − x(1) = (1.3333 − 1.0093, 2.2500 − 2.0313, 3.0833 − 2.9236)T = (0.3240, 0.2187, 0.1597)T .
Der Maximalwert ist 0.3240, und das Verhältnis q̂ = 0.3333.
Es folgt die Abschätzung
0.3333
∗
(2) · 0.3240 = 0.1620 .
xk − xk ≤
1 − 0.3333
(2)
(2)
Speziell ist bei k = 1 die Ungleichung |x∗1 −x1 | ≤ 0.1620 erfüllt, also gilt −0.1620 ≤ x∗1 −x1 = x∗1 −1.0093 ≤
0.1620 oder 0.8473 ≤ x∗1 ≤ 1.1713.
Damit hat man bereits in diesem Stadium der Arbeit ein sicheres Intervall, in dem die erste Komponente
der Lösung liegen muß.
Vergleicht man im nächsten Schritt nicht x(2) mit x(1) , sondern x(3) mit x(2) , so wird der Bereich bereits
wesentlich kleiner (wenigstens um den Faktor q̂ = 0.3333).
Man weiß also stets, wie weit man - höchstens! - von der Lösung entfernt ist, auch ohne diese zu kennen.
Zumindest läßt sich diese Abschätzung des Abstandes ohne nennenswerten Aufwand gewinnen.
Fehlerabschätzungen dieser Art nennt man ’a posteriori’,19 da sie eine Aussage im Verlaufe oder nach der
erfolgten Rechnung ermöglichen. Um sie zu treffen müssen also zumindest gewisse Resultate vorliegen.
Im Unterschied dazu können Fehlerabschätzungen ’a priori’ bereits vor der Rechnung getroffen werden.
Sucht man z. B. mit Hilfe der Methode der Intervallhalbierung auf [0.35, 0.38] eine Nullstelle der Funktion
f (x), so weiß man, daß man nach 8 Schritten höchstens 2−8 · (0.38 − 0.35) = 0.000 117 2 von ihr entfernt ist.
Für diese Aussage mußte keinerlei Funktionswert f (x) berechnet werden; ja, es wurde nicht einmal festgelegt,
wie diese Funktion eigentlich aussieht.20
5. Bemerkung: Diese Verfahren konvergieren linear, und demzufolge kann man zur Verbesserung der Konvergenz das Aitkensche ∆2 -Verfahren anwenden. Dies ist speziell dann sinnvoll, wenn der Konvergenzfaktor q
nahe bei 1 liegt und demzufolge sehr viele Iterationen nötig sind, um eine akzeptable Genauigkeit zu erreichen.
Bei q = 0.99 bewirken 100 Iterationsschritte eine Verbesserung um den Faktor
100
0.99
=
−1
1+
100
100
≈ e−1 =
1
< 0.4 ,
2.718 . . .
und damit sind also fast 40% des Fehlers noch vorhanden. (Der genaue Wert: 36.6%)
Die Anwendung des Aitkenschen ∆2 -Verfahrens geschieht zweckmäßigerweise etwa in der folgenden Weise:
Man wartet einige iterierte Vektoren x(k) ab, bis sich das Verfahren auf einen geregelten Verlauf eingestellt
hat; dann speichert man einen Vektor x(k) ab. Laut Theorie wäre der Grenzwert aus drei aufeinanderfolgenden Vektoren zu schätzen; praktisch hat man aber oft das Problem, daß sich diese Werte nur minimal
unterscheiden, so daß in ihrer Differenz die Rundungsfehler bereits eine wesentliche Rolle spielen. Aber wenn
man aus einer geometrischen Folge nur jedes m-te Glied herausnimmt, so entsteht wiederum eine geometrische Folge mit dem Stufungsfaktor q m , der nun deutlicher von 1 abweicht als q. Also speichert man x(k) ,
x(k+m) und xk+2m mit m=10 oder 20 oder 100 ..., und dann schätzt man den Grenzwert in seiner i-ten
18 Die
(i+m)
Folge xk
ist lt. Abschätzung eine Fundamental- oder Cauchy-Folge, also konvergent. (Ein bißchen Theorie...)
posteriori - im nachhinein, nachher , a priori - von vornherein
20 Eulenspiegel wird gefragt, wie weit es bis zum nächsten Ort sei; er schickt den Fragenden ohne Antwort weg.
Als dieser ein Stück entfernt ist ruft er ihm nach: ’In diesem Tempo zwei Stunden.’ - Das war a-posteriori.
19 a
67
Komponente zu
(k+m)
(m)
x̄i = xi
−
(xi
(k+2m)
xi
−
(m) 2
− xi
)
(k+m)
2xi
(k)
.
+ xi
Mit diesem Vektor wird nun wieder das Iterationsverfahren gestartet, um ihn weiter zu verbessern. Das
Aitkensche ∆2 -Verfahren ermöglicht es einem also, eine große Zahl von Iterationsschritten einzusparen und
einen Sprung von relativ schlechten Werten viel näher an die Lösung heran zu machen.
Nach einer angemessenen Zahl von Iterationsschritten wird wieder mit dem Aitkenschen ∆2 -Verfahren
verbessert, und das so oft, bis man mit der Lösung zufrieden ist.
Wie ist das m zu wählen? Problemabhängig; nimmt man es zu klein, so schätzt die Methode schlecht, da die
Rundungsfehler zu stark eingehen. Bei einem großen Wert von m muß man viele Iterationsschritte machen,
bevor man eine - dann allerdings vermutlich fundierte - Schätzung machen kann.
6. Bemerkung: Die Grundidee des geschilderten Iterationsverfahrens läßt sich beträchtlich erweitern, denn
von dem Umstand, daß es sich um ein lineares Gleichungssystem handeln soll, wurde im Grundkonzept nicht
wesentlich Gebrauch gemacht.
Stellen wir uns vor, die i-te Gleichung des Systems könnte in der Form
fi (xi ) + Fi (x1 , x2 , . . . , xn )
=
0
geschrieben werden, wobei
1.) die Gleichung fi (x1 ) = ai nach xi aufgelöst werden kann und
2.) Fi (x1 , x2 , . . . , xn ) (das durchaus auch xi enthalten kann) ändere sich mit seinen Variablen nur wenig,
zumindest wenn sie in der Nähe der Lösung liegen.
Dann ist die folgende Vorgehensweise denkbar: Man beschafft sich irgendwie Näherungswerte zur Lösung
und berechnet ai = Fi (x1 , x2 , . . . , xn ) aus diesen Schätzwerten; danach werden die Gleichungen fi (xi ) = ai
gelöst und damit werden die vermuteten Werte korrigiert. Dieses Verfahren wird wiederholt, bis sich die
ermittelten Werte stabilisiert haben.
Beispiel: Durch zwei parallelgeschalteten Widerstände R1 und R2 fließt insgesamt der Strom I = 4.36A.
Durch den Stromfluß erwärmen sie sich, und dadurch wachse ihr Widerstandswert. An Widerständen dieses
Typs wurde das folgende Strom - Widerstandswert - Verhalten gemessen:
R1 (I) = 2.55 + 0.0142I ,
R2 (I) = 5.03 + 0.0094I
(R in Ω, I in A). Für die beiden Teilströme gilt dann
R1
I1 =⇒ I1 =
I1 = I − I2 = I −
R2
−1
R1
R2 I
1+
I=
R2
R1 + R1
1I
und analog I2 = RR
. Dabei muß man aber beachten, daß diese Widerstände wiederum von den sie
1 +R2
durchfließenden Strömen abhängen, so daß zahlenmäßig folgt:
I1 =
(5.03 + 0.0094I1 ) · 4.36A
(5.03 + 0.0094I1 ) · 4.36A
=
(5.03 + 0.0094I1 ) + (2.55 + 0.0142I2 )
7.58 + 0.0094I1 + 0.0142I2
und
I2 =
(2.55 + 0.0142I1 ) · 4.36A
7.58 + 0.0094I1 + 0.0142I2
Diese letzte Beziehung kann in eine quadratische Gleichung bezüglich I2 umgewandelt werden; nach der
Auflösung läßt sich damit I2 aus der vorigen eliminieren. Übrig bleibt eine Gleichung für eine Unbekannte,
I1 . Aber dieser Weg ist recht mühsam; wesentlich günstiger ist die Anwendung der obigen Überlegung:
Die Widerstände verhalten sich, grob gesprochen, wie 2.55:5.03 oder, gerundet, wie 1:2. Teilen wir die 4.36A
des Gesamtstroms in drei Teile, so können wir I1 ≈ 3A und I2 ≈ 1.5A schätzen. Damit konkretisieren wir
die rechten Seiten der beiden Gleichungen und berechnen die beiden Ströme etwas exakter:
I1 =
5.058
(5.03 + 0.0094 · 3) · 4.36A
=
4.36A = 2.89A
7.58 + 0.0094 · 3 + 0.0142 · 1.5
7.63
I2 =
(2.55 + 0.0142 · 1.5) · 4.36A
= 1.48A
7.63
68
Mit diesen sicher schon recht genauen Werten modifiziert sich die erste Rechnung zu
I1 =
(5.03 + 0.0094 · 2.89) · 4.36A
5.057
=
4.36A = 2.89A
7.58 + 0.0094 · 2.89 + 0.0142 · 1.48
7.63
Im Rahmen der gewählten dreistelligen Genauigkeit ändert sich der Wert also nicht mehr. Weitere Iterationsschritte sind mithin überflüssig; sie reproduzieren nur die schon ermittelten Werte.
Die Rechnung basierte wesentlich auf dem Sachverhalt, daß die Widerstandswerte nur schwach von den Strömen abhingen, und es war wichtig, daß man hier aus der Problemstellung heraus Startwerte für die Iteration
(3A und 1.5A) schätzen konnte.
Das geschilderte Verfahren ist erfreulich einfach in der Handhabung und bisweilen recht wirkungsvoll; leider ist es aber oftmals schwierig, ein bestehendes Gleichungssystem in die zur Anwendung dieser Methode
notwendige Form
fi (xi ) + Fi (x1 , x2 , . . . , xn ) = 0
zu überführen. Mit etwas Geschick und Verständnis für die reale Sachlage, z. B. für die physikalischen
Zusammenhänge, kann man bisweilen eine dem Problem angepaßte Form gewinnen; das vorstehende Beispiel
war ein solcher Idealfall. Aber für die elegante Lösung spezieller Probleme gibt es kein universelles Verfahren.
Es handelte sich, wie man sicher erkannte, um die Darstellung der mehrdimensionalen Variante der Fixpunktiteration. Diese ist mit Erfolg anwendbar; im nachfolgenden Punkt soll aber nicht speziell darauf eingegangen
werden, so daß hier nur diese Feststellung gemacht sei.
4.2.3
Nichtlineare Systeme
4.2.4
Das Newton-Verfahren
Gegeben sei ein System von n nichtlinearen Gleichungen mit n Unbekannten: f (x) = Θ, dabei bezeichnet Θ
den Nullvektor.
Die Idee des Newton-Verfahrens wird aus der eindimensionalen Variante eigentlich unverändert übernommen;
man kann es aber auch so interpretieren:
Da es für nichtlineare Systeme keine allgemeine Theorie und Lösungsformel gibt (geben kann!) ersetzen wir
das System durch ein ähnliches lineares - dort ist alles klar! Dazu verwenden wir den Begriff der Ableitung,
die sich in diesem Fall als Matrix darstellt:


f1,1 f1,2 . . . f1,n
 f2,1 f2,2 . . . f2,n 
∂fi


.
f 0 (x) =  .
..
..  , fi,j =
.
.
.
∂xj
 .
.
.
. 
fn,1 fn,2 . . . fn,n
Sei x(0) ein Startwert in der Nähe der (einer) Lösung x∗ des Systems; es gilt nach der allgemeinen Definition
der Ableitung
f (x∗ ) = f (x(0) ) + f 0 (x(0) ) · (x∗ − x(0) ) + h(x∗ , x(0) ) ,
wobei h ein kleines Restglied ist, dessen Betrag schneller gegen Null geht als der der Differenz x∗ − x(0) :
lim
x(0) →x∗
|h(x∗ , x(0) )|
|x∗ − x(0) |
=
0.
Auf der linken Seite der obigen Gleichung steht der Nullvektor. Läßt man auf der rechten Seite die Funktion
h(x∗ , x(0) ) weg (d. h. vernachlässigt man sie ob ihrer Kleinheit), so gilt die Gleichung für x∗ nicht mehr
exakt; sie wird wieder richtig, wenn man mit ihrer Hilfe nicht mehr x∗ ausrechnen will, sondern nur noch
einen Vektor x(1) :
Θ = f (x(0) ) + f 0 (x(0) ) · (x(1) − x(0) ) .
Sinnvoll ist es, den Vektor x(1) als Modifikation des Vektors x(0) zu schreiben: x(1) = x(0) + ∆x(1) , dann wird
x(1) − x(0) = ∆x(1) und dieses ∆x(1) bestimmt sich als Lösung des linearen Gleichungssystems
f 0 (x(0) )∆x(1)
=
−f (x(0) ) .
Die Matrix f 0 (x(0) ) und die rechte Seite −f (x(0) ) sind bekannt bzw. berechenbar. Damit kann dieses System
aufgestellt und dann ggfs. gelöst werden. Mit dem Lösungsvektor ermittelt man x(1) , und nun kann dieser
69
Prozeß wiederholt werden:
Aus f 0 (x(1) )∆x(2) = −f (x(1) ) bestimmt man die Verbesserung ∆x(2) von x(1) zu x(2) , usw..
In manchen Büchern wird dieses lineare Gleichungssystem mit der inversen Koeffizientenmatrix multipliziert
und in der Form
∆x(1) = −[f 0 (x(0) )]−1 f (x(0) ) bzw. x(1) = x(0) − [f 0 (x(0) )]−1 f (x(0) )
geschrieben. Das ist korrekt, aber nicht konstruktiv - pro Schritt ist nur ein lineares Gleichungssystem zu
lösen, und es ist uneffektiv, zu diesem Zweck die inverse Matrix zu berechnen. Das ist also nur als formale
Schreibweise zu verstehen. Immerhin hat die zweite der beiden Formeln Ähnlichkeit mit dem eindimensionalen Newton-Verfahren und ist dessen direkte Verallgemeinerung:
x1
=
x0 −
f (x0 )
.
f 0 (x0 )
Beispiel: Es sind drei Wertepaare (xi , yi ) gegeben: daraus sollen die Parameter a, b und c der Funktion
y = a sin(bx + c) so bestimmt werden, daß sie den Bedingungen yi = a sin(bxi + c) für alle drei Paare erfüllt.
Hieraus erhält man die drei Gleichungen fi (a, b, c) = a sin(bxi + c) − yi = 0; mit der Matrix der partiellen
Ableitungen nach a, b und c entsprechend resultiert das lineare Gleichungssystem





sin(bx1 + c) ax1 cos(bx1 + c) a cos(bx1 + c)
∆a0
y1 − a sin(bx1 + c)
 sin(bx2 + c) ax2 cos(bx2 + c) a cos(bx2 + c)   ∆b0  =  y2 − a sin(bx2 + c)  .
sin(bx3 + c) ax3 cos(bx3 + c) a cos(bx3 + c)
∆c0
y3 − a sin(bx3 + c)
Die Wertepaare seien (0.4305,-0.566855), (1.5630,4.908822) und (1.7340,5.274870). Sie sind entstanden durch
Vorgabe der Koeffzienten a = 5.4935, b = 1.0672 und c = −0.5628.
Zuerst wird mit Startwerten begonnen, die nahe bei dieser Lösung liegen: a = 5, b = 1 und c = −0.5; man
erhält die folgenden Resultate:
k
0
1
2
3
ak
5.000000
5.477377
5.493055
5.493500
bk
1.000000
1.077536
1.067262
1.067200
ck
-0.500000
-0.570766
-0.562824
-0.562800
∆ak+1
0.477377
0.015678
0.000445
0.000000
∆bk+1
0.077536
-0.010274
-0.000062
0.000000
∆ck+1
-0.070766
0.007942
0.000024
0.000000
ak+1
5.477377
5.493055
5.493500
5.493500
bk+1
1.077536
1.067262
1.067200
1.067200
ck+1
-0.570766
-0.562824
-0.562800
-0.562800
Wie man sieht hat man faktisch nach drei Schritten das Resultat gefunden. Die Korrekturen nehmen rapide
ab, denn auch im mehrdimensionalen Fall konvergiert das Verfahren quadratisch.
Diese günstige Situation ist allerdings nur dem hervorragenden Startvektor geschuldet; was passiert, wenn
er nicht so gut ist?
Probehalber wird b0 von 1 auf 1.8 erhöht; der Rest bleibt gleich
k
0
1
2
3
4
5
ak
5.000000
3.022676
5.004580
5.341194
5.487152
5.493500
bk
1.800000
1.354133
0.984527
1.096666
1.067498
1.067200
ck
-0.500000
-0.596351
-0.602604
-0.573134
-0.563116
-0.562800
∆ak+1
-1.977324
1.981904
0.336614
0.145959
0.006348
0.000000
∆bk+1
-0.445867
-0.369606
0.112140
-0.029168
-0.000298
0.000000
∆ck+1
-0.096351
-0.006253
0.029470
0.010018
0.000316
-0.000000
ak+1
3.022676
5.004580
5.341194
5.487152
5.493500
5.493500
bk+1
1.354133
0.984527
1.096666
1.067498
1.067200
1.067200
Die Rechnung braucht ein paar Schritte mehr, und sie macht anfangs einen ziemlichen Schlenker.
Nur wird b0 auf 2 vergrößert, ohne a0 und b0 zu verändern:
70
ck+1
-0.596351
-0.602604
-0.573134
-0.563116
-0.562800
-0.562800
k
0
1
2
3
4
5
6
7
8
9
10
11
ak
5.000000
1.961674
4.593226
-1.081561
4.633721
-4.462334
0.529807
-5.800093
6.208970
5.373355
5.388757
5.388916
bk
2.000000
1.437693
0.773231
2.141193
5.949167
5.248318
6.403568
5.502928
3.565311
3.678356
3.692491
3.692446
ck
-0.500000
-0.527233
-0.746670
-1.573770
-5.824132
-5.516686
-6.155705
-7.543163
-4.338541
-4.594543
-4.625935
-4.625807
∆ak+1
-3.03833
2.63155
-5.67479
5.71528
-9.09605
4.99214
-6.32990
12.00906
-0.83562
0.01540
0.00016
0.00000
∆bk+1
-0.56231
-0.66446
1.36796
3.80797
-0.70085
1.15525
-0.90064
-1.93762
0.11304
0.01414
-0.00005
0.00000
∆ck+1
-0.02723
-0.21944
-0.82710
-4.25036
0.30745
-0.63902
-1.38746
3.20462
-0.25600
-0.03139
0.00013
-0.00000
ak+1
1.96167
4.59323
-1.08156
4.63372
-4.46233
0.52981
-5.80009
6.20897
5.37335
5.38876
5.38892
5.38892
bk+1
1.43769
0.77323
2.14119
5.94917
5.24832
6.40357
5.50293
3.56531
3.67836
3.69249
3.69245
3.69245
ck+1
-0.52723
-0.74667
-1.57377
-5.82413
-5.51669
-6.15570
-7.54316
-4.33854
-4.59454
-4.62593
-4.62581
-4.62581
Jetzt irrt das Verfahren im dreidimensionalen Raum umher, bis es schließlich mehr oder weniger zufällig in
den ’Einzugsbereich’ einer Lösung kommt und dort konvergiert. Allerdings ist diese Lösung deutlich anders.
Die erhaltene Funktion hat das nachstehende Aussehen (die ’wahre’ Funktion ist gestrichelt):
......
....
..................
..
............
...e
.................... ..... ......e..............
.... ...............
.. ..... .....................
.
.
........
.
.
.
.
.
.
.
.
.
.
....
......
.....
... ..... .....
....
.....
..... ..... ..
......
.
.
.
.
.
.
.....
.
.
.
.
.
.
.
....
.
..
.....
...
.. .... ...
.....
....
.....
.. ..... ...
.
.
.
.
.....
.
.
.
.
.
.
.
....
.
..
.....
.... .....
..
....
.
... .....
..........................................................................................................................................................................................................................................................................................................................................................................................
...
....
...
... ...e
....
....
.. ..... .. .........
.
.
.
.
.
.
.
.
.
.
.
.
.....
....
.... .....
....
.....
.
.... ..... .
....
.
.....
.
.
........ ..... .
.
......
......
.......
....
.....
.
.
.
.........
.
.
.
.
....
....
...........
..............................................
....
....
..
.
Man braucht also einen halbwegs guten Startvektor, wenn man Wert auf eine bestimmte Lösung legt. Leider
wird das Finden des Startvektors mit wachsender Zahl der Unbekannten immer schwieriger, und leider muß
er oft gerade dann recht genau bestimmt werden, da dann der Einzugsbereich der Lösung recht klein ist. Ein
gewisser Ausweg wird im nächsten Punkt dargestellt.
Eine Modifikation sei noch erwähnt: Das vereinfachte Newton-Verfahren. Es basiert auf der Beobachtung,
daß sich die Matrix des Gleichungssystems kaum ändert, wenn man nahe an der Lösung x∗ ist und die
Vektoren x(k) nur noch minimal modifiziert. Deshalb verzichtet man dann darauf, sie neu zu berechnen, und
ermittelt nur die jeweilige rechte Seite des Gleichungssystems.
Viele Funktionen haben die Eigenschaft, beim Differenzieren beträchtlich zu ’quellen’ - der resultierende Formelausdruck wird wesentlich größer als der ursprüngliche. Wenn die Unbekannten nicht irgendwie einheitlich
in die Funktionen des Gleichungssystems eingehen, also beispielsweise durch Laufanweisungen verarbeitet
werden, so muß jede der n rechten Seiten einzeln programmiert werden, und jeder der n2 Ableitungen auch.
Das ist sehr mühsam und beinhaltet viele Fehlerquellen (wobei man Fehler in der Matrix in der Regel daran
erkennt, daß das Verfahren nicht konvergiert). In diesem Falle bietet es sich an, die Werte der partiellen
Ableitungen numerisch zu berechnen oder zumindest zu überprüfen (vgl. mit der numerischen Berechnung
des Gradienten von f (x1 , x2 , . . . , xn ) in 5.1., S. 79).
4.2.5
Das gedämpfte Newton-Verfahren und Einbettung
Das Newton-Verfahren braucht einen Startvektor in ausreichender Lösungsnähe; dieser ist oftmals schwer zu
finden. Eine Konvergenz des Verfahrens ist ggfs. erst nach einigen mehr oder weniger aufwendigen Schritten
festzustellen; nun soll zuerst ein Kriterium formuliert werden, mit dem man feststellen kann, ob ein einzelner
Schritt einen Fortschritt darstellt.
Betrachten wir z. B. den Übergang von x(0) zu x(1) . Im Idealfall wäre x(1) bereits die exakte Lösung x∗ .
Das würde sich darin äußern, daß es das System genau erfüllt: f (x(1) ) = Θ. Da dieser Idealfall kaum eintritt
71
hat man es mit einem vom Nullvektor verschiedenen Vektor f (x(1) ) zu tun, dem Residuum.21 Je kleiner
dieser Vektor ist, desto besser dürfte x(1) sein. Zur Bewertung ist es notwendig, eine einzige Kennziffer zu
besitzen, und da bietet sich die Länge (der Betrag) dieses Vektors an. Je kleiner er ist, desto besser ist x(1) ;
im besten Fall ist der Wert Null. Aus Bequemlichkeitsgründen nimmt man nicht den Betrag selbst, sondern
sein Quadrat.
Verglichen wird nun mit der betreffenden Kennziffer der vorigen Iterierten; hier würde man also |f (x(1) )|2
mit |f (x(0) )|2 vergleichen. Ist dieser Wert kleiner geworden, so kann man x(1) akzeptieren.
Und was, wenn nicht? Man will nach wie vor aus x(0) in ein gewisses x(1) kommen; das Newton-Verfahren hat
dies - im Sinne des formulierten Kriteriums - nicht geleistet. Die Korrektur ∆x(1) , die zu x(0) hinzugeschlagen
wurde und damit x(1) ergab, war falsch.
Es erweist sich aber, daß es ein Schritt in die richtige Richtung war, nur eben zu weit.
Wenn λ die Menge der reellen Zahlen durchläuft repräsentiert x(0) + λ∆x(1) eine ’Gerade’ im Rn . Bei λ = 1
ergab sich bisher gerade x(1) .
Entlang dieser Geraden wird die Bewertungsfunktion b(λ) = |f (x(0) + λ∆x(1) )|2 betrachtet. Es ist b(0) =
|f (x(0) )|2 der Bezugswert, den es zu unterbieten gilt.
Unter ziemlich allgemeinen Voraussetzungen kann man zeigen, daß b0 (0) < 0 gilt; die Bewertungsfunktion
fällt also, wenn λ aus Null ins Positive wächst, zumindest
. eine Zeitlang.
....... b(λ)
...
Betrachten wir diese Funktion im Bereich 0 ≤ λ ≤
....
1; es sind zwei Fälle möglich: entweder sie fällt die
...
..................
B
....
gesamte Strecke (A), oder sie steigt wieder an und
..............
.
.
.
.
.
.
..
.
.
.
.
.
.
.
.
...
wird möglicherweise größer als im Punkt λ = 0 (B).
............
............... . . . . . . . . . . . . .
.
.........b(0)
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
Im letzten Fall gibt es (mindestens) ein Minimum der
.
..........
.... .................................... .....
..........................................................
Funktion b(λ) in einer Stelle λ∗ < 1, die man durch
....
.
.
.
.
.
.
.
.
.
. ..... ..... ..... .....
....
.
..... ..... ..... ..... A
Abtasten - zweckmäßigerweise mit der Methode des
..... ..... ..
..
....
.
Goldenen Schnittes - finden kann.
....
..
....
Die Idee ist nun, nicht bis λ = 1, sondern nur bis
∗
.......
...............................................λ......................................................................................................................1....|....................λ
∗
λ = λ zu gehen.
Damit folgt die Berechnungsvorschrift:
f 0 (x(0) )∆x(1) = f (x(0) ) ,
x(1) = x(0) + λ∗ ∆x(1) .
Diese Vorgehensweise nennt man gedämpftes Newton-Verfahren, da es in seiner Geschwindigkeit des Vorgehens jetzt gebremst wird. Das ist aber kein Verlust, da es dadurch am Über-das-Ziel-hinausschießen gehindert
wird und so in jedem Schritt das Bestmögliche unternimmt.
Wenn man konsequent das Minimum von b(λ) auf dem Abschnitt [0, 1] sucht, so wird der Fall (A) mit λ∗ = 1
nicht ausgeschlossen. Typischerweise ist es so, daß das gedämpfte Newton-Verfahren nach einigen gebremsten
Schritten in die Nähe einer Lösung gerät und dann dieser Dämpfung nicht mehr bedarf; dann regelt sich λ∗
von allein auf den Wert 1 hoch und man hat das klassische hocheffektive Newton-Verfahren.
Im Eindimensionalen gewährleistet die Formel x1 = x0 −f (x0 )/f (x1 ), daß man von x0 immer in die Richtung
geht, in die der Betrag von f (x) fällt. Wenn es eine Nullstelle gibt, und wenn x1 auf der anderen Seite dieser
Nullstelle liegt, so würde das gedämpfte Newton-Verfahren sie sofort finden.
Diese Modifikation des Newton-Verfahrens ist nicht sonderlich teuer; der aufwendigste Teil jedes Schrittes ist
das Berechnen der Matrix der partiellen Ableitungen und das Lösen des Gleichungssystems; das wird aber
nicht häufiger gemacht als vorher. Für die Minimumsuche sind nur die Funktionen fi in einigen Punkten
auszuwerten; man muß also kaum neue Formeln programmieren.
Übrigens muß man das λ∗ nicht einmal sehr genau finden, denn der Boden dieser Senke hat eine gewisse
Breite, und man muß den tiefsten Punkt nur ungefähr erwischen - es wird sowieso weiter verbessert.
Nun soll der letzte Fall des vorigen Beispiels mit dem gedämpften Newton-Verfahren nachgerechnet werden.
Der besseren Anschaulickeit wegen wird keine Optimierung gemacht, sondern es wird eine Auswertung in
Zehntelschritten bzgl. λ vorgenommen und einfach mit der besten Variante (mit einem Sternchen gekennzeichnet) weitergerechnet.
Man erkennt:
- Man gelangt zur vorgegebenen Lösung.
- Zwei gedämpfte Schritte haben dafür gereicht.
- Ab dem dritten Schritt stellte sich λ∗ = 1 ein.
21 resideo
(lat.) - übrig bleiben
72
- Auch anfangs war b(1) < b(0); Dämpfung ist also stets günstig!
Man muß natürlich beachten, daß diese Dämpfungsstrategie kein Allheilmittel ist; alles, was sie kann, ist den
Bereich der zulässigen Startvektoren deutlich zu vergrößern.
k
0
∗
1
∗
2
∗
3
4
5
6
λ
0.0
0.1
0.2
0.3
0.4
0.5
0.6
0.7
0.8
0.9
1.0
0.0
0.1
0.2
0.3
0.4
0.5
0.6
0.7
0.8
0.9
1.0
0.0
0.1
0.2
0.3
0.4
0.5
0.6
0.7
0.8
0.9
1.0
1.0
1.0
1.0
1.0
ak + λ∆ak+1
5.00000000000
4.69616740598
4.39233481197
4.08850221795
3.78466962394
3.48083702992
3.17700443590
2.87317184189
2.56933924787
2.26550665386
1.96167405984
3.17700443590
3.22895036622
3.28089629655
3.33284222687
3.38478815719
3.43673408751
3.48868001783
3.54062594815
3.59257187847
3.64451780879
3.69646373912
3.54062594815
3.71815153693
3.89567712570
4.07320271447
4.25072830325
4.42825389202
4.60577948080
4.78330506957
4.96083065834
5.13835624712
5.31588183589
5.46962762667
5.49329839981
5.49349999924
5.49350000000
bk + λ∆bk+1
2.00000000000
1.94376932386
1.88753864771
1.83130797157
1.77507729542
1.71884661928
1.66261594313
1.60638526699
1.55015459084
1.49392391470
1.43769323855
1.66261594313
1.60375268560
1.54488942807
1.48602617053
1.42716291300
1.36829965547
1.30943639794
1.25057314041
1.19170988287
1.13284662534
1.07398336781
1.25057314041
1.22742410373
1.20427506706
1.18112603039
1.15797699372
1.13482795705
1.11167892037
1.08852988370
1.06538084703
1.04223181036
1.01908277368
1.07267984740
1.06721244435
1.06719999969
1.06720000000
ck + λ∆ck+1
-0.50000000000
-0.50272327574
-0.50544655147
-0.50816982721
-0.51089310295
-0.51361637868
-0.51633965442
-0.51906293016
-0.52178620589
-0.52450948163
-0.52723275737
-0.51633965442
-0.53271695120
-0.54909424797
-0.56547154475
-0.58184884152
-0.59822613830
-0.61460343507
-0.63098073185
-0.64735802862
-0.66373532540
-0.68011262217
-0.63098073185
-0.62314981616
-0.61531890048
-0.60748798479
-0.59965706911
-0.59182615343
-0.58399523774
-0.57616432206
-0.56833340638
-0.56050249069
-0.55267157501
-0.56531292112
-0.56280851399
-0.56279999977
-0.56280000000
b(λ)
30.87268257460
25.46497550350
21.42670564494
18.54191466188
16.63904980368
15.59224892441
15.31856640764
15.77165409428
16.93261725443
18.79892108287
21.37232026784
15.31856640764
12.52329345850
10.24325921624
8.44025792463
7.07300719277
6.10305788497
5.50058091838
5.24962109459
5.35242114341
5.83245774370
6.73589430377
5.24962109459
4.26580798705
3.40995477350
2.67501250832
2.05315047535
1.53587896205
1.11418038280
0.77864783973
0.51963014625
0.32738228108
0.19222018927
0.00019878619
0.00000005359
0.00000000000
0.00000000000
Eine weitere Möglichkeit, das Problem des Startvektors x(0) zu entschärfen, besteht darin, das gestellte Problem f (x) = Θ in eine Familie von Aufgaben einzubetten, die durch einen Parameter λ beschrieben wird.
Die betrachtete Aufgabe entspricht z. B. λ = 1.
Wichtig ist, daß in dieser Familie ein Problem f0 (x) = Θ enthalten ist, dessen Lösung man kennt; es gehöre
zu λ = 0.
Also:
Aufgabenfamilie F (x(λ), λ) = Θ , F (x, 0) = f0 (x) , F (x, 1) = f (x) .
Die Lösung von F (x, λ) = Θ bei λ nahe Null wird sich nicht sehr von der bekannten Lösung x(λ = 0)
unterscheiden; also ist x(0) ein guter Startvektor für die Behandlung von z. B. F (x, 0.1) = Θ.
Diese Aufgabe kann dann mit dem Newton-Verfahren gelöst werden; ihre Lösung x(0.1) wird nicht selbst
gebraucht, vielmehr dient sie als Startvektor für die Aufgabe F (x, 0.2) = Θ, usw..
Zuletzt löst man F (x, 1) = f (x) = Θ.
Beispiel: Die Aufgabe zur Bestimmung der Parameter a, b und c einer Schwingung y(x) = a sin(bx + c) aus
drei Wertepaaren (xi , yi ) (vgl. S. 70).
73
Die (vorgegebene) Lösung war a = 5.4935, b = 1.0672 und c = −0.5628.
Bauen wir eine Startaufgabe f0 (a, b, c) = Θ mit der Lösung a = b = 1, c = 0, also einfach der Funktion
(0)
y (0) (x) = sin x im Hintergrund. Sei entsprechend yi = 1 · sin(1 · xi + 0) = sin xi .
Es resultiert das System der drei von λ abhängigen Gleichungen
(0)
a(λ) sin[b(λ)xi + c(λ)] = (1 − λ)yi
+ λyi ,
i = 1, 2, 3 .
Man erkennt aus der Konstruktion der rechten Seite: Bei λ = 0 ist es die Aufgabe mit der bekannten Lösung
a = b = 1, c = 0, und bei λ = 1 die eigentlich gestellte.
Das Newton-Verfahren braucht für keine der zehn Teilaufgaben - wenn man λ in Schritten von 0.1 laufen
läßt - mehr als 5 Iterationen; den jeweils berechneten Wertesatz als neue Startwerte genommen ergibt sich
die nachstehende Tabelle:
λ
a(λ)
b(λ)
c(λ)
0
0.1
0.2
0.3
0.4
0.5
0.6
0.7
0.8
0.9
1.0
1
1.415644414
1.854364021
2.302068023
2.754049371
3.208361460
3.664070218
4.120676676
4.577891924
5.035537876
5.493499136
1
1.020888221
1.033836012
1.042654239
1.049048943
1.053899373
1.057705051
1.060770905
1.063293663
1.065405953
1.067200452
0
-0.212268609
-0.325881572
-0.395811028
-0.443026969
-0.477008926
-0.502624812
-0.522621422
-0.538663558
-0.551818165
-0.562800299
Obwohl weit entfernt von der Lösung begonnen wurde gelangt man sehr schön in diese - allerdings mit
deutlich mehr Rechenaufwand: über das Newton-Verfahren ist eine Schleife gelegt, in der das λ läuft.22
Einbettung ist allerdings ebenfalls kein Allheilmittel; es kann auch hierbei Probleme geben.
So muß es keine zusammenhängende Trajektorie x(λ) von λ = 0 zu λ = 1 geben, und dann gerät man an
irgendein Ende.
Betrachten wir die Aufgabe, die kleinste Nullstelle des Polynoms x3 − 11x2 + 36x − 38 zu finden.
Durch scharfes Draufsehen kommt man zu der Erkenntnis, daß x3 − 11x2 + 36x − 36 = (x − 2)(x − 3)(x − 6)
ist, und man betrachtet die Aufgabenfamilie P3 (x, λ) = x3 − 11x2 + 36x − 36 − 2λ. Starten kann man bei
x(0) = 2.
Welches Problem man sich einhandelt erkennt man am nachstehenden Bild: Zu λ = 0 gehört die ausgezogene
Kurve, und zu λ = 1 die gestrichelte:
....
...
....
...
.
.
....
.
............................................................................................................................................................................................................................................................................................................................................................................................................................................................
.
.
.
.
.
.
.
.
.
.
..
....
.
.
...........
....
..........
... ..
... ..... ..... ..... ..... ..
.
......
.
....
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
..........
... .....
.
....
.... ..
.... ..
..........
..... ...
....
.... ..
..........
.. .....
....
.... .... ....
.
.
.
.
.
.
.
..........
.
..... ..
....
..... ...
...........
.... ....
... ...
...... . ....
...........
.
....
... ....
.
.
.
.
.
.
.
.
.
.
..... .
.............
....
......... ... ..
.... ...
..................
... ...
.............................................
.. .....
... . ....
....
.
...
.
..... ...
.... .... ...
.... .
.. ..... .
.... ..... ..... ..... ..... ..... ..... ....
.... .... ...
.... ... ..
.
Mit wachsenden λ verschiebt sich die Kurve nach unten, und plötzlich ist die betrachtete Nullstelle (aus dem
Reellen) verschwunden!
Aber selbst wenn sich die Lösungsmenge zusammenhängend von λ = 0 zu λ = 1 erstreckt ist noch nicht
klar, daß man mit der Schrittweite ∆λ = 0.1 von einem Ende zum anderen kommt; das muß ggfs. genauer
untersucht werden.
Startet man im betrachteten Beispiel der phasenverschobenen Schwingung nicht mit a = b = 1, c = 0,
sondern mit dem noch etwas schlechteren Satz a = 1, b = 0.3, c = 0, so gelangt man bei ∆λ = 0.1 zu einer
der vielen sonstigen Lösungen des Systems: a = 30.141637193, b = 16.773524131, c = −0.952576906.
22 In
Wirklichkeit läuft ein integer-Wert. Wie eingangs gesagt sollte man reelle Zahlen nicht als Laufvariable nehmen.
74
Nimmt man statt dessen ∆λ = 0.05, so hat man am Schluß (nach 20 Schritten): a = 7.053788071, b =
8.930701765, c = −0.622625923.
Bei 50 Schritten entsteht ziemlicher Unfug (betragsgroße Werte) und erst bei 500 Unterteilungen landet man
in derjenigen Lösung, die die ganze Zeit gemeint war.
Eine naheliegende Verbesserung sei noch betrachtet; damit kann gleichzeit ein weiteres Mal die Verknüpfung
numerischer Verfahren demonstriert werden. Hier benutzen wir die Idee der Extrapolation.
Gehen wir aus von der obigen Tabelle; angenommen, der erste Schritt ist erfolgt:
λ
a(λ)
b(λ)
c(λ)
0
0.1
1
1.415644414
1
1.020888221
0
-0.212268609
Anstatt mit den drei Werten der letzten Zeile bei λ = 0.2 zu starten kann man sich Folgendes sagen: Von
λ = 0 zu λ = 0.1 haben sich die Werte geändert, und bis λ = 0.2 werden sie sich wiederum ändern.
λ ändert sich jedesmal um denselben Wert, also dürften sich auch a, b und c etwa um denselben Wert ändern.
Wenn das so ist, so könnte man versuchen, aus den beiden Werten den neu zu erwarteten Wert zu schätzen.
Es war z. B. a(0) = 1 vorgegeben und a(0.1) = 1.415644414 berechnet; unterstellt, dieser Trend hält an, so
wäre a(0.2) − 1.415644414 ≈ 1.415644414 − 1, also a(0.2) ≈ 1.8312.
Verwenden wir die übliche Differenzenschreibweise, und stellen wir die Werte in Einheiten der vierten Nachkommastelle dar (eine genauere Rechnung nützt bei dieser Prognose wenig). Die Differenz wird in halber
Höhe zwischen die Werte geschrieben, aus denen sie gebildet wird, und zwar wird immer der obere Wert
vom unteren abgezogen:
a
10000
14156
18312
18543
∆a
b
10000
10209
10418
10338
4156
4156
-231
∆b
c
0
-2123
-4246
-3259
209
209
80
∆c
-2123
-2123
-987
Es wird also die Annahme getroffen, die Differenz bleibe gleich; dieser hypothetische Wert wird kursiv unter
die berechnete Differenz geschrieben. Diese zum unteren der beiden Werte, aus denen die Differenz gebildet
wird, addiert ergibt den - ebenfalls kursiv notierten - Vorhersagewert; für a(0.2) also 18312 oder, mit Berücksichtigung der wahren Dezimalstellen, 1.8312.
Diese Werte werden nun mit dem Newton-Verfahren verbessert; das Resultat ist fettgedruckt. Unter ihm
steht - klein - die Differenz zur Prognose; sie ist stets kleiner als die Hälfte der Änderung zum Vorgänger.
Die Vorhersage war also nützlich.
Nach Kenntnis von drei Werten läßt sich die Prognose noch verbessern: Man bildet die Differenz des ersten
und die des zweiten Paares; diese unterscheiden sich wiederum; der Unterschied ist die zweite Differenz.
Man trifft die Annahme, daß diese konstant bleiben möge; damit kann man schätzen, wie groß die Differenz
zwischen dem dritten und dem vierten Wert wird, und damit den vierten Wert. Die entsprechende Tabelle
wird, die zweiten Differenzen zwischen die ersten geschrieben und die geschätzten Werte kursiv, nachgebesserte fett und Abweichung klein:
a
10000
14156
18544
23164
23021
-143
∆1 a
∆2 a
4156
4388
4620
232
232
b
10000
10209
10338
10387
10427
∆1 b
∆2 b
209
129
49
-80
-80
40
c
0
-2123
-3259
-3408
-3958
∆1 c
∆2 c
-2123
-1136
-149
987
987
-550
Die Fehler der Vorhersagen haben sich diesmal merklich verringert.
Sind vier aufeinanderfolgende Werte berechnet, so kann man noch die dritten Differenzen einbeziehen, die
sich durch Subtraktion der zweiten voneinander ergeben:
75
a
10000
14156
18544
23021
27444
27540
∆1 a
∆2 a
4156
4388
4477
4423
232
89
-54
∆3 a
-143
-143
b
10000
10209
10338
10427
10436
10490
∆1 b
∆2 b
209
129
89
9
-80
-80
-80
54
-96
∆3 b
0
0
c
0
-2123
-3259
-3958
-4470
-4430
∆1 c
∆2 c
∆3 c
-2123
-1136
-699
-812
987
437
-113
-550
-550
-40
Das mag reichen; für den Start des nächsten Newton-Verfahrens hätte man also Startwerte, die auf etwa
zwei Nachkommastellen oder rund 1 Promille richtig sind - zwei Iterationsschritte dürften ausreichen.
Bei der weiteren Rechnung lohnt es sich nicht unbedingt, noch weitere Differenzen zu betrachten,23 vielmehr
sollte man nach dem nächsten Schritt die Tabelle aus den letzten berchneten Funktionswerten gleitend neu
aufstellen. Es werden also die Werte zu λ = 0 weggelassen und nur mit denen zu 0.1 bis 0.4 operiert, usw..
Im vorliegenden gutartigen Beispiel hätte sich der Aufwand einer solchen sorgfältigen Extrapolation nicht
gelohnt - sie war so nützlich wie die Stromlinienform an einer Dampfwalze. Aber sie rentiert sich, wenn man
ein sehr effektives Programm braucht, das oftmals aufgerufen wird (der erwähnte Echtzeit-Steuerrechner...).
Darüber hinaus sollte ein weiteres Mal demonstriert werden, wie diese Rechnung abläuft.
Es gibt Programmiersprachen, in denen man dreieckige Felder vereinbaren kann. Hier ist ein Anwendungsfall:
die Differenzentabelle. Natürlich geht auch eine rechteckige Matrix, aber da verschwendet man Speicherplatz.
4.2.6
Aufgaben
1. Gegeben sei f (x) = x2 − a. Sei x0 > 0.
√
√
a) Sei a > 0; überlegen Sie sich geometrisch, wieso bei x0 6= a stets x1 > x2 > x3 > x4 > . . . > a
gilt!
b) Begründen Sie, warum man zur Bestimmung der Quadratwurzel aus a > 0 stets mit x0 = 1 starten
kann!
c) Was passiert im Falle a = 0?
d) Wie verhält sich das Verfahren bei a < 0? Testen Sie den Fall a = −4 mit verschiedenen Starwerten!
√
2. Erstellen Sie eine auf dem√Newton-Verfahren basierende Iterationsvorschrift zur Berechnung von n x, x >
0! Berechnen Sie damit 3 10 !
3. Angenommen, man hat ein Programmsystem, in dem man auf die Mantisse und den Exponenten der
Gleitkommazahlen separat zugreifen kann. Die Mantisse sei (bei x 6= 0) mit 1 ≤ |M | < 2 normiert. In
den Bytes sind Verschiebeoperationen und sonstige Assemblerbefehle
ausführbar.
√
Erstellen Sie - in Worten! - ein Programm zur Berechnung von x mit Hilfe des Newton-Verfahrens!
Ziel soll es sein, möglichst wenige arithmetische Operationen auszuführen.
Zum Gewinnen eines Startwertes kann die Taylor-Formel benutzt werden:
√
1+x = 1+
x x2
−
+ ... .
2
8
Gewünscht ist eine relative Genauigkeit des Resultats von mindestens 5 · 10−8 !
4. Wenden Sie das Newton-Verfahren auf die Gleichung f (x) = 0 mit f (x) = 1/x und x0 = 1 an! Erklären
Sie das Resultat!
5. Mit einer dezimal n-stelligen Mantisse soll die Funktion f (x) = sin x berechnet werden, und zwar auf
m < n Nachkommastellen genau. Die Berechnung erfolge mit Hilfe der Potenzreihenentwicklung dieser
Funktion.
Mindestvoraussetzung für das Erreichen der gewünschten Genauigkeit ist, daß jeder Summand auf
die entsprechende Zahl von Nachkommastellen genau ist. Dazu darf er (betragsmäßig) nicht zu groß
werden.
23 Vgl. mit den Aussagen zur Interpolation, S. 94.
Man beachte: es wurde wesentlich ausgenutzt, daß sich die λ-Werte alle mit derselben Schrittweite ändern. (Ihre Größe spielte
dabei in dieser Rechnung nicht einmal eine Rolle; eine Gerade bleibt eine Gerade und eine Parabel bleibt eine Parabel, egal, in
welchem Maßstab man sie zeichnet.)
Die Werte, die in die Extrapolation eingehen, sind mit hoher - theoretisch: beliebiger - Genauigkeit berechenbar; es sind keine
Meßwerte, die unvermeidlich Fehler enthalten. Somit wäre eine Extrapolation relativ hohen Grades vertretbar.
76
Sei x eine ungerade ganze Zahl; geben Sie den betragsgrößten Summanden √
in der Potenzreihe an!
Wie lautet sein genäherter Wert, wenn man die Stirlingsche Formel k! ≈ 2kπ · k k · e−k benutzt?
Berechnen Sie damit für n = 8, m = 5 und andere Kombinationen eine ungefähre Grenze g > 0,
innerhalb der (|x| ≤ g) die Berechnung von sin x mit der Potenzreihenentwicklung möglich wäre!
Hinweis: Benutzen Sie eine Fixpunktiteration!
6. Der Widerstand eines gewissen Bauteils ist abhängig von der Stärke des hindurchfließenden Stroms;
der Hersteller gibt die folgende Funktion für die Kennlinie an (R in Ω, I ≥ 0 in A):
R(I) = 42.4 − 2.8 · arctan
1.35
0.44 + I
.
Bestimmen Sie mit Hilfe einer Fixpunktiteration den bei U = 185V durch dieses Bauteil fließenden
Strom!
7. Gesucht ist die positive Nullstelle von f (x) = x4 − x3 − 8x2 − 3x − 296304. Man überlegt sich leicht,
daß sie etwas oberhalb von 20 liegt.
Experimentieren Sie mit einem kleinen Programm, das, von x0 = 20 ausgehend, neue xk = ϕ(xk−1 )
berechnet, wobei die Funktion ϕ(x) entsteht, indem man die Funktion nach einem der vorkommenden
x auflöst! In welchen Fällen tritt Konvergenz auf?
Man kann aus dem Polynom auch eine biquadratische Funktion herausziehen, oder man betrachtet
f (x) − (x − 0.25)4 . Funktionieren die resultierenden Iterationsvorschriften? Sind sie vielleicht besser?
8. Ein homogener Würfel mit der Kantenlänge a aus einem zu untersuchenden Material soll befestigt
werden; dazu dient eine um drei Flächen gelegte ’Bauchbinde’ aus einem Metallband, das an den
beiden Enden an der Wand befestigt wird. Das Material des Würfels hat eine Dichte von 1.056g · cm−3 ,
1cm des Bandes hat eine Masse von 2.385g. Die Gesamtmasse von Würfel und Band soll 83.55kg
betragen.
Berechnen Sie mit Hilfe einer Fixpunktiteration die Kantenlänge a des Würfels! Geben Sie Startwert
und Zwischenresultate an!
77
Kapitel 5
Optimierung
5.1
Problemstellung
’Spieglein, Spieglein an der Wand,
Wer ist die Schönste im ganzen Land?’
’Frau Königin, Ihr seid die Schönste hier,
aber Sneewittchen über den Bergen,
bei den sieben Zwergen
ist noch tausendmal schöner als ihr.1
Brüder Grimm
Die Optimierung wird in diesem Rahmen nur allgemein behandelt; zum speziellen Thema ’Lineare Optimierung’
wird nichts gesagt. Aufgaben der Linearen Optimierung können im Rahmen einer geschlossenen Theorie prinzipiell
gelöst werden; mit dem Simplexverfahren existiert dafür ein universeller und effektiver Algorithmus. Die Situation
ist ähnlich zu der für lineare Gleichungssysteme, die man mit dem Gauss-Verfahren abschließend behandeln kann.
Ein solches detailliertes Eingehen würde allerdings den Rahmen des Kurses sprengen.
Es geht künftig darum, die Stelle(n) x∗ ∈ Rn zu finden, in denen eine skalare Funktion f (x1 , x2 , . . . , xn ) - die Zielfunktion - ihr Minimum (oder Maximum) annimmt.2 Für die Theorie ist es unwesentlich, ob es sich um ein Minimum oder
Maximum handelt - die Funktion −f (x) hat ihr Maximum gerade dort, wo f (x) das Minimum hat, und umgekehrt.
Es reicht also z. B. aus, ein Programm zur Minimumsuche zu besitzen - bei einem Maximumproblem braucht man
dann nur das Vorzeichen der Zielfunktion zu ändern. Künftig ist deshalb nur vom Minimum die Rede, ohne daß dies
die Allgemeinheit einschränkt.
Prinzipiell werden lokale Extrema gesucht.
Es soll also für ein gewisses ε > 0 gelten: f (x) ≥ f (x∗ ) ∀x : |x − x∗ | < ε.
Ein globales Minimum zu finden ist eine zusätzliche Aufgabe, die durch spezielle, meist sehr problembezogene Überlegungen behandelt werden muß. Die Frage ist auch, ob ein solches globales Minimum überhaupt existiert. - Die
Funktion f (x) = x + sin 2x hat unendlich viele lokale Minima und Maxima, aber keinerlei globales.
Es sind weiterhin die Fälle zu unterscheiden, ob der Extremwert auf dem gesamten Raum Rn gesucht wird oder nur
auf einem gewissen Bereich. Im letzteren Fall spricht man von Optimierung unter Nebenbedingungen. Dieser Bereich
ist üblicherweise durch Bedingungen in Form von Ungleichungen gegeben.3 Es gibt also zusätzlich zur Zielfunktion
noch eine gewisse Anzahl m von Funktionen ϕk (x), die nichtnegative Werte annehmen müssen, damit das betreffende x überhaupt in Betracht kommt: ϕk (x) ≥ 0, k = 1, 2, . . . , m. Die Menge aller x, die all diesen Ungleichungen
genügen und unter denen der Extremwert x∗ bestimmt wird heißt zulässiger Bereich. Falls sich die Nebenbedingungen
ϕk (x) ≥ 0, k = 1, 2, . . . , m, widersprechen (z. B. x ≤ 2 und x ≥ 10, also 2 − x ≥ 0 und x − 10 ≥ 0), so ist dieser
zulässige Bereich leer und die Aufgabe damit unlösbar.
Typisch für Aufgaben mit Nebenbedingungen ist der Umstand, daß der Extrempunkt auf dem Rand des zulässigen
Bereiches liegen kann.
Suchen wir das Minimum der Funktion f (x) = x für x ≥ 0 und 1 − x ≥ 0, so wird dies in x∗ = 0 angenommen. Es ist
1 Die Monarchin repräsentiert folglich ein lokales Extremum, Sneewittchen hingegen ein globales. (Vorausgesetzt, die Formulierung ’im ganzen Land’ ist die korrekte Festlegung eines zulässigen Bereiches.) Es erstaunt aber, daß der Spiegel in der Lage
ist, so eine komplexe und diffizile Erscheinung wie Schönheit, speziell weibliche, quantitativ zu erfassen. Es kann sich dabei nur
um eine echte Maßzahl handeln und nicht um eine Ordnungszahl, denn es wird ein Quotient gebildet. (Wenn der Erste 10sec
für 100m braucht und der Zweite 11sec, so kann man ihre Zeiten ins Verhältnis setzen, nicht aber ihre Plätze.) - Verdächtig ist
allerdings der Wert 103 ob seiner ’Glattheit’ - vermutlich wurde hier nicht sehr objektiv oder genau gemessen.
2 Gesucht ist ausdrücklich diese Stelle - der Wert, den die Funktion dort annimmt, ist zweitrangig und kaum zu beeinflussen.
Beim Skat kann man mit einem gegebenen Blatt eine optimale Strategie spielen. Ob es für den Sieg reicht oder wieviel man
gewinnt ist bei der Wahl dieser Strategie unwichtig - man muß nur versuchen, möglichst viele Punkte o.ä. zu machen.
3 Durch Einführung sogenannter Schlupfvariablen kann man diese Ungleichungen prinzipiell in die Gleichungsform überführen.
78
aber f 0 (x) = 1 6= 0 ∀x. Die Ableitung der Zielfunktion ist auf der gesamten reellen Achse von Null verschieden. Die
Zielfunktion hat dort keinen Extremwert, wohl aber auf dem eingeschränkten Abschnitt [0, 1], und zwar an dessen
Rand.
Die gängige Technik der Extremwertsuche (Ableitung(en) suchen und gleich Null setzen) ist also nur für Extremwerte im Innern des zulässigen Bereichs brauchbar, oder für Extremwertsuche ohne Nebenbedingungen (wobei der
zulässige Bereich automatisch mit dem gesamten Raum übereinstimmt oder zumindest mit dem Definitionsbereich
der Zielfunktion).
In den nächsten drei Punkten werden Methoden zur Extremwertsuche ohne Nebenbedingungen betrachtet. Natürlich
kann man dabei auch das klassische Verfahren einbeziehen, das darin besteht, daß man den Vektor der partiellen
Ableitungen ∂f /∂xk gleich Null setzt. Das ergibt ein System von n (i. a. nichtlinearen) Gleichungen mit den n Unbekannten x1 bis xn . Das kann z. B. mit dem mehrdimensionalen Newton-Verfahren gelöst werden.
Man muß dazu allerdings zweite partielle Ableitungen ∂ 2 f /∂xk ∂xl berechnen, und das kann sehr aufwendig werden,
selbst wenn man bedenkt, daß diese Matrix symmetrisch ist. Nutzt man die Verfahren zur numerischen Berechnung
der ersten oder zweiten Ableitung, so genügt es, nur die Funktion f (x1 , . . . , xn ) zu programmieren. Näherungsweise
ist dann:
∂f
1
=
[f (x1 , . . . , xk−1 , xk + hk , xk+1 , . . . , xn ) − f (x1 , . . . , xk−1 , xk − hk , xk+1 , . . . , xn )] ,
∂xk
2hk
∂2f
1
= 2 [f (x1 , . . . , xk−1 , xk + hk , xk+1 , . . . , xn ) − 2f (x1 , . . . , xk−1 , xk , xk+1 , . . . , xn )+
2
∂xk
hk
+f (x1 , . . . , xk−1 , xk − hk , xk+1 , . . . , xn )] ,
∂2f
1
=
[f (x1 , . . . , xk−1 , xk + hk , xk+1 , , . . . , xl−1 , xl + hl , xl+1 , . . . , xn )−
∂xk ∂xl
4hk hl
−f (x1 , . . . , xk−1 , xk − hk , xk+1 , , . . . , xl−1 , xl + hl , xl+1 , . . . , xn )−
−f (x1 , . . . , xk−1 , xk + hk , xk+1 , , . . . , xl−1 , xl − hl , xl+1 , . . . , xn )+
+f (x1 , . . . , xk−1 , xk − hk , xk+1 , , . . . , xl−1 , xl − hl , xl+1 , . . . , xn )] .
Man bedenke, daß man i. a. zu jeder Variablen xk eine eigene Schrittweite hk wählen muß!
Man kann die Aufgabe zur Lösung eines Gleichungssystems auf eine Minimumaufgabe zurückführen:
Das System g1 (x) = 0, . . . , gn (x) = 0 ist äquivalent zu der Frage, ob die Zielfunktion γ(x) = |g(x)|2 = g12 (x) + . . . +
gn2 (x) ein Minimum mit dem Wert Null besitzt. - Allgemeiner kann man noch Wichtungsfaktoren ak > 0 einführen:
γ(x1 , . . . , xn ) =
n
X
ak gk2 (x1 , . . . , xn ) −→ min !
k=1
Bisweilen ist es sinnvoll, sich mit einem groben Verfahren zur Extremwertsuche in die Nähe eines solchen Minimums
zu begeben, und die gewonnene Stelle dann als Startpunkt für ein mehrdimensionales Newton-Verfahren zu nutzen.
Der Aufwand bei der Lösung einer Optimierungsaufgabe steigt mit der Dimension des Problems schnell an. Eindimensionale Optimierung ist relativ einfach; mit der Methode vom Goldenen Schnitt hat man auch ein effektives
Abtastverfahren zur Bestimmung der Extremstelle.
Man kann sich die Aufgabe vorstellen, in einem trüben See ein Kabel (geradeaus) zu verlegen; vorher wäre es vielleicht sinnvoll, die maximale Tiefe entlang dieser Strecke zu ermitteln. Man würde also - falls bessere Mittel fehlen mit einem Boot diese Strecke abfahren und mit einer Stange oder einem Lot die Tiefe messen. Das kann praktisch
nur in gewissen Abständen geschehen, so daß es theoretisch vorkommen könnte, daß man ein enges und tiefes Loch
übersieht. Bei Kenntnis der Zielfunktion weiß man aber vielleicht, daß diese gutartig ist und nicht zu derartigen
Ausreißversuchen neigt. (Wenn der Seegrund aus Sand besteht kann es in ihm auch keine steilen Löcher geben.) Man
beachte die allgemeine Philosophie: Eine Funktionswertberechnung stellt einen gewissen Aufwand dar (die Stange
oder das Lot absenken ...), und diese Operation möchte man möglichst wenig ausführen, andererseits ein halbwegs
sicheres Resultat erreichen.
Zweidimensionale Optimierung kann man vergleichen mit der Aufgabe, die tiefste Stelle dieses Sees zu finden - eine
offenbar viel aufwendigere Zielstellung. Der zulässige Bereich ist dabei übrigens gerade das Gebiet des Sees.
Dreidimensionale Optimierung: Man sucht in einem Raum die Stelle besten Empfangs eines Senders, usw..
Die geschilderten Beispiele sind durchweg Probleme der stetigen Optimierung; auf ’Diskrete Optimierung’ wird hier
nicht näher eingegangen. Letzere befaßt sich mit der Frage nach einer optimalen Auswahl einer Variante aus einer in
der Regel sehr großen - aber endlichen - Anzahl von Möglichkeiten. Wenn man an n Steckplätze einer Leiterplatte
n verschiedene Bauteile plazieren kann, so ist jede derartige Anordnung in irgendeiner Weise zu bewerten (Montageaufwand, Länge der Verbindungen, Kreuzungen, ...) und es gibt eine (oder mehrere) günstigste Variante(n) in einer
Menge von n! Möglichkeiten.
Hierbei gibt es keine stetigen Abhängigkeiten und keine Möglichkeit, die Differentialrechnung einzusetzen; die Methoden unterscheiden sich beträchtlich von denen der stetigen Optimierung.
79
5.2
Koordinatenweiser Abstieg
Das Problem sei ohne Nebenbedingungen (Restriktionen); trotzdem kann man zumeist einen gewissen Bereich angeben, in dem die Variablen xk vernünftigerweise liegen sollten: ak ≤ xk ≤ bk . Man wählt nun eine Variable aus,
z. B. x1 . Für den Aufwand ist es nicht egal, mit welcher Variablen man anfängt, und n reale physikalische oder
geometrische usw. Größen kann man beliebig numerieren - diese Auswahl muß im Einzelfall also durchaus mit einiger
Sorgfalt erfolgen.
Nun weist man den restlichen Variablen x2 bis xn irgendwelche sinnvollen Werte x0k zu und variiert x1 mit dem Ziel,
(0)
(0)
die jetzt nur noch von dieser einen Variablen abhängige Funktion f (x1 , x2 , . . . , xn ) zu minimieren. Das kann mit
(1)
dem Verfahren vom Goldenen Schnitt geschehen, und führt im Erfolgsfalle zu einem Wert x1 .
Dieser wird fixiert, und jetzt versuchen wir x2 analog zu verbessern, indem wir die eindimensionale Funktion
(1)
(0)
(0)
f (x1 , x2 , x3 , . . . , xn ) minimieren.
(1)
(1)
(1)
(0)
(0)
Den gefundenen Wert nennen wir x2 und fahren mit f (x1 , x2 , x3 , x4 , . . . , xn ) fort, usw.
Nach einem solchen Durchlauf hat man das Minimum noch nicht gefunden, denn jede Variable wurde optimiert, ohne
daß die restlichen den Bestzustand repräsentierten. Aber der Funktionswert hat sich insgesamt sicher verringert. Nun
(1)
(1)
(2)
wird diese Aktion wiederholt: x2 , . . . , xn hält man fest und verbessert x1 zu x1 usw..
Möglicherweise (...oft) kommt man so in ein Minimum; zumindest in ein lokales. Wenn es kein Minimum gibt, weil es
irgendwohin dauernd bergab geht (beschränkt oder unbeschränkt), so wird man dies vielleicht irgendwann merken.
Beispiel: Gesucht sind Dämpungskoeffizient λ, Winkelgeschwindigkeit ω und Phasenverschiebung α der gedämpften
Schwingung ψ(t; λ, ω, α) = e−λt · sin(ωt + α) aus den Angaben ψ(0.6) = 0.43, ψ(1.1) = −0.48 und ψ(1.6) = 0.08 (alle
Angaben exakt).
Es muß e−0.6λ ≥ 0.43, also λ ≤ 1.41 gelten. Die anderen zwei Bedingungen ergeben λ ≤ 0.667 und λ ≤ 1.58. Die
schärfste der drei Bedingungen muß zutreffen: λ ≤ 0.667.
Wählen wir ω = α = 1 und versuchen wir λ anzupassen; ausgegangen wird von der Zielfunktion
2
f (λ, ω, α) = e−0.6λ sin(0.6ω + α) − 0.43
2
+ e−1.1λ sin(1.1ω + α) + 0.48
+ e−1.6λ sin(1.6ω + α) − 0.08
2
.
Sie ist nichtnegativ und kann bestenfalls den Wert Null annehmen - genau so eine Stelle ist gesucht.
Bei ω = α = 1 ist der bestmögliche Wert λ = 0.666998, also der obere Rand des gegebenen Intervalls. Die Zielfunktion
wird 0.867069.
Die Anpassung von ω senkt diesen Wert auf 0.095552, und eine Variation von α ergibt 0.077684. Damit ist der erste
Zyklus abgeschlossen.
Der nächste Zyklus reduziert die Zielfunktion zu 0.051053; in der dritten Runde ändert sich auch λ. - Die Rechnung
ist in der nachstehenden Tabelle dargestellt:
k
1
1
1
2
2
2
3
3
3
4
4
4
5
5
5
λ
0.666998
0.666998
0.666998
0.666998
0.666998
0.666998
0.644365
0.644365
0.644365
0.610506
0.610506
0.610506
0.594264
0.594264
0.594264
ω
1
3.118797
3.118797
3.118797
3.303886
3.303886
3.303886
3.453277
3.453277
3.453277
3.570579
3.570579
3.570579
3.658363
3.658363
α
1
1
7.102741
7.102741
7.102741
6.956113
6.956113
6.956113
6.837875
6.837875
6.837875
6.744574
6.744574
6.744574
6.670346
f (λ, ω, α)
0.867069
0.095552
0.077684
0.077684
0.062768
0.051053
0.050880
0.040228
0.032577
0.032183
0.025060
0.020238
0.020145
0.016027
0.013006
k
6
6
6
7
7
7
8
8
8
9
9
9
35
35
35
λ
0.590544
0.590544
0.590544
0.592340
0.592340
0.592340
0.596352
0.596352
0.596352
0.601173
0.601173
0.601173
0.642369
0.642369
0.642369
ω
3.658363
3.726209
3.726209
3.726209
3.780448
3.780448
3.780448
3.824607
3.824607
3.824607
3.860974
3.860974
4.049006
4.049488
4.049488
α
6.670346
6.670346
6.610254
6.610254
6.610254
6.561096
6.561096
6.561096
6.520547
6.520547
6.520547
6.486906
6.311650
6.311650
6.311205
f (λ, ω, α)
0.013001
0.010545
0.008616
0.008615
0.007069
0.005814
0.005808
0.004804
0.003975
0.003966
0.003300
0.002744
0.000001
0.000001
0.000000
Von dem ermittelten Wert für α kann getrost 2π = 6.28 . . . abgezogen werden; davon abgesehen ist der Satz der
Wertepaare gut getroffen, und die erhaltene Kurve wirkt überzeugend.
Die gewonnene Funktion hat den folgenden Verlauf (die gegebenen Wertepaare als Kreuze dargestellt):
80
....
......... ψ(t)
....
..........................
....
..........
.......
......
.....
...
.
.
.
.....
...
.
.
.
.
.....
.
..
.
..
.....
...
.
.
... ..
.
.
..
..
.....................
.
.
....
.
.
. ....
.... ....
....
....
.... ...
.............................................
....
...........
.
.... ..
.
.
.
.
.
.
.
.
....
.... ...
.. ...........
....
1.5 ......................
.....
....
................................................................................................|..................................................................................................|..............................................................................................|.................................................................................................................
...
.....
...
t
0.5
1
.....
.....
....
.
.
.
.
.
.....
.
.
.
....
.
.....
......
.....
....
.....
.
.
......
.
.
.
....
.
....
.......
....
.........
.......... .
................................................
...
..
In der nachstehenden Abbildung ist diese Vorgehensweise im zweidimensionalen Fall demonstriert; das - globale Minimum ist im Koordinatenursprung. Die Fläche der Funktion ist ein elliptisches Paraboloid:
f (x1 , x2 ) = a2 (y − x)2 + (y + x)2 ,
ihr Verlauf wird durch Höhenlinien dargestellt. Diese haben typischerweise in der
Nähe des Minimums einen großes Abstand
und werden in den steil ansteigenden Flanken enger. Für a = 3 ergibt sich das
rechtstehende Bild; der koordinatenweise
Abstieg ist als ’Treppe’ eingezeichnet, die
Punkte x(k) sind die Stellen, in denen die
Winkel dieser ’Treppe’ liegen:
Wie man sieht arbeitet sich das Verfahren
recht gut in Richtung des Minimums voran; dies ist aber auch deutlich dem gutartigen Problem geschuldet. Wenn man den
Wert von a groß macht, so ergibt sich eine
ähnliche Fläche, aber sie ist jetzt ein recht
enges Tal mit steil ansteigenden seitlichen
Hängen, dessen Boden einen vergleichsweise sanften Bogen macht. Und dieser Talboden ist entlang der Geraden x2 = x1 gerichtet.
Im Vergleich zum vorigen Bild ist hier nur
jede zweite Höhenlinie eingezeichnet. Der
Parameter a hat den Wert 10.
Diesmal sind die Stufen der ’Treppe’ wesentlich kleiner, und das Verfahren kommt
nur mühsam voran. Sein Problem ist, daß
es schräg zum Tal läuft und dabei nach
Durchqueren der engen Talsohle immer
sofort an den gegenüberliegenden Hang
kommt.
Eine weitere Vergrößerung von a würde das
Tal noch enger machen und den Fortschritt
des Verfahrens noch weiter bremsen.
Sorgt man dafür, daß das Tal überhaupt
keine flache Sohle mehr hat, sondern läßt
man die Hänge keilförmig zusammenlaufen, so bleibt das Verfahren
.... x2
..............................
................................................. ......
....
.
.
.
.
.
.
.
.
.
... ... ...........
....
................................. ........ ... ..
...
............................................................................ ..... .... ...
.
.
.
.
.
... ............................. ..................... . .. . .
.............................................. .............................................. ..
.
.
.
.
.
............................................................. .. . . . .
.
.
.
.
................................................................................. .... .... ... ... .........
.
.
.
.
. . . .. . . ..
.
...................... ..... ........ .................... . . . . .. .
................................................................................ ... ... .................
.
.
.
.
. . . . . . .. ..
.
........................ .... ......... ............... . .. .. .. .. ......
............................................................ .......... ... ... .............................
.
.
.
.
.... . . .
........................ .... ..... ... .. .. ... ... ...............
..................................................... ..... .......... ..... ...................................
.
.
.
...................................................................................................................................................................................................................................
.... ...... ..........................................
x1
............... ... ... ...
.... ....... ..........................................
................................. ....
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
... . .
.... .. .. .. .. .. .. ..
............ ... ... .. ..
....... ...............................
.. ............. .. .. .. .....................................................................................
.
.... .. ... . . . .
.... .. .. .. .. ...
......... ...............................
.. ....... ... ... .... .......................................................................................
. .
.... .. .. .. .. ..
.. .. .. ... ... ...........................................................................
... ... .... .... ..................................................................................... .....
..
.
.... ... ... ..
....
.... .... ....... .............................................................................
....
... ..... .................................................
....
..... .........................................
............................
...
.... x
.... 2
....
.............
..... .....
....
.
.
.
.
.
. .....
....
............ .. ...
....
...................................
.
.
.
.
..
....
...................... .......
....
..............................................
.
.
.
.
.
..
... .
....
.............. .... ...........
.... ........................................................
.... ................................................
...................... ...................
.
.
......................... ............................
.
.
.
.
......... ... ... .........
...........................................................................................................................................................................................................................................
.
.
.
..... .. ............
x1
.......................... ...............................
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
..
............. ... ..................... ...
................. .................................. .....
.
.
.
.
..
. .
....
........... ............
....
................ ...........................
.
.
.
....
....... ..........................
.
.
.
...... .................
....
.
.
....
...... .................
.
.
.. ................
....
.
.
. ..
....
.................
...
...
.
schließlich weit außerhalb des Extrempunktes einfach stehen - ohne den geringsten weiteren Fortschritt. Ein Beispiel
81
dafür wäre die Funktion
f (x1 , x2 ) = a2 |x1 − x2 | + x21 .
Durch Wahl von großen Werten von a kann man den koordinatenweisen Abstieg in beliebiger Entfernung vom Ursprung - wo nach wie vor das Minimum liegt - und bei beliebig großen Funktionswerten zum Halten bringen.
Bei differenzierbaren Funktionen kann dieser Fall nicht eintreten, aber solche engen Täler sind gerade bei größerer
Anzahl von Variablen eher die Regel. Diese plausible Methode ist deshalb oft recht uneffektiv und in Fällen, in denen
die Funktionswerte aufwendig berechnet werden müssen, nicht zu empfehlen.
5.3
Gradientenverfahren
Die Funktion f (x1 , x2 , . . . , xn ) sei in allen Variablen partiell differentierbar; der Vektor ihrer partiellen Ableitungen
heißt bekanntlich Gradient:
∇f (x) = grad(f )(x) =
∂f
∂f
∂f
(x),
(x), . . . ,
(x)
∂x1
∂x2
∂xn
T
.
Sei x∗ eine nicht-stationäre Stelle der Funktion f (x), d. h. ihr Gradient ist dort nicht der Nullvektor. Es sei g ein
Einheitsvektor in Richtung des Gradienten und ∆x ein beliebiger Vektor der - sehr kleinen - Länge ε; man kann ihn
eindeutig darstellen als Linearkombination von g und einem zu g orthogonalen Einheitsvektor r:
g=
1
∇f (x∗ ) ,
|∇f (x∗ )|
∆x = ε1 g + ε2 r ,
ε=
p
(ε1 g + ε2 v)T (ε1 g + ε2 v) =
p
ε21 + ε22 .
Die Änderung ∆y, die f (x) erfährt, wenn man sich aus x∗ in x∗ + ∆x begibt, ist dank der vorausgesetzten Kleinheit
des Vektors ∆x in guter Näherung
∆y = (∇f (x∗ ))T ∆x = |∇f (x∗ )|(g T ∆x) = |∇f (x∗ )|(g T [ε1 g + ε2 v]) = ε1 |∇f (x∗ )| .
Betrachten wir das letzte Produkt; am Faktor |∇f (x∗ )| kann man nichts ändern; nach Voraussetzung ist er positiv.
Auf Grund der Beziehung ε21 + ε22 = ε2 liegt ε1 zwischen −ε und +ε.
Im Falle ε1 = ε tritt somit die maximale positive Änderung ∆y ein, und bei ε1 = −ε die stärkste Abnahme dieses
Wertes.4
Der Gradient ist folglich stets die Richtung des stärksten Anstiegs, und mit -1 multipliziert ergibt er die Richtung
des stärksten Abfalls.
Wenn man also das Minimum der Funktion f (x) sucht, so bietet es sich an, aus einem Startpunkt x(0) heraus entgegen
die Richtung des Gradienten zu laufen. Es geht zunächst immer bergab, es sei denn, man war in einem stationären
Punkt (z. B. in einem Extremwert). Man geht solange in diese Richtung, bis das Gelände (die Funktion) wieder
ansteigt. Der tiefste Punkt des Weges sei x(1) ; dort berechnet man einen neuen Gradienten und macht sich entgegen
dessen Richtung erneut auf den Weg, usw..5
Faktisch ermittelt man also jeweils das Minimum t∗ der Funktion gk (t) des skalaren Arguments t > 0:
g(t)
=
f (x(k) − t · ∇f (x(k) )) ,
x(k+1) = x(k) − t∇(x(k) ) :
Es geht immer abwärts, und zwar aus dem jeweiligen Startpunkt heraus stets in die Richtung der stärksten Abnahme.
Es ist zu erwarten, daß dieses Verfahren effektiver ist als das des koordinatenweisen Abstiegs, wo man nur in die recht
willkürlichen und nicht an das Problem gebundenen Richtungen der Koordinatenachsen sucht.
Wenn man den neuen Punkt x(k+1) im Minimum von g(t) sucht, so ist das eine Stelle, wo die Gerade x(k) −t·∇f (x(k) )
eine Tangente an einer Höhenlinie ist. Der Gradient steht stets senkrecht auf der Höhenlinie; demzufolge ist jede neue
Richtung orthogonal zur vorigen.
Zur Demonstration wird jetzt eine Art Sombrero gebastelt: (x21 + x22 − 1)2 .
Diese Funktion ist nichtnegativ; auf dem Kreis x21 + x22 = 1 ist sie Null, innen hat sie eine Ausbeulung nach oben,
und außerhalb dieses Kreises geht die Krempe wiederum nach oben.
Diese Funktion wird mit a2 multipliziert, was sie ggfs. in die Höhe zieht, und ein wenig angekippt, indem x1 addiert
wird. Der kleinste Wert liegt dann auf der x1 -Achse, mehr oder weniger unterhalb von -1. Die resultierende Zielfunktion
f (x1 , x2 )
=
a2 (x21 + x22 − 1)2 + x1
ist gerade in x2 : f (x1 , −x2 ) = f (x1 , x2 ). Es reicht also aus, das Verfahren bei x2 > 0 zu betrachten.
4 Diese
5 Ist
Beziehung gilt für endliche Werte von ε nur genähert; durch den Grenzübergang ε → 0 ergibt sie sich korrekt.
Ihnen die Ähnlickeit dieser Vorgehensweise mit dem gedämpften Newton-Verfahren aufgefallen?
82
...
...
...
.
.......... x2
...
...
...
...
...
...
....
...
...
...
....
...
...
...
...
. ..
...
.... . . .
... . . .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
............................. .
.
.
..
......
..
...
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
..
....... .
..
..
...
......... .
.
.
..
.
.
...
...
......
..
..
.........
..
.
.
...
.
.
........
..
...
...
..
...
.
.
.
.
..................................|...............................................................................................................................................................................................................................................................................................................................................................
....
..
..
..
x1
a = 30
a = 300
a=3
....
.
.
.
Der Startpunkt war in allen drei Fällen derselbe: x1 = −0.3, x2 = 1.5. Der erste Schritt ist in allen Fällen recht
gründlich - man steigt ein ganzes Stück die Krempe des Sombreros hinab. Der Kreis x2 + y 2 = 1 ist jeweils punktiert
angegegeben; bei a2 = 3 auch die Lage des Minimums auf der x1 -Achse (in den anderen Fällen ist es sehr nahe am
Kreis).
Bei a2 = 3 ist das ’Tal’ recht breit; das Gradientenverfahren kommt ganz gut voran, obwohl es nicht etwa einfach die
Talsohle entlanglaufen würde wie ausgeschüttetes Wasser. Man erkennt - im Rahmen der Güte des Zeichenprogramms
- die rechten Winkel der Schritte, die hier auch nicht mehr parallel zu den Koordinatenachsen verlaufen.
Bei a2 = 30 ist das Tal enger, und bei a2 = 300 sehr eng. Das Verfahren neigt dazu, nur noch von einer Seite des Tals
zur gegenüberliegenden zu wechseln, ohne sich in Richtung der leicht abfallenden Talsohle voranzuarbeiten. Damit
kommt man nicht mehr von der Stelle.6
Auch diese Situation ist leider typisch für das Gradientenverfahren. In der beschriebenen einfachen Form ist es nur
begrenzt zu gebrauchen.
Es gibt Weiterentwicklungen; so kann man aus einigen vorigen x(k) eine günstige Richtung schätzen, in die man
wesentlich vorankommt.
Fakt bleibt allerdings, daß simple und anschauliche Algorithmen leider meist nicht zu praktikablen Methoden führen
- die realen Optimierungsaufgaben sind meist zu widerspenstig.
5.4
Heuristische Suche
Archimedes’ Ausruf ’Heureka!’ verlieh einer Reihe von Methoden den Namen, die sich, vereinfacht gesagt, dadurch
auszeichnen, daß ihr Funktionieren naheliegend und plausibel ist, sich aber nicht immer scharf begründen läßt. Unter
gewissen formulierbaren Bedingungen konvergiert das Gradientenverfahren immer zum Extrempunkt; möglicherweise
aber unerträglich langsam. Ein heuristisches Verfahren kann in einem eigentlich lösbaren Fall versagen, wird aber in
der Regel nicht schlecht funktionieren, und es ist oft effektiver als eine streng begründbare Methode. Obendrein ist
es oftmals einfacher zu verstehen und zu programmieren.
Nehmen wir eine eindimensionale Minimumsuche; wir werfen eine Strecke der Länge h irgendwo in den in Frage
kommenden Bereich: a0 und b0 = a0 + h.
In den beiden Enden wird der Funktionswert berechnet. Falls nun f (a0 ) > f (b0 ) ist, so wird a1 = b1 gesetzt und
b1 = b0 + h = a1 + h, und bei f f (a0 ) < f (b0 ) wird a1 = a0 − h und b1 = a0 . Einfach ausgedrückt: Das Ende der
Strecke, an dem der größere Wert der Funktion registriert wird, wird über das andere Ende geklappt.
Dieser Prozeß wird wiederholt; damit ’kullert’ oder ’purzelt’ die Strecke in Richtung Minimum.
Wenn sie dies erreicht und durchschritten hat, so kippt sie im nächsten Schritt wieder zurück. Das Programm muß
also prüfen, ob die Strecke wieder in eine Lage kommt, in der sie schon war. Tritt dies ein, so verkürzt man die Strecke
(z. B. auf die Hälfte) und behält das Ende mit dem kleineren Funktionswert bei. Damit wird erneut gestartet, usw..
Man hört auf, wenn eine ausreichend kurze Strecke hin und her kippt; in diesem Bereich muß das Minimum liegen.
Falls die beiden Funktionswerte gleich sind, so wird die Strecke mit Hilfe einer Zufallszahl ein wenig verschoben.
Hat man den Wert h sehr klein gewählt - gemessen an den Maßstäben der Zielfunktion - so sind anfangs sehr viele
Schritte notwendig, um überhaupt in die Nähe des Minimums zu kommen. Man kann das Problem mildern, indem
man pro Schritt h etwas vergrößert, z. B. um den Faktor 1.3.
Mit dieser Darstellung soll das Prinzip eines heuristischen Verfahrens erläutert werden; verglichen mit der Methode
vom Goldenen Schnitt ist es uneffektiv. Allerdings kommt es ebenfalls nur mit Funktionswertberechnungen aus und
benötigt keine Ableitungen. Und man muß keinen Suchbereich eingrenzen.
Nun soll diese Methode für den mehrdimensionalen Fall verallgemeinert werden; wenden wir sie zunächst in der Ebene
an.
Um in zwei Richtungen zu suchen braucht man drei Punkte; sie seien als gleichseitiges Dreieck mit der Seitenlänge
h angeordnet. Ein solches wird also in das interessierende Gebiet geworfen (gezielt oder mit Hilfe des Zufallszahlengenerators), und in den drei Eckpunkten werden die Funktionswerte berechnet. Einer der drei Werte ist der größte,
6 vgl.
das Schicksal von Daniel Webster in: Mark Twain, Der berühmte Springfrosch von Calaveras.
83
ansonsten wird das Dreieck leicht verschoben. Nun wird diese Ecke an der gegenüberliegenden Dreieckseite gespiegelt;
man kann es sich auch so vorstellen, daß das Dreieck um diese Seite geklappt wird.
Danach wird der neue Wert berechnet und wiederum eine Ecke gespiegelt, usw.. Das Dreieck ’kullert’ in Richtung
zum Minimum.
Wenn ein Minimum existiert, so geht das solange, bis es in eine Lage gerät, in der es schon war. Nun wird es verkleinert, usw., analog zur Strecke.
Im dreidimensionalen Raum braucht man vier Testpunkte, die man im gleichen Abstand voneinander anordnet. Es
ergibt sich ein gleichseitiges Tetraeder.
Die Ecke mit dem größten Funktionswert wird an der gegenüberliegenden Fläche gespiegelt, usw..
Diese geometrischen Gebilde heißen Simplize;7 sie stellen die einfachsten Objekte in der jeweiligen Dimension n dar:
bei n = 1 die Strecke, bei n = 2 das Dreieck, bei n = 3 das Tetraeder. Jedes wird durch n + 1 Simplize der nächstniederen Dimension begrenzt: die Strecke durch zwei Punkte, das Dreieck durch drei Strecken, das Tetraeder durch
vier Dreiecke. Verbindet man - im vierdimensionalen Raum! - fünf Tetraeder miteinander, so entsteht ein vierdimensionales Simplex. So einfach ist das.
Um das Verfahren zu realisieren braucht man nur eine Vorschrift zur Bildung eines ersten Simplex’ und eine zur
Spiegelung eines Eckpunktes.
Der Bau eines Simplexes erfolgt Eckpunkt für Eckpunkt rekursiv. Ein erster Eckpunkt x(1) wird einfach durch Wahl
(1)
seiner n Koordinaten festgelegt (z. B. zufällig mit xk = ak + (bk − ak ) · Random, wodurch die Wahl gleichverteilt
in einem n-dimensionalen achsenparallelen Quader mit den beiden gegenüberliegenden Ecken a und b erfolgt). Dann
wird die Richtung zum zweiten Punkt x(2) gewählt, indem man zunächst einen Vektor y (2) 6= Θ wählt (oder ’auswürfelt’).
Die ’Kantenlänge’ des Simplexes - d. h. der Abstand seiner Ecken - sei festgelegt und h; man setzt
x(2)
x(1) +
=
h
|y (2) |
y (2) .
Nun wird ein Vektor y (3) 6= Θ senkrecht zu y (2) gewählt, also irgendeine nichtriviale Lösung der homogenen Gleichung
(2) (3)
(2) (3)
(2) (3)
y1 y1 + y2 y2 + y3 y3 + . . . + yn(2) yn(3) = 0
(2)
(3)
bezüglich yk bei gegebenen yk ; dieser wird, mit einer Zahl λ3 multipliziert, an den Mittelpunkt der Verbindungsgeraden von x(1) nach x(2) - also an den Schwerpunkt dieser beiden Punkte - angetragen:
x(3) =
1 (1)
(x + x(2) ) + λ3 y (3) .
2
Der Parameter λ3 ist nun so zu bestimmen, daß der Abstand von x(3) zu x(1) gerade h beträgt (der zu x(2) stimmt
dann offenbar auch):
1 (1)
(2)
(3)
(1) (x + x ) + λ3 y − x = h .
2
Das ist eine quadratische Gleichung in λ3 ; jede ihrer beiden Lösungen ist geeignet.
Der Richtungsvektor y (4) 6= Θ sei senkrecht zu y (2) und y (3) , er wird als irgendeine nichttriviale Lösung des Systems
homogener Gleichungen
(2) (4)
(2) (4)
(3) (4)
(2) (4)
(3) (4)
(3) (4)
y1 y1 + y2 y2 + y3 y3 + . . . + yn(2) yn(4) = 0 , y1 y1 + y2 y2 + y3 y3 + . . . + yn(3) yn(4) = 0
bestimmt. Man trägt ihn, mit λ4 multipliziert, an den Schwerpunkt der ersten drei Ecken an:
x(4) =
1 (1)
(x + x(2) + x(3) ) + λ4 y (4)
3
und fordert den Abstand h der entstehenden Ecke x(4) zu z. B. x(1) :
1 (1)
(2)
(3)
(4)
(1) (x + x + x ) + λ4 y − x = h ,
3
usw..
Damit wird also ein Simplex gebildet; im geschilderten Bereich - d. h. bis zur vierten Ecke - kann man sich den Ablauf,
der zu einem Tetraeder führt - mit den Zwischenstationen Strecke und Dreieck - unmittelbar geometrisch vorstellen.
Nun zur Spiegelung eines Eckpunktes an der gegenüberliegenden ’Fläche’. Der Einfachheit halber sei es x(1) , der
gespiegelt werden soll. Man bestimmt also den Schwerpunkt x(s) jener Fläche:
x(s) =
n
1 X (k)
x ,
n−1
k=2
7 Das
ist der Plural; im Singular: Simplex. (vgl. ’Matrix’)
84
(im allgemeinen Fall ist dies die Summe aller Eckpunkte mit Ausnahme des zu spiegelnden) und gewinnt die Spiegelung
x̄(1) über die Formel
x̄(1) = x(s) − (x(1) − x(s) ) = 2x(s) − x(1) .
Leider hat auch dieses Verfahren mit engen Tälern seine Schwierigkeiten.
Insgesamt erweist es sich, daß simpel konzipierte Optimierungsverfahren nur bei recht einfachen (niedrige Dimension,
d. h. geringe Anzahl von zu optimierenden Parametern) und gutartigen Problemen zufriedenstellend arbeiten. Ansonsten sind Modifikationen notwendig, die das Problem umformulieren oder der Methode anpassen. So kann man
z. B. durch eine Variablentransformation (Drehung und Streckung) Täler weiten, so daß aus der Via Mala eine Art
Gudbrandsdal wird. Die Parameter dieser Transformation - die in jedem Schritt oder alle paar Schritte ausgeführt
werden muß - zu berechnen ist allerdings nicht einfach und auch mit Aufwand verbunden.
Insgesamt sollte man bei größeren Optimierungsproblemen ggfs. rechtzeitig auf gute mathematische Software orientieren und nur wenig in eigene Programmierversuche investieren; zumindest ist ein eingehendes Literaturstudium zu
empfehlen.
5.5
Optimierung mit Nebenbedingungen
Zusätzlich zur Zielfunktion f (x) gibt es jetzt noch m Nebenbedingungen; der Einfacheit halber seien sie in der Form
gl (x) ≥ 0, l = 1, 2, . . . , m, angegeben. Jede Nebenbedingung definiert eine Teilmenge Ml des n-dimensionalen Raumes,
auf der sie erfüllt ist. Der zulässige Bereich Z ist der Durchschnitt aller Mengen Ml :
Z
=
m
\
Ml .
l=1
Der Extremwert kann nun einerseits im Innern von Z angenommen werden - dann sind die Nebenbedingungen eigentlich bedeutungslos - oder aber am Rande von Z. Für den ersten Fall sind die Verfahren der Extremwertsuche
ohne Nebenbedingungen geeignet; für den zweiten gibt es eine Reihe spezieller Methoden. Hier soll nur eine Variante
diskutiert werden, die es erlaubt, die Nebenbedingungen in die Zielfunktion zu übernehmen und ansonsten abzuschaffen. Das sind die sogenannten Straf- oder Barriereverfahren. Bei den ersteren räumt man dem Verfahren prinzipiell
die Möglichkeit ein, den zulässigen Bereich zu verlassen, bestraft es aber dafür; die anderen hindern das Verfahren
am Verlassen, indem sie bereits die Annäherung an den Rand von Z bestrafen.
Sei - wiederum der Einfachheit halber - jede Funktion gl stetig und höchstens auf dem Rand von Z gleich Null, aber
nicht im Innern; dort ist sie demzufolge positiv. Gesucht wird wiederum ein Minimum.
Diskutieren wir zunächst ein Barriereverfahren: Man gibt eine Folge εk > 0, εk > εk+1 −→ 0, vor und betrachtet z.
B. auf dem Innern von Z eine Zielfunktion der Form
Fk (x)
=
f (x) +
m
X
εk
l=1
gl (x)
.
Deren Minimum sei nun gesucht und mit x∗(k) bezeichnet.
Nehmen wir die Zielfunktion einer einzigen Variablen x: f (x) = x; ihr Minimum wird auf der Menge Z = [0, 1]
gesucht, die durch die Nebenbedingung g(x) = x(1 − x) ≥ 0 definiert ist. Offenbar wird das Minimum in x = 0
angenommen.
Gehen wir zu
εk
Fk (x) = x +
x(1 − x)
über; diese Funktion hat für ε1 = 1 und ε2 = 0.1 das folgende Aussehen:
85
F (x).......
F (x).......
..
...
.....
....
..
....
...
........
.......
ε2 = 0.1
.......
...
......
........
.
.
.......
..
........
.. ..
.
. ...
........
... ...
.... ...
.
..
.... ...
.. ...
.... ....
.
..
.... ...
.... ....
... ...
.
.... ....
.. .
.... ...
.. ...
.
.
.... ....
. .
.... ....
... ..
.
.... ....
... ..
.... ..
.
.... ....
.
.
.
.
.
.
.
...
.... ......
.................
.
.
.
..
.
.
.
.
.
.
..................
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
....
.
.
.
................................... ... ..... ..... ..... ..... ..... ...
..
...
.
.
.
..... ..... ..... ....
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.........................................................|......................................................................................................................................x
.......
..
.
...
..
...
....
.
...
.
..
..
...
...
...
.
.
...
...
.
...
.
...
ε1 = 1
...
..
...
.
.
.
.
...
...
.
..
.
...
...
.
...
...
..
..
..
.
...
.
..
.
.
...
...
.
...
..
...
...
...
.
.
....
...
..
.
.
.
...
.
.
.....
.
...
..........
.......
.
...
.
..
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.............
...
...
..
...
..
..
...
...
..
..
...
..
...
...
..
..
...
..
..
...
..... ..... .... ..... ...
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
..
.
.
x
.. .... ..... ..... ....
.................................................................................................|....................................................................................................................
Die jeweiligen Minima sind auf der x-Achse markiert; die ursprüngliche Zielfunktion ist gestrichelt.
Mit Abnahme der Werte von εk werden die Funktionen Fk (x) der Zielfunktion f (x) im Innern des Abschnitts immer
ähnlicher. Demzufolge werden ihre Minima xk vermutlich in Richtung des (oder eines) Minimums x∗ von f (x) gehen.
Die in f (x) hinzugefügte Summe, die mit ihr zusammen Fk (x) ergibt, sorgt dafür, daß die neue Zielfunktion Fk (x) in
der Nähe des Randes stark ansteigt. Bei der Minimumsuche vermeidet man es also automatisch, dem Rand zu nahe
zu kommen. Dieses Anwachsen bildet in der Nähe der Randes eine Barriere; daher der Name.
Der Übergang von ’fast’ f (x) in diesen Barrierebereich wird mit kleiner werdenden ε immer abrupter; das kann
problematisch werden. Deshalb lohnt es sich, mit einem relativ großen Wert von ε zu beginnen und es schrittweise zu
verkleinern. Man kann dann anfangs vergleichsweise grob arbeiten, denn diese Funktionen Fk (x) sind glatt. Später
ist man bereits nahe am gesuchten Minimum x∗ , und deshalb benutzt man dort sowieso nur kleine Schritte.
Ein Strafverfahren könnte beispielsweise so aussehen:
Außerhalb des zulässigen Bereiches Z ist überall wenigstens eine der Nebenbedingungen negativ; nehmen wir der
Einfachheit halber an, sie werde mit wachsendem Abstand zum (von ihr definierten) Rand immer negativer, so daß
dieser Wert ein gewisses Abstandsmaß ist. Sei ferner M > f (x) ∀x ∈ Z ein Wert, der größer als jeder Wert der
Zielfunktion im zulässigen Bereich ist.
Dann definiert man eine neue Zielfunktion, die jetzt auf dem ganzen Raum Rn benutzt werden kann:8
F (x)
=
f (x),
M − min{gj (x) : j = 1, 2, . . . , m},
x∈Z
x∈
/Z
.
Der abgezogene Wert wird mit der Entfernung von Z immer größer (positiv!).
Nun kann man also ein Optimierungsverfahren9 zur Minimumsuche starten und es ohne Beschränkung arbeiten lassen.
Gerät es dabei aus dem zulässigen Bereich heraus, so wird es dort mit einem so großen Funktionswert bestraft, daß
es sich sofort reumütig nach Z zurücktrollt. Letztlich muß es das Minimum dort finden.
8 Sollte eine Nebenbedingung im betrachteten Punkt außerhalb von Z nicht definiert sein, so läßt man sie dort einfach in der
Betrachtung weg.
9 Nicht das Gradientenverfahren, denn F (x) ist unstetig! Will man dieses anwenden, so ist die Straffunktion sorgfältiger zu
konstruieren.
86
Kapitel 6
Approximation von Funktionen
6.1
Problemstellungen
In diesem Kapitel werden im wesentlichen zwei Problemstellungen betrachtet, die miteinander verwandt sind:
1. Gegeben ist eine Funktion f (x); gesucht ist eine einfachere Funktion ψ(x), die diese auf einem gewissen Intervall
annähert, oder
2. gegeben ist eine Tabelle von Funktionswerten (xk , yk ), k = 1, 2, . . . , m; gesucht ist eine Funktion ψ(x), die diese
möglichst gut reproduziert: yk ≈ ψ(xk ).
In der Regel gibt man den Typ der Funktion ψ(x) vor; sie enthält aber noch gewisse Parameter a1 , a2 , . . . , an , die
geeignet bestimmt werden müssen. Ihre Ermittlung ist die eigentliche Aufgabe.
Bei der Auswahl des Funktionstyps muß man sich von der Spezifik der Aufgabe leiten lassen. Hat man eine halbwegs
glatte Funktion im Bereich 0 ≤ x ≤ 3 anzunähern, so kann man versuchen, dafür ein Polynom zu verwenden.
Braucht man dagegen eine Näherung zu einer auf der gesamten reellen Achse definierten ungeraden Funktion, die im
Positiven ein einzelnes Maximum hat und dann wieder gegen Null strebt, ohne die Achse zu schneiden, so kann man
vielleicht
a1 x
ψ(x; a1 , a2 ) =
1 + a2 x2
benutzen, weil sie ähnliche Eigenschaften aufweist.
Ist die zu approximierende Funktion periodisch, so bieten sich Summen von Winkelfunktionen an, usw..
Häufig wird die folgende Vorgehensweise angewandt: Man gibt n Funktionen ϕk (x) vor und stellt ψ(x) als deren
Linearkombination
ψ(x) =
n
X
ak ϕk (x)
k=1
mit zu bestimmenden Koeffizienten ak dar. Damit wird die Approximationsaufgabe linear (zumindest in einem gewissen Sinne).
Beispiel: n = 4, ϕk (x) = xk−1 ; damit wird ψ(x) einfach ein kubisches Polynom: ψ(x) = a1 + a2 x + a3 x2 + a4 x3 .
Die Techniken der Annäherung unterscheiden sich nach der Art, wie die approximierende Funktion ψ(x) an die Ausgangsfunktion f (x) angekoppelt wird:
1. mögliche Forderung:
f (x) und ψ(x) sollen in einer Stelle x0 dieselben Funktionswerte und dieselben Ableitungswerte - bis hin zur n − 1-ten
- besitzen.
Wenn ψ(x) ein Polynom ist, so ergibt dies die Formel von Taylor.
Diese bedeutet allerdings meist nur in einer gewissen Umgebung von x0 eine gute Näherung.
Man erkennt aber den Sinn der Vorgehensweise: Das Taylor-Polynom zu ex in x0 = 0 kann man aufstellen, ohne
mit dem Taschenrechner Werte dieser Funktion auszurechnen; man kommt also mit einem speziellen Wert aus und
kann daraus eine Berechnungsvorschrift für alle Werte (zumindest eines gewissen Bereiches) konstruieren.
2. mögliche Forderung:
Die Funktionen f (x) und ψ(x) stimmen in n ausgewählten Punkten xk exakt überein: f (xx ) = ψ(xk ).
Dies führt zur Interpolation.
Beispiel: Man hat nur einen ganz simplen Taschenrechner mit Wurzelfunktion; benötigt wird eine Darstellung der
Sinusfunktion im Bereich von −90o bis 90o .
Man macht den Ansatz ψ(x) = a1 x + a2 x3 + a3 x5 + a4 x7 ; er ergibt eine ungerade Funktion (mit Nullstelle in
x = 0, wie es sich für √ungerade Funktionen
gehört). Die vier Koeffizienten bestimmt man aus den Forderungen
√
ψ(30) = 0.5, ψ(45) = 2/3, ψ(60) = 3/2 und ψ(90) = 1. Das ergibt ein lineares Gleichungssystem, wie später
ausgeführt wird. (Diese Vorgehensweise ist nicht günstig; soll nur ein Beispiel sein.)
3. mögliche Forderung:
87
Die maximale absolute Abweichung |ψ(x) − f (x)| auf einem Abschnitt a ≤ x ≤ b sei minimal.
Diese Bedingung ergibt die sogenannte gleichmäßige Approximation.
4. mögliche Forderung: Das folgende Integral sei minimal:
Z
b
[ψ(x) − f (x)]2 dx
a
Es resultiert die mittelquadratische Approximation.
In der Praxis können noch Modifikationen auftreten. Beispielsweise wird im entsprechenden Punkt demonstriert, wie
sich die gleichmäßige Approximation zu ex auf [0,1] finden läßt. Diese stimmt zwar gut mit ex überein, weicht aber
meist doch ein wenig ab. Will man diese Funktion in einem ’Taschenrechner’ o. ä. nutzen, so wird kaum jemand merken,
wenn e0.644317 geringfügig abweicht. Aber e0 = 0.99999998176 fällt unschön auf. Man braucht also Näherungsformeln,
die gewisse exponierte Werte korrekt berechnen und ansonsten ausreichend genau sind.1
Bei der Anpassung einer Funktion an eine Tabelle kann man die Forderungen 3 und 4 analog übernehmen.
6.2
Berechnung von Grundfunktionen
In diesem Punkt sollen einige Bemerkungen zur Berechnung der Funktionen gemacht werden, die man üblicherweise
auf dem Taschenrechner findet. Es handelt sich teilweise nur um sehr einfache Algorithmen, die man schnell programmieren kann, deren Qualität aber auch die von Billigprodukten ist. Immerhin ist ihr Studium geeignet, für die
Spezifik der Berechnung von Funktionen zu sensibilisieren, und eine gewisse Immunität gegen typische Fehler eines
völlig laienhaften Herangehens zu erzeugen.
Die Darstellung soll auch die Erkenntnis vermitteln, daß es sich lohnt, die Eigenschaften der jeweiligen Funktion
(Additionstheoreme, ...) auszunutzen. Einfache Berechnungsvorschriften basieren auf Potenzreihendarstellungen, die
im Falle der Grundfunktionen leicht zu programmieren sind. Die Konvergenzgeschwindigkeit einer Potenzreihe hängt
aber entscheidend von x ab - dieser Wert sollte möglichst nahe bei Null sein. Durch geeignete Umformungen kann
man dies in der Regel erreichen.
Zu detaillierteren - und vor allem ggfs. effektiveren - Methoden, auch zur Berechnung der sogenannten Höheren oder
Speziellen Funktionen, vergleiche man
- M. Abramowitz, I. A. Stegun Handbook of mathematical functions, Dover Publications, Inc.
- Spravoqna Matematiqeska Biblioteka: Matematiqeski$
i analiz
L. A. Lsternik, O. A. Qervonenkis, A. P. npol~ski$
i:
Vyqislenie lementarnyh funkci$
i, FIZMATGIZ, Moskva, 1963
- Y. L. Luke, Mathematical functions and their approximations, Academic Press, Inc.
1. Quadratwurzel
√
a wird als Lösung der Polynomgleichung f (x) = x2 − a = 0 mit dem Newton - Verfahren ermittelt; s. d., und
vergleiche mit der zugehörigen Übungsaufgabe.
Für die n-te Wurzel wird dieses Verfahren entsprechend modifiziert; analog.
2. Exponentialfunktion
1. Idee: Man stellt x = m + z dar; dabei ist m die Rundung von x auf die nächstliegende ganze Zahl, und es gilt
|z| ≤ 0.5.
Dann wird
ex = em + z = em · ez .
Der erste Faktor kann durch eine mäßige Anzahl von Multiplikationen ermittelt werden.2
Es geht also nur um die Berechnung von ez mit |z| ≤ 0.5. Das kann mit Hilfe der Potenzreihe geschehen; das Restglied
der Taylor-Formel beim Abbruch bei z n ist hier eξ · z n+1 /(n + 1)!, dabei liegt ξ zwischen 0 und z. Man kann das
Restglied also stets betragsmäßig mit e0.5 · 0.5n+1 /(n + 1)! abschätzen. Diese Werte sind in der nachstehenden Tabelle
dargestellt:
n
e/(n + 1)!
n
e/(n + 1)!
n
e/(n + 1)!
n
e/(n + 1)!
1
2
3
4
5
2.06E-01
3.43E-02
4.29E-03
4.29E-04
3.58E-05
6
7
8
9
10
2.56E-06
1.60E-07
8.87E-09
4.44E-10
2.02E-11
11
12
13
14
15
8.40E-13
3.23E-14
1.15E-15
3.85E-17
1.20E-18
16
17
18
19
20
7354E-20
9.82E-22
2.59E-23
6.46E-25
1.54E-26
Diese Konvergenz ist beeindruckend schnell. In Wirklichkeit ist die Situation noch besser, denn das Restglied kann
1 Zu
ähnlicher Vorgehensweise in der Dorfarchitektur vgl. G. A. Potemkin.
1.5 ln m Multiplikationen; man vergleiche mit der betreffenden Übungsaufgabe zum effektiven Berechnen von xn !
2 Etwa
88
man immer durch den Betrag des letzten Summanden, multipliziert mit e0.5 |z|/(n + 1), abschätzen:
n n ξ z n+1 e ·
≤ e|z| · z · z ≤ e0.5 · z · z .
(n + 1)! n + 1 n! n + 1 n! Falls |z| deutlich kleiner als 0.5 ist konvergiert dieser Ausdruck noch schneller.
Verlangen wir eine relative Genauigkeit δ, und beziehen wir sie auf den kritischsten Fall e−0.5 , so sind wir auf der
sicheren Seite, wenn wir für den Betrag des Restgliedes fordern, er möge kleiner als e · δ sein.
Es resultiert das folgende Programm zur Ermittlung von ez ; der Wert steht letztlich in s:
s:=1; p:=z; k:=1;
s:=s+p; k:=k+1; p:=z∗p/k;
if 2.72∗abs(p) > delta then goto 1;
s:=s+p;
1:
Dabei wurde e durch den (etwas) größeren Wert 2.72 ersetzt.
Die Summanden (in p) werden rekursiv errechnet! Damit sind pro Schritt nur vier Operationen erforderlich; bei einem
δ = 10−10 sind lt. Tabelle maximal 10 Schritte nötig, das wären damit 40 Operationen.
Die letzte Anweisung ist eigentlich überflüssig, aber es widerstebt doch etwas, den berechneten Wert nicht zu verwenden.
Achtung! Das obenstehende Programm sollte nicht zur Berechnung von ex im allgemeinen Fall (d. h. bei |x| > 0.5)
eingesetzt werden!
Bei x > 0 rechnet es zwar immer richtig, braucht aber bei größeren Werten von x ziemlich viele Operationen.
Ist x << 0 (z. B. x ≈ −20), so entsehen aber durch Auslöschung völlig unsinnige Werte: negative oder solche größer
1. - Wenn man sich schon auf dieses Programm versteift, so sollte man damit immer e|x| berechnen und anschließend
bei x < 0 davon einfach den Kehrwert bilden.
2. Idee: Man formt um:
2n
n
−n
−n
x
2
·
2
x
2
x
.
e = e
= e
Den Wert von n wählt man so, daß 2−n |x| klein ist - zumindest unter 1. Dann ermittelt man den Wert der Exponentialfunktion in der Klammer wie beschrieben, um anschließend durch n-faches Quadrieren ex zu gewinnen.
Die Methode ist recht effektiv, hat aber einen Nachteil: I. a. ermittelt man diesen internen Wert mit einem gewissen
relativen Fehler δ0 , der bei jedem Quadrieren etwa verdoppelt wird. Der relative Fehler des Resultats ist damit etwa
2n δ0 , und das kann unakzeptabel viel sein.
Diese Idee ist anwendbar, wenn |x| - und damit n - nicht allzugroß ist und wenn man den Wert von ex nicht sehr
genau braucht.
3. Natürlicher Logarithmus:
Aus diesem erhält man ggfs. mühelos den dekadischen oder binären Logarithmus.
Man kann ihn aus der soeben gewonnenen Funktion ex gewinnen: y = ln x ist Lösung der Nullstellenaufgabe ey −x = 0.
Es sei aber auch die direkte Berechnung betrachtet.
Wenn man Zugriff auf die Gleitkommastruktur von x hat, so kann man die Beziehung
ln x = ln (M · 2n ) = ln M + n · ln 2 = ln M + 0.693 . . . · n
ausnutzen und braucht also nur ln M mit 1 ≤ M < 2 zu ermitteln.3 Dafür ist die Potenzreihe geeignet, die für
M = 1 + z mit 0 ≤ z < 1 stets konvergiert:
ln M = ln(1 + z) =
∞
X
(−1)k+1
k=1
zk
,
k
allerdings erfolgt
langsam.
√ diese
√
√ Konvergenz für z-Werte nahe 1 unakzeptabel
Nun ist 1 ≤ M < 2 = 1 + 0.414 . . ., und damit wird, M = 1 + w gesetzt:
√
ln M = 2 ln
M = 2 ln(1 + w) = 2
∞
X
(−1)k+1
k=1
wk
.
k
In dieser Reihe ist jeder Summand (betragsmäßig) bereits weniger als 42% seines Vorgängers, und damit konvergiert sie
schon halbwegs erträglich. Allerdings wird die Reihe mit 2 multipliziert, und damit wird ihr Abbruchfehler verdoppelt.
Die Umformung
√ M
√
√
ln M = ln
2√
= ln( 2z) = ln 2 + ln z = 0.34657 . . . + ln z
2
3 Was
kann man tun, wenn man nicht an die Einzelteile der Gleitkommazahl herankommt?
89
√
√
erreicht denselben Zweck:
2/2 = 0.7071067 . . . ≤ z < 2 = 1.41421 . . ., aber die Multiplikation mit 2 entfällt, und
√
den Summanden ln 2 kann man sehr genau ausrechnen und ins Programm hineinschreiben.
Die Berechnung von ln M kann also so erfolgen:
z:=0.7071067∗M-1; p:=z; s:=z; k:=2;
p:=z∗p; s:=s+p/k; k:=k+1;
if abs(p) > delta then goto 1;
Eine etwas aufwendigere Variante, die dafür sehr viel schneller rechnet:
Man bildet k = [10M ] − 10; die Klammer bedeutet den ganzzahligen Teil. Sei z. B. M = 1.57723562 . . ., dann ist
k = [15.7723562] − 10 = 15 − 10 = 5.
Einem im Programm als Festdaten eingebauten Feld a[k] = ln(1 + 0.1k) entnimmt man den Wert a[5] = 0.405465 . . .
und berechnet
1:
ln M = ln 1.5
M
1.5
= ln 1.5 + ln
1.57723562
= 0.405465 . . . + ln 1.051490 . . . =
1.5
= 0.405465 . . . + ln(1 + 0.051490 . . .) .
Die Potenzreihe ist hier also auf einen Wert 0.05149... anzuwenden; die Summanden verringern sich damit pro Schritt
auf rund ein Zwanzigstel des vorigen. Im schlimmsten Fall (M=1.09999...) sinken sie auf weniger als ein Zehntel. Das
bringt natürlich mehr als die 42% in der vorigen Variante.
Die letzte Vorgehensweise - haben Sie’s gemerkt? - orientierte sich am Dezimalsystem; die Gewohnheit hatte zugeschlagen. Das geht natürlich, aber man muß es nicht so machen. Genausogut könnte man k = [16M ] − 16 bilden; zu
diesem Zweck reicht es - im Falle der im Kapitel 2 als Beispiel geschilderten Gleitkommaarithmetik - aus, die Bits
vom 3. bis zum 6. aus dem ersten Byte herauszulösen. Das geht durch ein AND mit einer Maske, danach wird rotiert
- alles sehr schnelle Assemblerbefehle.
Weitere Verbesserungen sind denkbar.4
4. Winkelfunktionen:
Es reicht aus, den Sinus und Cosinus berechnen zu können; der Tangens (und der Cotangens) ist ihr Quotient, und
auch die selten gebrauchten Sekansfunktionen ergeben sich aus diesen beiden.
Wegen sin(x + π/2) = cos x genügt es, wenn man den Sinus berechnen kann. (Das ist nicht unbedingt die günstigste
Vorgehensweise.)
Bevor man die Potenzreihe anwendet erfolgt unbedingt die Reduktion des Arguments zu einem möglichst kleinen
Wert. Nutzt man die Prozedur z. B. zum Auswerten einer Fourierreihe, so kann in sin kx ein sehr großes Argument
stehen - es darf mithin keineswegs davon ausgegangen werden, daß beim Aufruf |x| ≤ 2π gilt.
Man dividiert nun x durch 2π und rundet diesen Quotienten auf die nächstliegende ganze Zahl n:
x = 2nπ + x1 . Dann ist sin x = sin(2nπ + x1 ) = sin x1 mit −π ≤ x ≤ π. Damit ist man schon in einem festen Bereich
des Arguments, das im schlimmsten Fall betragsmäßig nur wenig über 3 liegen kann.
Sei nun = v|x1 |, wobei v = ±1 das Vorzeichen enthält. Da der Sinus eine ungerade Funktion ist gilt sin x1 = v · sin x2 .
Weiter sei
x2
,
x2 ≤ π/2
x3 =
,
π − x2
,
x2 > π/2
und es gilt sin x2 = sin x3 .
Damit sind wir im Bereich von 0 bis π/2 = 1.570796 . . . ...; man könnte nun zur Not die Potenzreihe starten.
Allerdings ist bekanntlich sin 3α = 3 sin α − 4 sin3 α, also gilt auch sin x3 = 3 sin(x3 /3) − 4 sin3 (x3 /3). Setzt man
x4 = x3 /3 und berechnet man nur den Sinus dieses Wertes, so wird das Argument maximal 0.5236.
Jedenfalls kann sin z nun so ermittelt werden (delta bedeutet hier natürlich einen absoluten Fehler):
q:=-z∗z; p:=z; s:=z; k:=2;
p:=q∗p/(k*(k+1)); s:=s+p; k:=k+2;
if abs(p) > delta then goto 1;
Der Wert des Arguments z muß hier nicht so klein gemacht werden wie beim Logarithmus, da die Konvergenz der
Reihe hier nicht allein auf der Kleinheit von z basiert - es kommt noch wohltuend die Fakultät im Nenner hinzu.
1:
5. Arkusfunktionen
Es genügt, den Arkustangens berechnen zu können; Arkussinus und -cosinus lassen sich darauf zurückführen:



π/2
x
p
arctan
arcsin x =
1 − x2


−π/2
,
,
x = 1,
|x| < 1,
,
x = −1.
,
arccos x =
Die Potenzreihe für den Arkustangens
arctan x =
∞
X
k=0
4 C.
(−1)k
x2k+1
2k + 1
F. Gauss: ’Es liegt eine Art von Poesie im Berechnen von Logarithmentafeln.’
90
π
− arcsin x .
2
konvergiert für |x| ≤ 1; wegen des langsam wachsenden Nenners ist sie aber nur für x-Werte brauchbar, die betragsmäßig deutlich unter 1 liegen.
Im Falle x > 1 kann man mit der Beziehung
arctan x =
π
1
− arctan
2
x
ein Argument unter 1 gewinnen; bei x < −1 nutze man die Ungeradheit dieser Funktion.
Liegt |x| nahe bei 1, so sollte man die dann besser konvergierende Reihe
x
arctan x =
1 + x2
"
x2
2
2·4
·
1+ ·
+
3 1 + x2
3·5
x2
1 + x2
2
2·4·6
·
+
3·5·7
x2
1 + x2
#
3
+ ...
verwenden; oder man greift auf eine Reihe in C̆ebyshev-Polynomen (vgl. Punkt ’Approximation im Quadratmittel’,
S. 103) zurück:
√
∞
X
(−1)k ( 2 − 1)2k+1
x−1
π
+2
· T2k+1
, 0≤x.
arctan x =
4
2k + 1
x+1
k=0
Sie steht in einem der genannten Bücher; aber dort sind sowieso effektivere Algorithmen dargestellt.
6.3
6.3.1
Interpolation
Algebraische Polynome
Im klassischen Sinn bedeutet Interpolation das Berechnen von Zwischenwerten (’zwischen den Polen = Punkten’) in
Tabellen.
Allgemein versteht man darunter das Anpassen einer Funktion an eine Tabelle in der Weise, daß eine perfekte
Übereinstimmung der Funktionswerte mit den Tabellenwerten erzielt wird.
Ist die anzupassende Funktion ein algebraisches Polynom, so spricht man von algebraischer Interpolation; um diese
soll es im Weiteren gehen.
Ein Polynom n-ten Grades hat allgemein n + 1 Koeffizienten oder Parameter, unabhängig davon, in welcher Form
man es schreibt. Es werden also auch n + 1 Angaben (Wertepaare) nötig sein, um es zu bestimmen.
Umgekehrt, wenn man eine Tabelle mit 8 Wertepaaren erfüllen will, so ist dafür folglich ein Polynom 7. Grades
notwendig.
Diesen Grad muß man nicht ausschöpfen; wenn die Punkte der Tabelle schön auf einer Geraden liegen, so werden die
Koeffizienten vor x2 bis x7 exakt Null, aber im Ansatz braucht man sie, oder aber man läßt nach Feststellung dieses
Faktes 5 Wertepaare weg.
Wir gehen also aus von einer Tabelle von Werten:
x
x0
x1
x2
...
xn−1
xn
y
y0
y1
y2
...
yn−1
yn
Es ist praktisch, die Wertepaare ebenso wie die Polynomkoeffizienten von 0 bis n zu numerieren.
Es wird naturgemäß vorausgesetzt, daß die Abszissen xk (die Stützstellen oder Knoten genannt werden) paarweise
verschieden voneinander sind: xk 6= xj für k 6= j. Bisweilen ist es bequem, sie als der Größe nach geordnet zu denken.
Unter der Voraussetzung der Verschiedenheit der xk existiert stets ein solches Interpolationspolynom, und es ist
eindeutig bestimmt. Man könnte seine Koeffizienten ak aus einem linearen Gleichungssystem der folgenden Art
bestimmen:
n−1
xn
0
an xn
+ . . . + a2 x20 + a1 x0 + a0 = y0
0 + an−1 x0
n
n−1
n
2
x

1
an x1 + an−1 x1 + . . . + a2 x1 + a1 x1 + a0 = y1
 xn
n−1
2
an xn
+ . . . + a2 x22 + a1 x2 + a0 = y2 =⇒ 
2 + an−1 x2
 .
 ..
···
n−1
an xn
+ . . . + a2 x2n + a1 xn + a0 = yn
n + an−1 xn
xn
n

x0n−1
xn−1
1
xn−1
2
..
.
xn−1
n
···
···
···
..
.
···
x20
x21
x22
..
.
x2n
x0
x1
x2
..
.
xn
1
1
1
..
.
1






an
an−1
..
.
a1
a0


 
 
=
 
 
y0
y1
y2
..
.
yn



.


Die Systemmatrix V heißt Vandermondesche Matrix; ihre Determinante ist formelmäßig angebbar:
det(V )
=
n Y
i−1
Y
(xi − xj )
i=1 j=0
Sie ist unter der gemachten Voraussetzung unbedingt von Null verschieden, das System mithin eindeutig lösbar.
Aber dieser Fakt kann bequemer direkt aus den Eigenschaften der Polynome geschlußfolgert werden:
Seien alle yk = 0; das Gleichungssystem wird damit homogen und besitzt zumindest eine triviale Lösung.
Angenommen, es besäße noch eine nichtriviale Lösung, so existiert also ein nicht identisch verschwindendes Polynom,
91
dessen Grad höchstens n beträgt, das in n + 1 verschiedenen Stellen x0 bis xn Null wird. Das ist aber unmöglich,
es sei denn, das Polynom ist überall Null. Dann sind aber seine Koeffizienten alle Null. Das homogene System hat
also nur die triviale Lösung. Ein Gleichungssystem mit quadratischer Matrix, das im homogenen Fall nur die triviale
Lösung hat, ist aber stets eindeutig lösbar.
Nochmals zur Eindeutigkeit: Wenn es zwei Polynome vom Grade ≤ n gäbe, die beide die gegebene Tabelle realisierten,
so wäre ihre Differenz ebenfalls ein Polynom vom Grade ≤ n, und dieses würde in n + 1 Stellen zu Null - folglich muß
es identisch verschwinden, und zwischen den beiden Polynomen gibt es mithin keine Differenz.
Mit dem dargestellten Gleichungssystem kann man im Prinzip rechnen; es ist aber aufwendig und bisweilen sehr empfindlich gegen Rundungsfehler. Eine auf Newton zurückgehende Modifikation vereinfacht die Rechnung wesentlich:
Man setzt das gesuchte Polynom in der folgenden Form an:
Pn (x) =
n
X
i=0
ai
i−1
Y
(x − xj ) = a0 + a1 (x − x0 ) + a2 (x − x0 )(x − x1 ) + . . . + an (x − x0 )(x − x1 ) . . . (x − xn−1 ) .
j=0
Damit kann man ein analoges Gleichungssystem aufstellen; es hat als Systemmatrix aber eine untere Dreiecksmatrix,
und demzufolge kann man die Lösung umgehend angeben.
Offenbar ist bei diesem Ansatz Pn (x0 ) = a0 , und damit folgt a0 = y0 .
Weiterhin ist
y1 − y0
Pn (x1 ) = a0 + a( x1 − x0 ) = y0 + a1 (x1 − x0 ) = y1 =⇒ a1 =
.
x1 − x0
Das ist übrigens der Anstiegsfaktor aus der 2-Punkte-Form der Geradengleichung.
Weiterhin ergibt Pn (x2 ) = a0 + a1 (x2 − x1 ) + a2 (x2 − x0 )(x2 − x1 ) = y2 sofort a2 , denn a0 und a1 sind bereits bekannt,
usw..
Man kann recht bequeme rekursive Rechenvorschriften zur Bestimmung dieser Koeffizienten aufstellen (Stichwort:
’Differenzentabelle’; vgl. Beispiel 1, die Berechnung von (k + 1)2 (k2 + 1), S. 94, oder im Punkt ’Einbettung’, S. 75),
aber das soll hier nicht ausgeführt werden. Bei Bedarf kann man diese den Formelsammlungen entnehmen.
Eine andere Schreibweise geht auf Lagrange zurück; sie wurde früher praktisch kaum verwandt und war theoretischen
Untersuchungen vorbehalten. Der Grund dafür war der Umstand, daß sie ein Polynom liefert, das zu seiner Auswertung
deutlich mehr Operationen benötigt als das in der Form von Newton.
Es werden n+1 sogenannte Einflußfunktionen lk (x) definiert. Das sind Polynome n-ten Grades, die in allen Stützstellen
xj zu Null werden mit Ausnahme des jeweiligen Punktes xk - dort sei ihr Wert gleich Eins.
Ein solches Polynom kann leicht in der Produktform angegeben werden:
lk (x) =
Y x − xj
j6=k
xk − xj
=
(x − x0 )(x − x1 ) . . . (x − xk−1 )(x − xk+1 ) . . . (x − xn )
.
(xk − x0 )(xk − x1 ) . . . (xk − xl−1 )(xk − xl+1 ) . . . (xk − xn )
Für den Fall n = 10, xk = k, k = 0, 1, 2, . . . , 10 sind nachstehend die Polynome l0 (x), l1 (x), l2 (x) und l6 (x)
angegeben:
.
.
.
.
.
.
.
.
.
.
.
..
..
..
..
..
..
..
..
..
....u
.
.
.
.
.
.
.
.
.
...
......
..
..
..
..
..
..
..
..
..
..
.
... ..... l0 (x) ...
...
...
...
...
...
...
...
...
...
.. .......
..
..
..
..
..
..
..
..
..
..
..
........................................................................................................................................................................................................................................................................................................................................................................
.. ................. ..
..
..
..
..
..
..
..
..
..
..... .
..
..
..
..
..
..
..
..
......u
... ...
.
.
.
.
.
.
.
.
...
.....
........l...1 (x)/2 ..
..
..
..
..
..
..
..
..
..
.
...................................................................................................................................................................................................................................................................................................................................................................................................
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
..
.. l2 (x)/4
.
.
.
.
.
.
.
.
..
.
.
.
.
.
.
.
.
........................u
..
...........
.......................... ..
..
..
..
..
..
..
..
................................................................................................... ..................................................................................................................................................................................................................................................................................
...... .
.
..
......
..
..
..
..
..
..
..
..
.
... ..
.. .... ..... ..
..
..
..
..
..
..
..
..
..
. ..
.
.
. l6 (x)/8
.
.. .........
..
..
..
..
..
.
.
.
.
..
..........
................................
.........................................................................................................................................................................................................................................................u
..........................................................................................
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
...
.......
..
..
..
..
..
..
..
.. ......
....
..... ..
.. ............... ..
..
..
..
..
..
..
..
.. .....
.....
.... ... .
......... .
..
..
..
..
..
..
..
..
..
..
..
..
..
..
..
..
..
..
..
..
..
Die Stelle, an der sie Eins werden, ist durch einen schwarzen Kreis markiert. Die Stützstellen liegen in den senkrechten
gestrichelten Linien; dort werden die lk (x) jeweils Null (mit Ausnahme des jeweiligen Punktes).
Man beachte, daß diese vier Funktionen nicht im gleichen Maßstab dargestellt sind!
92
Das gesuchte Interpolationspolynom wird mit diesen Funktionen lk (x) einfach
Pn (x)
n
X
=
yk · lk (x) ;
k=0
diese Formel gewährleistet die Erfüllung der Bedingung Pn (xk ) = yk .
Es resultiert ein sehr einfaches Programm, das anwendbar ist, wenn es nicht auf höchste Effektivität bei der Auswertung dieses Polynoms ankommt. Der Funktionswert sei f:
f:=0; for k:=0 to n do begin p:=y[k];
for j:=0 to n do if j <> k then p:=p∗(x-x[j])/(x[k]-x[j]);
f:=f+p; end;
Wenn die Tabelle der Werte (xk , yk ) einer exakten und stetigen Funktion f (x) entstammt, so möchte man annehmen,
daß eine Erhöhung der Anzahl der Stützstellen - zumindest im Bereich der Tabelle - dazu führt, daß das Polynom
der Funktion immer näher kommt; mathematisch ausgedrückt: limn→∞ Pn (x) = f (x).
Es war für die Mathematiker eine Überraschung, als man feststellen mußte, daß dem nicht so ist; ein drastisches
Beispiel stammt von Runge (1901) und bezieht sich auf die eigentlich sehr brave Funktion f (x) = 1/(1 + 25x2 ).
Diese wird für −1 ≤ x ≤ 1 mit gleichabständigen (oder äquidistanten) Stützstellen xk = 2k/n − 1 interpoliert; bei
n = 10 ergibt sich das folgende Bild:
−1.0
2.0
.....
1.5
1.0
0.5
0.0
−0.8
−0.6
−0.4
−0.2
0.0
0.2
0.4
0.6
0.8
1.0
...
.
.. ....
... ..
... .....
... .....
. .
.
.. ...
... ...
... .....
... .....
. .
. ...
... .....
.. ....
.
....
...
...
...
.
..
...
...
...
...
...
...
...
.
u
.
.
.
.
.
.
.
.
.
.
....
.
.
...
.
.
...
........ ............
.
.
.
...
.
.
.
....
.
.
.
...
.
.
.
.
.
.
.
.
.
...
.......
...
......
.
.
.
...
.....
.
.
.
.....
...
.
....
...
.
.
...
.
.
.
...
.
.
.
...
.
.
...
.
.u.
...
...
.
.
.
.....
.
.
u
.
.
.
...
.
.
.
.
...
...... .
....
.
...
.
.
.
.
...
.....
.
.
.
.
.
.
.
.
.
.
.
...
.
.
.
.
.......... ..
...
..........
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
...
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
...
............u
.
.
.
.
.
.
.
.
.
.
...
.
.
.
.
.
.
u
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.... ..... .... ....
.
.
...... ..... ..... .
... . ..... ..... ..u
.
.
.
u
.
.
.
.
.
.
.
.
...u
.
.
.... ..... ..... .....u..... ..... ..... ........u
.... ....
..
.... ..... ..... ..... ..u
.
.
.
.
.
...
...
.
.
...
...
...
.... ..
... .....
.
............
.........
−0.5
−1.0
2.0
1.5
1.0
0.5
0.0
−0.5
−0.8
−0.6
−0.4
−0.2
0.0
0.2
0.4
0.6
0.8
1.0
Die elf Interpolationsstellen - also das exakte Übereinstimmen von f (x) und Pn (x) - sind als schwarze Kreise markiert.
Im Inneren liegen Funktion und Polynom einigermaßen ähnlich; während aber erstere für x → ±∞ gegen Null geht
setzt das Polynom zu wilden Ausschlägen an.
Für größere Werte von n wird die Situation noch dramatischer; man kann zeigen, daß für |x| < 0.7266 . . . tatsächlich
limn→∞ Pn (x) = f (x) ist, während außerhalb dieses Bereichs das Polynom mit wachsendem n unbegrenzt wächst
(und noch dazu recht schnell).
Für die Praxis ist noch kritischer, daß ein Interpolationspolynom höheren Grades recht empfindlich auf Veränderungen der Tabellenwerte yk reagieren kann; es lohnt sich also nicht, durch eine Tabelle von 21 mit Meßfehlern behafteten
Werten ein Polynom 20. Grades legen zu wollen.
Besonders ungünstig ist der sehr naheliegende Fall gleichabständiger Stützstellen; mathematischen Tabellenwerken
entnommene Funktionswerte haben in der Regel diese Eigenschaft. Kann man die Wahl der n Stützstellen auf dem
Abschnitt [a, b] beeinflussen, so sollte man die Punkte (das sind die Nullstellen des auf den betrachteten Abschnitt bezogenen C̆ebyshew - Polynoms entsprechenden Grades; vgl. S. 103; ihr Nutzen resultiert u. a. aus der dort erwähnten
Extremaleigenschaft dieser Polynome)
xk
=
(n + 1 − k)π
a+b
b−a
+
cos
2
2
n+2
wählen. Diese liegen am Rande des Abschnitts dichter als in der Mitte und sind aus einer Reihe von Gründen
günstig. Die bereits betrachtete Funktion f (x) = 1/(1 + 25x2 ) z. B. ergibt jetzt bei n = 10 das folgende Bild:
93
−1.0
−0.8
−0.6
−0.4
−0.2
0.0
0.2
0.4
0.6
0.8
1.0
1.20
0.95
0.70
0.45
0.20
−0.05
1.20
........................
0.95
......
......
.
.
.. ..
.......
.
.
........
... ...
.....
.......
.
0.70
.
.......
.. ....
.
.......
..... .
.......
....... .
0.45
.....
.
.
.......
....
.
.
.
.
.
.
........ .
.... . ..
..... .... .....
..... ..........
0.20
.
....... ..... ..............................
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
....
.
.
.
.
.
.
.
.
................. . ..... ..... .........
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.... ........
.
.
.
....
..... .....
...... ..... .....
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
..... .
...... ... ...... ......
........ .....
...
.........
........
.
... −0.05
...
...
...
...
...
.
....
...
..
..
−1.0
−0.8
−0.6
−0.4
−0.2
0.0
0.2
0.4
0.6
0.8
1.0
Der Verlauf des Polynoms ist wesentlich vernünftiger als im Falle gleichabständiger Stützstellen; bei wachsenden Grad
n des Interpolationspolynoms wird die Genauigkeit immer besser.
Im letzten Beispiel sind die Polynomwerte am Rand negativ. Dort befindet man sich jenseits des ersten bzw. letzten
Knotens, also außerhalb der Tabelle. Dann spricht man von Extrapolation; dieser Prozeß ist üblicherweise problematisch.5
Zur praktischen Ausführung der Extrapolation im Falle gleichabständiger Stützstellen vergleiche man die Vorhersage
der Startwerte für das Newton-Verfahren, S. 75, oder im Beispiel 1, 131.[1ex] Allgemein kann man folgende Faustregel
für das praktische Rechnen formulieren:
Bei ungenauen Tabellenwerten interpoliere man mit zwei oder drei Wertepaaren (linear oder quadratisch), bei genauen
mit maximal fünf oder sechs.
6.3.2
Kubische Splinefunktionen
spline [etym. doubtful] n. A flexiple strip of wood or rubber used in laying down large
curves in mechanical drawing; Mach. a key fitting into a slot in a shaft and wheel to
make them revolve together; the slot itself.
The Concise English Dictionary
Betrachten wir ein Polynom 11. Grades, das in den Punkten -5,-4,-3,-2,-1 und 1,2,3,4,5 zu Null wird und in x = 0
den Wert 1 hat; sein - eindeutig bestimmter - Verlauf ist der folgende:
5 Es wird langsam wärmer: Vorgestern waren es mittags 14o C, heute sind es 18o C - vermutlich war es gestern zum Mittag
etwa 16o C. (Interpolation)
Gestern um die Mittagsstunde waren es 14o C, heute sind es 16o C - wieviel werden es morgen sein? (Extrapolation)
Wenn die Extrapolation so einfach und genau wäre wie die Interpolation, so wäre die Vorhersage der Börsenkurse ein Kinderspiel.
94
−5
−4
−3
−2
−1
0
1
2
3
4
5
7
6
5
4
3
2
1
0
−1
−2
−3
7
...
...
.. ....
.. ....
... ....
.... ....
.
. ...
.. ...
.. .....
.... ....
.
...
.
...
.
...
..
...
.....
.
...
...
.
...
.
...
...
.
...
..
.
...
...
.
.
...
...
....
.
.
.
...
...
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
...
.
.
.
.
.....
.
.
.
..........
...
......
.
.
.
...
.
.
.
.
.
.
.
...
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
..
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
...
.
.
...........
..........
.....
...
...
......
.......
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
...
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
...
.
.
.....
...
.
.
.
.
...... ....
.
...
..... .......
.........
.....
.......
...
...
....
...
....
...
...
...
−5
−4
−3
−2
−1
0
1
2
3
4
6
5
4
3
2
1
0
−1
−2
−3
5
Von der Funktion ist gegeben: 1 in der Mitte des betrachteten Intervalls von 0 bis 10, und nach außen zu in allen
ganzzahligen Abszissen 0 - man möchte erwarten, daß die Funktion zum Rand hin abnimmt. Aber gerade das tritt
nicht ein; statt dessen bricht sie in ziemlich wilde Schwingungen aus.
Es ist typisch für die Polynominterpolation höheren Grades, daß Änderungen in der Tabelle den Funktionsverlauf in
weiter entfernteren Bereichen wesentlich beeinflussen, und diese Erscheinung ist im allgemeinen keineswegs erwünscht.
Ein Algorithmus, der Störungen irgendwie lokalisiert und an der Ausbreitung hindert, wäre sicher erstrebenswerter.
Es waren ursprünglich Ingenieure, die dafür eine Funktionsform ersannen, und erst später haben Mathematiker diesen
Gedanken aufgegriffen und zu einer enormen Theorie ausgebaut. Weiterhin wird die ursprüngliche Variante dargelegt,
da sie in der Praxis immer noch eine dominierende Rolle spielt: die kubischen Interpolationssplines.
Unter einem Spline versteht man beim technischen Zeichnen eine dünne biegsame Leiste, mit deren Hilfe man Kurven
durch gegebene Punkte zeichnete, indem man sie bog und mit Nadeln in diesen Punkten befestigte.
Beim elastischen Biegen lädt man eine solche Leiste mit einer gewissen potentiellen Energie; es ist klar, daß sie im
Rahmen ihrer Befestigung diejenige Form annimmt, bei der ihre Gesamtenergie am kleinsten ist.
Brint man eine solche Leiste in ein Koordinatensystem und bezeichnet man ihre Kontur mit y(x), so lehrt die Elastizitätstheorie, daß die vierte Ableitung dieser Funktion dort, wo sie existiert (d. h. außerhalb der Befestigungspunkte
= Nadeln) identisch zu Null wird.
Diese Funktionen sind also zwischen den vorgegebenen Punkten kubische Polynome.
In diesen Punkten selbst haben sie keine dritte Ableitung; aber sie sind natürlich stetig und besitzen sogar eine stetige
zweite Ableitung (’Krümmung’) - die Leiste soll nicht brechen. Natürlich ist dann auch die erste Ableitung stetig.
Kubischen Interpolationssplines sind also stückweise definierte Funktionen, deren Wert an den Grenzen dieser Stücke
vorgebenen sind, und die dort, wo diese zusammenstoßen, zweimal stetig differenzierbar sind.
An den beiden äußersten Nadeln ist die Leiste (die Funktion) zu Ende; von außen wird kein Biegemoment ausgeübt
und die Leiste läuft deshalb gerade (aber nicht unbedingt horizontal) aus. Deswegen ist die übliche Forderung an den
Enden noch das Verschwinden der zweiten Ableitung.
Angenommen, man hat n Intervalle; auf jedem wird ein kubisches Polynom definiert, das vier Koeffizienten hat;
insgesamt braucht man damit 4n Werte. An den n − 1 Kontaktstellen der Bereiche hat man Werte vorgegeben, und
an den beiden Enden; dies sind n + 1 Bedingungen.
Weiterhin sind an diesen Kontaktgrenzen die Funktionswerte von links und von rechts gleich, die ersten Ableitungen
und die zweiten - das sind weitere 3(n − 1) Forderungen oder Gleichungen; zusammen damit 4n − 2.
Mit den beiden Festlegungen, daß die zweite Ableitung rechts und links zu Null werden soll, hat man 4n Bedingungen
und damit stimmt die Zahl der Gleichungen und die der Parameter überein.
Als Beispiel sei eine Tabelle mit vier Wertepaaren (xk , yk ), k = 0, 1, 2, 3, betrachtet; die xk seien in wachsender
Reihenfolge numeriert.
Damit sind drei Abschnitte gegeben. Der nachfolgende Ansatz ist völlig unsachlich; er soll nur zeigen, daß es im
Prinzip geht:
Von x0 bis x1 wird eine Funktion a1 x3 + b1 x2 + c1 x + d1 betrachtet; sie stimme in x0 und x1 mit der Tabelle überein:
a1 x30 + b1 x20 + c1 x0 + d1 = y0 ,
a1 x31 + b1 x21 + c1 x1 + d1 = y1 .
Zwischen x1 und x2 wird das kubische Polynom a2 x3 + b2 x2 + c2 x + d2 benutzt; es nimmt in x2 den Wert y2 an:
a2 x32 + b2 x22 + c2 x2 + d2 = y2 . Weiterhin haben die beiden Polynome in x1 dieselben Werte sowie dieselben ersten und
zweiten Ableitungen:
a1 x31 + b1 x21 + c1 x1 + d1 = a2 x31 + b2 x21 + c2 x1 + d2 ,
3a1 x21 + 2b1 x1 + c1 = 3a2 x21 + 2b2 x1 + c2 , 6a1 x1 + 2b1 = 6a2 x1 + b2 .
95
Zwischen x2 und x3 arbeitet man mit einem Polynom a3 x3 + b3 x2 + c3 x + d3 . Insgesamt erhält man - in Matrixschreibweise - das folgende lineare System von zwölf Gleichungen mit zwölf Unbekannten:


















6x0
x30
x31
3x21
6x1
0
0
0
0
0
0
0
2
x20
x21
2x1
2
0
0
0
0
0
0
0
0
x0
x1
1
0
0
0
0
0
0
0
0
0
1
1
0
0
0
0
0
0
0
0
0
0
0
−x31
−3x21
−6x1
x31
x32
3x22
6x2
0
0
0
0
0
−x21
−2x1
−2
x21
x22
2x2
2
0
0
0
0
0
−x1
−1
−0
x1
x2
1
0
0
0
0
0
0
−1
0
0
1
1
0
0
0
0
0
0
0
0
0
0
0
−x32
−3x22
−6x2
x32
x33
6x3
0
0
0
0
0
0
−x22
−2x2
−2
x22
x23
2
0
0
0
0
0
0
−x2
−1
0
x2
x3
0
0
0
0
0
0
0
−1
0
0
1
1
0


















a1
b1
c1
d1
a2
b2
c2
d2
a3
b3
c3
d3


















 = 
















0
y0
0
0
0
y1
0
0
0
y2
y3
0


















Die erste und letzte Zeile beziehen sich auf das Verschwinden der zweiten Ableitung in den Randpunkten; die zweite,
sechste, zehnte und elfte enthalten die Interpolationsbedingungen, die dritte und siebente die Stetigkeit in den beiden
inneren Kontaktpunkten, die vierte und achte die Stetigkeit der ersten Ableitung und die fünfte sowie neunte die
Stetigkeit der zweiten Ableitung.
Die Forderung, daß Sn00 (x0 ) = Sn00 (xn ) = 0 sei, ist gängig, aber nicht zwingend; bei Bedarf kann man statt ihrer andere
Forderungen formulieren. Oft ist es sinnvoll, die Funktion als periodisch anzunehmen und x0 und xn als Anfang und
Ende einer Periode anzusehen. Dann wird natürlich y0 = yn (ein Sprung an dieser wie an anderer Stelle ist mit den
sehr glatten Splinefunktionen schlecht zu modellieren; dann sollte man lieber die Funktion unterbrechen). Man verliert
Bedingungen; es wird aber nun sinnvoll, Stetigkeit bis zur zweiten Ableitung zu fordern: Sn (x0 ) = Sn (xn ), Sn0 (x0 ) =
Sn0 (xn ), Sn00 (x0 ) = Sn00 (xn ).
Damit ist das System erneut abgeschlossen.
Nun soll eine praktikable Berechnungsvorschrift hergeleitet werden; es sei eingeräumt, daß dies nicht die einzige
mögliche Darstellung ist.
Der Einfachheit halber wird angenommen, daß die Stützstellen xi gleichabständig liegen - dieser Fall ist hier, anders
als bei der Polynominterpolation, unbedenklich. Sei also xk = a + kh, h = (b − a)/n.
Wenn Sn (x) zwischen xk und xk+1 - künftig deshalb mit Sn,k bezeichnet - ein kubisches Polynom ist, so ist seine
00
00
zweite Ableitung Sn,k
(x) dort linear (und auf dem gesamten Abschnitt stetig). Die Werte Mk = Sn,k
(xk ) nennt man
Momente des Splines, da sie mit den mechanischen Momenten in Beziehung stehen. Sie stellen nützliche Hilfswerte
dar.
Es gilt für xk ≤ x ≤ xk+1 :
00
Sn,k
(x) = Mk + (Mk+1 − Mk )
x − xk
xk+1 − x
x − xk
= Mk
+ Mk+1
.
h
h
h
Aus dieser Darstellung gewinnt man Sn,k (x) durch zweimalige Integration:
0
Sn,k
(x)
=
0
Sn,k
(xk )
Z
x
+
00
Sn,k
(t) dt
=
0
Sn,k
(xk )
xk
x
(t − xk )2 (xk+1 − t)2
+ Mk+1
− Mk
2h
2h
x
=
k
(xk+1 − x)2
(x − xk )2
Mk h
+
+ Mk+1
.
2h
2
2h
x
Z x
h
i
(xk+1 − t)3
(t − xk )3 Mk h
0
0
Sn,k (x) = Sn,k (xk ) +
Sn,k (t) dt = Sn,k (xk ) + Sn,k (xk ) +
t + Mk
+ Mk+1
2
6h
6h
x
x
0
= Sn,k
(xk ) − Mk
k
=
k
(x − xk )3
(xk+1 − x)3
Mk h
M k h2
(x − xk ) + Mk
+ Mk+1
−
.
2
6h
6h
6
Betrachten wir die Stelle xk ; sie ist linke Grenze für Sn,k (x) und rechtes Ende von Sn,k−1 (x). Der auf den Momenten
basierende Ansatz gewährleistet die Stetigkeit der zweiten Ableitung in xk . Der Wert der ersten Ableitung in diesem
Punkt, mit Hilfe von Sn,k−1 (x) berechnet, ist
h
i
0
= Sn,k (xk ) + Sn,k
(xk ) +
0
0
Sn,k
(xk ) = Sn,k−1
(xk−1 ) +
h(Mk−1 + Mk )
,
2
und der analog ermittelte Funktionswert wird
h
0
Sn,k−1 (xk ) = Sn,k (xk ) = yk = yk−1 + Sn,k−1
(xk−1 ) +
h2 (Mk − Mk−1 )
hMk−1
h+
.
2
6
i
Genauso wird Sn,k (xk+1 ) = yk+1 berechnet:
h
0
Sn,k (xk+1 ) = yk + Sn,k
(xk ) +
h2 (Mk+1 − Mk )
hMk
h+
.
2
6
i
96
(∗)
0
0
Damit hat man drei Gleichungen, bei denen man mit Hilfe von zwei von ihnen die Werte Sn,k
(xk ) und Sn,k−1
(xk−1 )
aus der dritten eliminieren kann. Ziehen wir die vorletzte Gleichung von der letzten ab:
0
0
yk+1 − yk = (yk − yk−1 ) + Sn,k
(xk ) − Sn,k−1
(xk−1 ) +
h(Mk − Mk−1 )
h2 (Mk+1 − 2Mk + Mk−1 )
h+
.
2
6
Nun wird ersetzt:
0
0
Sn,k
(xk ) − Sn,k−1
(xk−1 ) =
h(Mk−1 + Mk )
,
2
also bleibt
yk+1 − yk = (yk − yk−1 ) +
h(Mk−1 + Mk )
h(Mk − Mk−1 )
h2 (Mk+1 − 2Mk + Mk−1 )
+
h+
,
2
2
6
und letztlich resultiert die lineare Gleichung
Mk−1 + 4Mk + Mk+1 =
6
(yk−1 − 2yk + yk+1 ) ,
h2
k = 1, 2, . . . , n − 1 .
00
Die Bedingung Sn,k
(xk ) = 0 für k = 0 und k = n schließt dieses System ab: M0 = Mn = 0. Diese beiden Werte kann
man damit sofort aus dem Vektor der Momente eliminieren; in Matrixschreibweise erhält man so das System








4
1
0
..
.
0
0
1
4
1
..
.
0
0
0
1
4
..
.
0
0
...
...
...
..
.
...
...
0
0
0
..
.
1
0
0
0
0
..
.
4
1
0
0
0
..
.
1
4








M1
M2
M3
..
.
Mn−2
Mn−1








 = 6 
2 

h 



y0 − 2y1 + y2
y1 − 2y2 + y3
y2 − 2y3 + y4
..
.
yn−3 − 2yn−2 + yn−1
yn−2 − 2yn−1 + yn


p1
p2
p3
..
.






 = 




 pn−2





 .



pn−1
Die Matrix dieses Gleichungssystems hat eine dominierende Hauptdiagonale; die anderen Elemente einer Zeile ergeben in der Summe maximal 2, also die Hälfte des Hauptdiagonalelements. Man kann das System folglich auch iterativ
lösen; das hat hier den Vorteil, daß die Matrix weder aufgestellt noch gespeichert werden muß.
Ein Programm zur Lösung des Systems kommt mit einem Hilfsvektor p aus, der zur Beschleunigung der Rechnung
einmal belegt wird. Unterstellt man, daß Mk ≈ Mk+1 gilt, so ist Mk ≈ pk /6; dies ergibt eine plausible Anfangsbelegung:
1:
M : array [0..n] of real;
y : array [0..n] of real;
p : array [1..n-1] of real;
h:=(b-a)/n;
M[0]:=0; M[n]:=0; for k:=1 to n-1 do p[k]:=6∗(y[k-1]-2∗y[k]+y[k+1])/(h∗h);
for k:=1 to n-1 do M[k]:=p[k]/6;
max:=0; for k:=1 to n-1 do begin
z:=0.25*(p[k]-M[k-1]-M[k+1]);
if abs(z-M[k]) > max then max:=abs(z-M[k]); end;
if max > eps then goto 1;
0
Aus (∗) berechnet sich nun Sn,k
(xk ), und damit kann - bei bekannten Momenten Mk - die Darstellung von Sn,k (x)
endgültig angegeben werden:
Sn,k (x) = yk +
h
(xk+1 − x)3
(x − xk )3
yk+1 − yk
h
M k h2
− (Mk+1 − Mk ) (x − xk ) + Mk
+ Mk+1
−
.
h
6
6h
6h
6
i
Für die eingangs betrachtete Interpolationsaufgabe: eine Funktion zu finden, die in x = 0 den Wert 1 annimmt und
in x = ±1, ±2, ±3, ±4, ±5 den Wert Null, ergibt sich nun bei Verwendung von Splines das folgende Resultat:
97
−5
−4
−3
−2
−1
0
1
2
3
4
5
1.2
1.2
...
.... .....
.... .....
...
.
...
...
...
...
...
...
...
...
....
...
.
...
.....
...
.
...
....
...
...
....
...
..
...
.
.
.
.
.
.
.
.
.
.
.
...
.
.
.
.
.
.
.........
.......................................................................................................
.......................................................................................
.
.....
...
.......
.
.
.
.
...... ....
.
.... .....
.............
..........
1.0
0.8
0.6
0.4
0.2
0.0
1.0
0.8
0.6
0.4
0.2
0.0
−0.2
−0.2
−5
−4
−3
−2
−1
0
1
2
3
4
5
Die ’Störung’ in x = 0 bleibt tatsächlich lokal und baut sich mit wachsender Entfernung von dieser Stelle ab - ein
gänzlich anderes Verhalten als bei Polynomen. Das hat u. a. den angenehmen Effekt, daß ein ungenauer Wert in einer
Tabelle die Funktion nicht komplett oder im großen Abstand von dieser Stelle verdirbt, sondern nur in einer gewissen
Umgebung, und obendrein wird sie dort nie falscher als der Wert selbst.
Die relativ leichte Berechenbarkeit, ihre hervorragende Glattheit und diese Lokaliserung von Ungenauigkeiten machen Splines zu vorzüglichen Werkzeugen bei der Umwandlung von Tabellen in Funktionen; darüber hinaus haben
sie zahlreiche andere Anwendungen.
Die Formeln für periodische Splines, für solche mit anderen Randbedingungen oder für den Fall nicht-äquidistanter
Stützstellen entnehme man der Literatur; ebenso die für andere oder allgemeinere Splinefunktionen.
6.4
Gleichmäßige Approximation
Gegeben sei ein Abschnitt [a, b] und eine auf ihm stetige Funktion f (x). Gesucht ist ein Polynom6 Pn (x) gegebenen
Grades n, das dieser Funktion möglichst gut entspricht. Man beachte, daß es nicht nur von der Funktion f (x), sondern
auch vom Abschnitt [a, b] abhängt.
Kennziffer dieses Entsprechens sei die maximale betragsmäßige Differenz der Funktionswerte:
d = maxa≤x≤b |Pn (x) − f (x)| .
Diese soll nun durch die Wahl geeigneter Polynomkoeffizienten möglichst klein gemacht werden.
Diese Aufgabe ist numerisch etwas aufwendig; sie besitzt aber eine eindeutig bestimmte Lösung, das sogenannte
Polynom bester gleichmäßiger Approximation. Zu seiner Charakterisierung geht man von dem folgenden Satz aus:
C̆ebyshevscher Alternantensatz: Pn (x) ist genau dann das Polynom bester gleichmäßiger Approximation zu f (x) auf
dem Abschnitt [a, b], wenn eine streng monoton wachsende Folge von n + 2 Punkten xk mit a ≤ x0 < x1 < x2 < . . . <
xn < xn+1 ≤ b existiert, so daß für die Werte δk = Pn (xk ) − f (xk ) die folgenden Bedingungen gelten: |δk | = d ∀k
und δk · δk+1 < 0.
(Der triviale Fall, daß f (x) selbst ein Polynom vom Grade ≤ n ist, sei hier ausgeklammert.)
Die einzelnen Abweichungen δk sind also betragsmäßig gleich (und gleich dem Maximum) und wechseln jedesmal das
Vorzeichen; daher der Name Altenantensatz.
Betrachten wir die Wirkung dieses Satze an einem Beispiel; sei f (x) = ex auf
3
Fall n = 0: Diese Funktion soll möglichst gut durch eine Konstante a0
dargestellt werden.
2
Man überlegt sich leicht, daß a0 gerade das arithmetische Mittel des
kleinsten und des größten Funktionswertes ist; hier also a0 = (1 + e)/2.
Tatsächlich, dann ist der absolute Fehler nach beiden Seiten gleich und
1
folglich am kleinsten. Verschiebt man ao nach unten, so wird die obere
Abweichung größer, und damit der Gesamtfehler.
[0, 1].
.....
........ ..
.
.
.
.
.
.
.
.
...
.........
.........
.
.
.
.
.
.
.
.
.
............................................................................... ...........................................
.
..
...........
............
..
.
.
.
.
.
.
.
.
.
.
.
...........
..................
0
0.0
6 Andere
0.2
0.4
Näherungsfunktionen als Polynome sind möglich; darauf soll hier nicht eingegangen werden.
98
0.6
0.8
1.0
3
Fall n = 1: Diese Funktion soll nun möglichst gut durch eine lineare
Funktion a0 + ax dargestellt werden.
Diese Funktion kann nicht komplett über oder unter ex verlaufen, vielmehr müssen sich die beiden Kurven im betrachteten Abschnitt zweimal
schneiden. Die maximalen Abweichungen müssen dann in x0 = 0 und
x2 = 1 angenommen werden, wo ex über der linearen Funktion liegt,
und in einem inneren Punkt x1 , wo sie darunter liegt.
Der Anstiegskoeffizient a1 ist damit (e1 − e0 )/1 = e − 1 = 1.718 . . .,
und da die Abweichung in x1 maximal ist wird dort die Ableitung der
Differenz ex − (a0 + a1 x) zu Null, d.h. ex1 − a1 = 0.
Es folgt x1 = ln a1 = ln(e − 1) = 0.541 . . .; die Abweichungen sind
in x0 und x1 betragsmäßig gleich, aber von verschiedenen Vorzeichen:
e0 − (a0 + a1 · 0) = a0 + a1 x1 − ex1 .
...
..........
.
.
.
.
......
.......
.
.
.
.
.
.
.
.
...........
...............
.
.
2
.
.
.
...........
.....................
.
.
.
.
............... ..
.................... ...
.
.
.
.
.
...
.............
........
.
.
.
.
.
.
.
.
.
...
.
........
1 .............
...
..
..
..
..
..
0
0.0
0.2
0.4
0.6
0.8
1.0
Man erhält a0 = [e−(e−1)·ln(e−1)]/2 = 0.894 . . .. Die maximale absolute Abweichung ist nicht mehr (e−1)/2 = 0.859
wie bei n = 0, sondern nur noch 1 − a0 = 0.106.
Vergleichen wir dieses Polynom P1G (x) = 0.894 + 1.718x der besten gleichmäßigen Approximation einmal mit dem
linearen Taylor-Polynom P1T (x) = 1 + x; die Verläufe der Abweichung P1G (x) − ex bzw. P1T (x) − ex sind nachstehend
dargestellt (der erste ausgezogen, der zweite gestrichelt):
0.2
0.0
−0.2
−0.4
−0.6
.............................................................................................................................................
..................................
.....................
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.................
..... ..... ..... ..... ..... .......................................................
...............
..... ..... ..... .....
..............
........
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
............
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
... ..... .....
....
.......
..... ..... .
.... .....
..... .....
..... .....
..... ....
. .....
..... ...
.. .....
..... ..
... ...
.. ....
. .....
..... .
.... .
.... .
.... .
.... .
... .
−0.8
0.0
0.2
0.4
0.6
0.8
1.0
Das Taylor-Polynom ist in der Nähe der Entwicklungsstelle x0 = 0 sehr gut und wird dann immer schlechter; P1G
dagegen ist gleichmäßig halbwegs gut.
Das Polynom bester gleichmäßiger Approximation beliebigen Grades zu f (x) in einem sehr kleinen Abschnitt [a, b]
um die Stelle x0 herum ist praktisch mit dem Taylor-Polynom in diesem Punkt identisch (sofern letzteres existiert).
Setzen wir nun das Beispiel f (x) = ex auf [0, 1] fort:
Wählt man n = 2, so wird das Polynom a0 + a1 x + a2 x2 . Es ist wiederum x0 = und x3 = 1; das ist eine Besonderheit
dieses Beispiels, im allgemeinen Fall sind die beiden äußeren Alternantenpunkte nicht unbedingt mit den Abschnittsgrenzen identisch.
Weiter gibt es zwei Punkte x1 und x2 mit 0 < x1 < x2 < 1, für die die drei Gleichungen gelten:
e0 − (a0 + a1 · 0 + a2 · 02 ) = −[ex1 − (a0 + a1 · x1 + a2 · x21 )] ,
ex1 − (a0 + a1 · x1 + a2 · x21 ) = −[ex2 − (a0 + a1 · x2 + a2 · x22 )] ,
ex2 − (a0 + a1 · x2 + a2 · x22 ) = e1 − (a0 + a1 · 1 + a2 · 12 )] ,
und da die Abweichungen in x1 und x2 maximal werden gilt obendrein
ex1 − (a1 + 2a2 x1 ) = 0 und ex2 − (a1 + 2a2 x2 ) = 0 .
Das sind fünf Gleichungen zur Ermittlung von x1 und x2 sowie - hauptsächlich - a0 bis a2 .
Man gelangt zu dem Polynom 1.008756 + 0.854743x + 0.846027x2 ; seine maximale Abweichung auf dem Abschnitt
[0, 1] ist - wie man am Absolutglied unschwer erkennt - gerade 0.008756. Sie hat sich gegenüber n = 1 wiederum
drastisch verringert.
Die Abweichungskurve 1.008756 + 0.854743x + 0.846027x2 hat den folgenden Verlauf:
99
0.01
.....
...............
............... ... ......................
......
.........
.....
.
.
.
.
.
.
.
.
.
.....
... ....
...
......
.
.
.....
.
.
...
.
.. ....
.
....
.
.
.
.
.
.
.
...
....
.
.
.. ..
..
....
....
.
.
.
.
...
.
...
.
...
.
.
...
...
..
....
.
.
.
...
...
.
.
.
..
.
.
.
.
.
...
.
.
...
.
.
0.00
..
...
..
.
.
...
....
.
.
.
.
.
.
.
.
... ...
....
..
...
.....
....
... ...
.
.
.
.
.
.....
... ..
....
...
.
.
.....
.
.
... .
...
.
.....
.
.
.
.
.
... ...
..
......
.....
.
.
.
.
.
... ..
.
........
.
.
.
.
.
.
.
.
.
.
.
..
............
....
............................................
.
−0.01
0.0
0.2
0.4
0.6
0.8
1.0
Die vier Alternantenpunkte sind eingezeichnet.
Die Ermittlung von Polynomen bester gleichmäßiger Approximation ist i. a. aufwendig; das angegebene Beispiel ist
vergleichsweise einfach.
Nachteilig wäre hier, das diese Polynome in x = 0 Werte ungleich 1 liefern. Das ist aber eher ein ästhetisches Problem
als ein substantielles.
Ansonsten sind die Polynome bester gleichmäßiger Approximation in gewisser Weise das Optimum des Machbaren.
Das Taylor-Polynom zu ex hat auf [0, 1] seine größte Abweichung in x = 1; bei n = 2 beträgt sie e−(1+1/1!+1/2!) =
e − 2.5 = 0.218 . . . oder etwa das 25-fache der des angegebenen Polynoms. Dessen Fehler wird erst vom TaylorPolynom fünfter (!) Ordnung erreicht und unterboten.
Für die effektive Berechnung elementarer Funktionen sind Polynome bester gleichmäßiger Approximation also sehr
zu empfehlen und günstiger als die Potenzreihen, die im Kapitel ’Berechnung von Grundfunktionen’ benutzt wurden.
Man entnehme ggfs. ihre Koeffizienten den dort aufgeführten Büchern.
Zu jeder auf [a, b] definierten und dort stetigen Funktion f (x) gibt es genau ein Polynom bester gleichmäßiger
Approximation vom Grade ≤ n. Mit der Zunahme von n kann die maximale Abweichung nur abnehmen.7 Man kann
sie beliebig klein machen, wenn man den Grad des Polynoms nur entsprechend groß wählt.
Das geht um so schneller - bzgl. des Polynomgrades - je glatter die Funktion f (x) auf [a, b] ist, d. h. um so mehr
stetige Ableitungen sie besitzt.
6.5
Approximation im Quadratmittel
Hier wird wiederum mit globaler Information auf einem Abschnitt gearbeitet, im Gegensatz zu der nur punktuellen
Information der Taylor-Formel. Allerdings wird nicht so scharf auf die größte Abweichung geachtet, sondern es wird
eine gewisse mittlere Abweichung möglichst klein gemacht.
Das Kriterium zur Auswahl von ψ(x) ist
b
Z
[ψ(x) − f (x)]2 dx
−→
min !
a
Dabei kann man noch eine Wichtung einbauen, indem man gewisse Bereiche des Abschnitts [a, b] betont oder in ihrer
Bedeutung reduziert. Das geschieht mit Hilfe einer Gewichts- oder Belegungsfunktion %(x). Sie ist fast überall auf
[a, b] definiert (d. h. mit Ausnahme evtl. einiger Punkte), nichtnegativ und fast überall von Null verschieden. Ihr
Integral über [a, b] sei endlich:
Z
b
%(x) dx
<
+∞ .
a
Die verallgemeinerte Zielstellung ist nun
Z
b
%(x) [ψ(x) − f (x)]2 dx
−→
min !
a
Dort, wo %(x) groß ist, wird folglich eine besonders gute Übereinstimmung von f (x) und ψ(x) angestrebt.
In der ursprünglichen Aufgabe war einfach %(x) ≡ 1.
Für die weiteren Berechnungen wird ein bequemes Symbol eingeführt: Für beliebige, auf [a, b] fast überall definierte
7 Das bestapproximierende Polynom zu sin x auf dem symmetrischen Abschnitt [−π/2, π/2] muß ebenfalls eine ungerade
Funktion sein; im Falle n = 1 hat es also die Gestalt a1 x. Die Erhöhung des zulässigen Grades auf 2 bringt nichts, denn ein
Summand a2 x2 wäre bei a2 6= 0 gerade und würde nur stören. Das beste quadratische Polynom ist also in Wirklichkeit auch
nur linear.
100
Funktionen setzt man8
b
Z
(f, g)
%(x) · f (x) · g(x) dx .
=
a
Diese Operation ordnet also zwei Funktionen als Resultat eine Zahl zu.
Sie hat die folgenden grundlegenden Eigenschaften:
Z
b
Z
a
a
b
Z
b
Z
Z
%(x) · f (x) · λg(x) dx ,
a
a
a
(λf, g) = λ(f, g) = (f, λg) ,
also
b
Z
%(x) · [f1 (x) + f2 (x)] · g(x) dx =
(f1 + f2 , g) =
c)
b
%(x) · f (x) · g(x) dx =
%(x) · λf (x) · g(x) dx = λ
b)
b
%(x) · g(x) · f (x) dx = (g, f ) ,
%(x) · f (x) · g(x) dx =
(f, g) =
a)
a
Z
b
b
Z
%(x) · f2 (x) · g(x) dx = (f1 , g) + (f2 , g) ,
%(x) · f1 (x) · g(x) dx +
=
a
a
Z
b
%(x) · f 2 (x) dx ≥ 0 ,
(f, f ) =
d)
a
(f, f ) = 0 ist gleichbedeutend damit, daß f (x) fast überall auf [a, b] gleich Null ist.
All diese Eigenschaften treten in völlig analoger Form auch beim Skalarprodukt von Vektoren auf, und zwar sowohl
im geometrischen Fall des zwei- oder dreidimensionalen Raumes als auch beim allgemeinen Sakalarprodukt zweier
n-dimensionaler Vektoren x und y in der Form xT y. Deshalb nennt man (f, g) das Skalarprodukt der Funktionen f (x)
und g(x) (auf [a, b] und mit dem Gewicht %(x)).
p
√
Ebenso wie man durch ~
x·~
x den Betrag |~
x| eines Vektors definiert kann man (f, f ) als wesentliche Kennziffer der
Funktion f (x) ansehen, die etwas über ihre Größe aussagt. Sie wird Norm von f (x) genannt. (Genauer: L2 -Norm
(El-zwei-Norm), oder, ganz genau: L2% (a, b)-Norm), man schreibt
||f || =
1/2
b
Z
p
%(x) · f 2 (x) dx
(f, f ) =
.
a
Es gelten die analogen Gesetze wie beim Betrag des Vektors:
||f || ≥ 0,
||f || = 0 ⇐⇒ f (x) ≡ 0,
||λf || = |λ| · ||f ||,
||f + g|| ≤ ||f || + ||g|| .
Den Abstand zweier Funktionen f (x) und g(x) kann als ||f − g|| gemessen werden.
Nun zurück zu der formulierten Approximationsaufgabe. Die Funktion ψ(x) soll also aus einer gewissen Funktionenmenge so gewählt werden, daß sie f (x) möglichst nahe kommt; es sei also ||ψ − f || minimal.
Da dieser Ausdruck nichtnegativ ist reicht es hin, sein Quadrat minimal zu machen.
Es sei wieder die lineare Aufgabe betrachtet: ψ ist die Linearkombination gegebener Basisfunktionen ϕk , und deren
Koeffizienten ak sollen optimal gewählt werden:
||ψ − f ||
2
= (ψ − f, ψ − f ) =
n
X
ak ϕk − f,
k=1
=
n
X
k=1
ak ϕk ,
n
X
!
ak ϕk
−2
k=1
=
n
X
!
ak ϕk , f
+ (f, f ) =
k=1
n
n
X
X
ak al (ϕk , ϕl ) − 2
k=1 l=1
n
X
n
X
!
ak ϕk − f
=
k=1
n
n
X
X
n
X
k=1 l=1
k=1
(ak ϕk , al ϕl ) − 2
ak (ϕk , f ) + (f, f ) =
ak (ϕk , f ) + (f, f ) = D(a1 , a2 , . . . , an ) .
k=1
Dieser Ausdruck soll durch Wahl der ak minimal gemacht werden, also müssen seine partiellen Ableitungen nach ai
verschwinden:
n
X
∂D
= 2
ak (ϕk , ϕi ) − 2(ϕi , f ) = 0 , i = 1, 2, . . . , n,
∂ai
k=1
8 Künftig
wird immer vorausgesetzt. daß die aufgeschriebenen Integrale existieren. Sie können uneigentliche Integrale über
unbeschränkte Funktionen sein, müssen dann aber konvergieren.
101
es folgt das folgende System linearer Gleichungen in den ak :
(ϕ1 , ϕ1 )
 (ϕ2 , ϕ1 )

..

.
(ϕn , ϕ1 )

(ϕ1 , ϕ2 )
(ϕ2 , ϕ2 )
..
.
(ϕn , ϕ2 )
(ϕ1 , ϕ3 )
(ϕ2 , ϕ3 )
..
.
(ϕn , ϕ3 )
(ϕ1 , f )
a1
(ϕ1 , ϕn )
(ϕ2 , ϕn )   a2 
 (ϕ2 , f ) 
 .
 .  = 
..
..


  .. 
.
.
(ϕn , f )
an
(ϕn , ϕn )
...
...
..
.
...




Die Matrix dieses Systems ist symmetrisch.
Die Rechnung läßt sich außerordentlich vereinfachen, wenn man die Basisfunktionen ϕk paarweise orthogonal wählt.
Das bedeutet hier wie bei Vektoren, daß ihr Skalarprodukt zu Null wird:
(ϕk , ϕl ) = 0
bei
k 6= l .
Da selbstverständlich ϕk (x) 6≡ 0 gelten soll - welchen Sinn kann es haben, die Null zur Basisfunktion zu machen?
- ist (ϕk , ϕk ) 6= 0 (und positiv). Die Matrix des vorstehenden Systems wird damit zur Diagonalmatrix mit sämtlich
von Null verschiedenen Elementen auf der Hauptdiagonalen. Dieses System ist sofort lösbar, es folgt
ak =
(ϕk , f )
(ϕk , ϕk )
=⇒
ψ(x) =
n
X
(ϕk , f )
k=1
(ϕk , ϕk )
ϕk (x) .
Anmerkungen:
1. Jeden von Null verschiedenen Vektor kann man zum Einheitsvektor machen, indem man ihn mit dem Kehrwert
seines Betrages multipliziert.
Analog kann man die Basisfunktionen ϕk (x) normieren, indem man sie mit dem Kehrwert ihrer Norm multipliziert;
nennen wir das Resultat ϕ̃k (x):
1
ϕ̃k (x) =
ϕk (x) .
||ϕk ||
Dann ist
(ϕk , f )
1
1
1
ϕk (x) =
·
(ϕk , f )ϕk (x) =
(ϕk , f )ϕk (x) =
(ϕk , ϕk )
||ϕk || ||ϕk ||
||ϕk ||2
1
1
ϕk , f )
ϕk (x) = (ϕ˜k , f )ϕ˜k (x) .
||ϕk ||
||ϕk ||
Operiert man mit einem Satz orthonormaler Basisfunktionen ϕ̃k (x), d. h. (ϕ̃k , ϕ̃l ) = 0 bei k 6= l und (ϕ̃k , ϕ̃k ) = 1, so
vereinfacht sich die Formel noch weiter:
= (
ψ(x)
n
X
=
(ϕ̃k , f )ϕ̃k (x) .
k=1
2. Man beachte, daß (im Falle orthogonaler Basisfunktionen) der Wert von ak nur von f (x) und ϕk (x) bestimmt
wird, nicht aber von n und der Wahl der anderen Funktionen, solange sie nur orthogonal sind.
3. Angenommen, man hat ein unendliches System orthogonaler Basisfunktionen (d. h. jedes Paar ist orthogonal), und
sei f (x) als unendliche Linearkombination (d. h. als Reihe) dieser Funktionen darstellbar:
f (x)
=
∞
X
bk ϕk (x) ,
k=1
so kann man beide Seiten dieser Gleichung skalar mit ϕi multiplizieren; beide Skalarprodukte müssen gleich sein:
(f, ϕi ) =
∞
X
!
bk ϕ k , ϕ i
k=1
=
∞
X
∞
X
k=1
k=1
(bk ϕk , ϕi ) =
bk (ϕk , ϕi ) = bi (ϕi , ϕi ) .
Die Koeffizienten bk sind folglich eindeutig bestimmt und ergeben sich nach der obigen Formel.
Man nennt sie die Fourierkoeffizienten der Funktion f (x) in den Basisfunktionen ϕk (x) auf [a, b] (und ggfs. mit der
Gewichtsfunktion %(x)). Die Reihe selbst heißt dann Fourierreihe. Die gesuchte Näherungsfunktion ψ(x) ist nichts
anderes als die n-te Teilsumme dieser Fourierreihe.
Im engeren Sinne sind die Fourierkoeffizienten bezogen auf das bekannte orthogonale Funktionensystem


cos kπx
b−a
ϕk (x) =
 sin (k + 1)πx
2(b − a)
,
k ≥ 0, k gerade,
,
k ≥ 1, k ungerade,
ausgeschrieben wird es bei a = 0 und b = T zu
n
1, cos
2πx
4πx
4πx
6πx
6πx
2πx
, sin
, cos
, sin
, cos
, sin
, ...
T
T
T
T
T
T
102
o
.
Der große Vorteil der klassischen Fourreihe ist die Periodizität der resultierenden Funktion; sie ist aber eigentlich ein
Nebeneffekt. Man kann ex auf [0, 1] in eine Fourierreihe zerlegen, und diese stimmt dann (außer in x = 0 und x = 1)
dort mit ex überein. Braucht man die Zerlegung nur auf diesem Abschnitt, so ist die Periodizität unwesentlich.
Für verschieden Zwecke wurde eine Vielzahl anderer orthogonaler Funktionensysteme entwickelt; wichtig sind u. a.
die orthogonalen Polynome. Das sind unendliche Folgen von Polynomen ϕk (x), die gerade den Grad k haben, und
die paarweise orthogonal sind.
Sie können rekursiv konstruiert werden; betrachten wir als Beispiel den Fall %(x) ≡ 1 und [a, b] = [−1, 1].
Es wird ganz einfach ϕ0 (x) = 1 gesetzt. Das ist ein Polynom nullten Grades.
Das Intervall ist symmetrisch zum Nullpunkt; das Integral über eine ungerade Funktion von -1 bis 1 ist automatisch
gleich Null.
Wählt man deshalb für gerade k gerade Funktionen, also Polynome der Form a0 + a2 x2 + a4 x4 + . . . + ak xk , und für
ungerade k entsprechend Polynome der Gestalt a1 x + a3 x3 + . . . + ak xk , so ist das Produkt von je einer Funktion der
einen mit einer der anderen Klasse eine ungerade Funktion; jedes Polynom mit geradem k ist damit orthogonal zu
jedem mit ungeradem k.
Mit ϕ1 (x) = x ist also bereits (ϕ1 , ϕ0 ) = 0 gewährleistet.
Für ϕ2 (x) = a0 + a2 x2 muß man nur noch (ϕ2 , ϕ0 ) = 0 erreichen, denn (ϕ1 , ϕ2 ) = 0 gilt bereits.
1
Z
1 · (a0 + a2 x2 ) dx = 2a0 +
(ϕ2 , ϕ0 ) =
−1
2a2
= 0,
3
man kann a2 = 3 wählen und erhält dann wegen a0 = −1 das Polynom ϕ2 (x) = 3x2 − 1.
Weiter wird ϕ3 (x) = a1 x + a3 x3 ; die Orthogonalität zu ϕ1 verlangt
Z
1
(ϕ3 , ϕ1 ) =
x · (a1 x + a3 x3 ) dx =
−1
2a1
2a3
+
= 0,
3
5
3
folglich wird ϕ3 (x) = 5x − 3x.
Künftig lohnt es sich, einfach zu einer Linearkombination der in Frage kommenden bisherigen Polynome die neue
Potenz hinzuzunehmen, also den (provisorischen) Ansatz ϕ4 (x) = x4 + a2 ϕ2 (x) + a0 ϕ0 zu machen.
Dann folgt aus (ϕ4 , ϕ2 ) = (x4 , ϕ2 ) + a2 (ϕ2 , ϕ2 ) = 0 sofort a2 (das Skalarprodukt (ϕ2 , ϕ0 ) ist Null und braucht nicht
berechnet zu werden), und analog ergibt (ϕ4 , ϕ0 ) = (x4 , ϕ0 ) + a0 (ϕ0 , ϕ0 ) umgehend a0 . - Das erhaltene Polynom kann
man noch mit einer geeigneten Konstanten multiplizieren, um ganzzahlige Koeffizienten zu erhalten.
Für ϕ5 (x) macht man dann den Ansatz x5 + a3 ϕ3 (x) + a1 ϕ1 (x), usw..
Für derartige Polynome gibt es eine Vielzahl von Anwendungen. Für bestimmte %(x) sind sie Lösungen wichtiger
Differentialgleichungen. Jedes orthogonale Polynom ϕn (x) hat genau n einfache reelle Nullstellen zwischen a und b.
Es existiert stets eine Rekursion zwischen drei aufeinanderfolgenden Polynomen ϕn+1 , ϕn und ϕn−1 , damit sind sie
wesentlich einfacher berechenbar als mit dem beschriebenen Verfahren.
Der Abschnitt [a, b] läßt sich durch die Transformation x = a + (b − a) · (s + 1)/2 in [−1, 1] überführen; umgekehrt ist
dann s = 2(x−a)/(b−a) −1. Sei %(x) auf (a, b) gegeben, dann kann man auf [−1, 1] mit %∗ (s) = %(a+(b−a)·(s+1)/2 )
eine Folge orthogonaler Polynome ϕ∗n erzeugen. Damit reicht es aus, die orthogonalen Polynome auf [−1, 1] zu definieren.
√
Als besonders bedeutsam erwiesen sich die Funktionen %(x) = 1 und %(x) = 1/ 1 − x2 ; die entstehenden Polynome
werden Legendre - Polynome bzw. C̆ebyshew - Polynome 9 genannt. Einige Eigenschaften sind in der nachstehenden Tabelle zusammengefaßt; die Koeffizienten vor den Polynomen resultieren aus gewissen Bequemlichkeitsüberlegungen.
Für gerade n sind diese Polynome gerade Funktionen, für ungerade entsprechend ungerade.
Für die C̆ebyshew - Polynome gilt die kompakte Darstellung
Tn (x)
=
cos(n · arccos x)
.
Das Polynom 2−(n−1) · Tn (x) = 1 · xn + . . . hat auf [−1, 1] die Extremwerte ±2−(n−1) . Jedes andere Polynom n-ten
Grades, das mit 1 · xn beginnt, nimmt auf diesem Abschnitt größere Funktionswerte an.
9 Adrien Marie Legendre, 1752 - 1833, bedeutender französischer Mathematiker
Pafnuti Lwowitsch C̆ebyshew oder Tschebyscheff (P. L. Qebyxev), 1821 - 1894, bedeutender russischer Mathematiker
103
Eigenschaft
Legendre - Polynome Pn (x)
C̆ebyshew - Polynome Tn (x)
%(x)
%(x) = 1
1
%(x) = √
1 − x2
P0 (x) = 1 , P1 (x) = x ,
1
1
P2 (x) = (3x2 − 1) , P3 (x) = (5x3 − 3x) ,
2
2
1
4
2
P4 (x) = (35x − 30x + 3) ,
8
1
P5 (x) = (63x5 − 70x3 + 15x) ,
8
Erste sechs
Polynome
Pn+1 (x) =
Rekursion
n+
ϕ2 (x): .............................
ϕ3 (x): . . . . . . .
0.75
ϕ4 (x): .... .... .... .... . 0.50
ϕ5 (x): ........ ........ . 0.25
0.00
−0.25
−0.50
−0.75
T4 (x) = 8x4 − 8x2 + 1 ,
T5 (x) = 16x5 − 20x3 + 5x ,
−0.5
2
bei n > 0
π
0.0
−0.5
Tn+1 (x) = 2xTn (x) − Tn−1 (x)
1
2
0.5
0.0
1.00
−1.0 −0.5
1.00 .... ..... . . ..
0.75
0.75
0.50
0.50
0.25
0.25
0.00
0.00
−0.25
−0.25
−0.50
−0.50
−0.75
−0.75
−1.00
−1.00
−1.0
1.0
.
....
.....
.
.....
.......
......
... ....
.
. ....
... ...
.. ......
.. ....
.
. .....
.. ....... .. . . .. .... .
.. ......
.. ....... ..
.. . .......
.
.
..
. . . ..
..... .......
. . . . . . .. ...
.... . ..... ... .. .. ... ... ... .. .....
... . . . . ...
..... .. ....... ..
.. .. ... ..... .. ....
... .... ..... ..
. .
.... .. .. ...... .... .....
....
.. .. .. ... . .
... .. .. .. ........ .
. . ... ... ......
... .. ... ..
................... . . . .. .
....
....
......
..
..
−1.00
−1.0
T2 (x) = 2x2 − 1 , T3 (x) = 4x3 − 3x ,
2n + 1
n
xPn (x) −
Pn−1 (x)
n+1
n+1
1/(ϕn , ϕn )
−1.0
1.00 ...
T0 (x) = 1 , T1 (x) = x ,
0.5
1.0
und
0.0
1
bei n = 0
π
0.5
1.0
.... .
.
....
..... .. .. . ... .. ... ....
.
.. .. .... .
...
..... .. .....
... ....
......
....
......... ..
.
..
..
... ... .....
. ..
.......
.... .. .. ...
.
......... .. .
..
.
.
.
. . . .. .
..... ..... ...
.. .....
.
.
.
.
.
.
.
.
.
... ....
. .. . .. ... .. .......
... ...... .... ... .. .. .. . .. ....
. .. . . ..
.
...
.. . ..
.. . .. . ...
........ .... ... ...
.
.
.. .. .. . .
.
.
.
.
..
.. ..
.. .... .. .....
........ .... ... ..
.. ..
.. .... .. ...
... .. . .
.
..
.. .... .. .....
.......... ..........
. .
.
.
.
.
.
.
.
...
.
.. ..... .... .. ...
......
...... ....
.
.. .. .. ... ......
.. . . ...... ...
.
.
.. .. ... .... ...
.. . .. ..
.
. ..
... ... .. .... ........
... ... .. .
... ... .. .. .......... ........ ... .... .......
.. .......
. .
. ..
−0.5
0.0
0.5
1.00
0.75
0.50
0.25
0.00
−0.25
−0.50
−0.75
−1.00
1.0
In den Tabellenwerken findet man eine Vielzahl weiterer Formeln und Beziehungen für und mit diesen Funktionen.
Beispiel: Annäherung an ex auf [0, 1], %(x) ≡ 1:
Durch die Transformation x = 0.5 + 0.5s wird s ∈ [−1, 1] erreicht; es wird
Z
1
1 · e0.5+0.5s ds
−1
a0 =
Z
= e − 1 = 1.718 . . . .
1
2
1 ds
−1
Weiter ist
Z
1
s · e0.5+0.5s ds
−1
a1 =
Z
= 9 − 3e = 0.84515 . . .
1
s2 ds
−1
und
Z
a2 =
1
−1
1
(3s2 − 1) · e0.5+0.5s ds
2
Z
1
= 35e − 95 = 0.13986 . . . .
1
[ (3s2 − 1)]2 ds
2
−1
Wegen x = 2s − 1 ist damit ψ0 (x) = 1.718, ψ1 (x) = 1.71828 + 0.84515(2x − 1) und ψ2 (x) = 1.71828 + 0.84515(2x −
1) + 0.13986
[3(2x − 1)2 − 1].
2
104
Die Polynome können natürlich ausmultipliziert und zusammengefaßt werden; in dieser Form ist aber noch gut zu
sehen, daß jede weitere Funktion den bisherigen Teil behält und nur einen neuen Summanden bekommt.
Die Abweichungen ψn (x) − ex sind in den nachstehenden Bildern dargestellt:
1.0
0.5
0.0
−0.5
0.02
0.2
..........
.........
........
.......
......
......
.....
.....
.....
.....
.....
.....
.....
.....
.....
....
....
..
−1.0
0.00
0.25
0.50
0.75
...
...
...
...
.....................
...
.....
...
.
.
.
.
...
...
...
.
0.00
...
.
.
...
.....
...
.
.
...
.
.
.................
...
...
...
..
0.1
..............................
.......
.....
.
.
.
....
..
....
....
.
0.0
.
.
...
.
.
.
...
.
..
...
.
.
.
...
.
...
−0.1 .....
.
...
.
1.00
−0.2
0.00
0.25
0.50
0.75
−0.02
0.00
1.00
0.25
0.50
0.75
1.00
Wie man sieht nehmen die Abweichunegn rapide ab; die erhaltenen Polynome sind, was den maximalen absoluten
Fehler betrifft, nur unwesentlich schlechter als die besten gleichmäßigen.
6.6
Anpassung an Tabellen
Die typische Problemstellung ist die folgende: Gegeben seien gewisse Meßwerte (xi , yi ), i = 1, 2, ..., m, und eine
Funktion y = f (x; a1 , a2 , ..., an ) mit unbekannten Parametern aj , j = 1, 2, ..., n. Ziel ist es, diese Parameter so zu
bestimmen, daß die dadurch konkret festgelegte Funktion y = f (x) den gemessenen Wertepaaren möglichst gut
entspricht. Hierzu sollen nachfolgend einige Möglichkeiten betrachtet werden:
Fall A: Es mögen genausoviele Koeffizienten wie Meßwerte, also n = m, gesucht sein, so kann man fordern, daß einfach
f (xi ) = yi ∀i gilt. Grafisch: Die Funktionskurve soll die Meßpunkte exakt passieren. Diese exakte Übereinstimmung
nennt man Interpolationsbedingung, die resultierende Interpolationspolynom und den Gesamtprozeß Interpolation (s.
d.).
Fall B: Wenn jedes Wertepaar mit Meßfehlern behaftet ist, so ist anzunehmen, daß ihre Gesamtheit mehr vernünftige
Information enthält als die Reduktion auf so viele Messungen, wie man von der gewünschten Parameterzahl her
braucht. Aus diesen Gründen ist es oftmals angebracht, die Anzahl der Basisfunktionen (den Grad des Polynoms...)
wesentlich kleiner zu wählen als die Anzahl der Meßdaten. Dann kann man zwar die Interpolationsbedingung noch
aufschreiben, aber sie wird nicht mehr in allen Punkten erfüllt. (In der Regel wird sie dann meist in keinem Punkt
mehr exakt erfüllt.)
Diese Bedingungen stellen damit nur noch ein angestrebtes Ideal dar, weshalb man dieses System auch das der
Idealgleichungen nennt. Das lineare Gleichungssystem ist überbestimmt und im klassischen Sinne i. a. nicht lösbar;
man muß zu den Normalgleichungen übergehen, indem man es mit der transponierten Systemmatrix multipliziert.
Die entstehende Funktion wird eine Ausgleichsfunktion genannt. Ihre Funktionskurve passiert die ’Punktwolke’ und
versucht, ihr in der Gesamheit möglichst gut zu entsprechen.
Beispiel 1: Gesucht ist eine konstante Funktion f (x) = a, die die Meßwerte {5, 3, 15, 11} einer eigentlich konstanten
Größe repräsentieren soll.
Die vier Idealgleichungen sind a = 5, a = 3, a = 15, a = 11
Die (einzige) Normalgleichung resultiert aus




1
5
 1 
 3 
 1  a0 =  15 
1
11

=⇒


1
 1 

(1, 1, 1, 1) 
a = (1, 1, 1, 1) 
1  0
1

5
3 
15 
11
=⇒
4a0 = 34 .
Das Resultat ist
5 + 3 + 15 + 11
= 8.5 ,
4
und das ist einfach das arithmetische Mittel aller Meßwerte. (Die xi haben hier keine Rolle gespielt.)
a0 =
Beispiel 2: Lineare Regression, oder linearer Trend
Bei Betrachtung der vier Wertepaare (1, 5), (2, 3), (3, 15) und (5, 11) hat man den vagen Eindruck eines - wenn auch
inkonsequenten - Wachstums; um das auszudrücken bedarf es wenigstens einer linearen Funktion: y = a0 + a1 x. Man
erhält daraus das folgende System von Idealgleichungen:
a0 + 1a1 = 5
a0 + 2a1 = 3
a0 + 3a1 = 15
a0 + 5a1 = 11

=⇒
1
 1
 1
1


1
2 
a0

=
3 
a1
5
105

5
3 
15 
11
=⇒

1
1
1
2
1
3
1
5
1
 1
 1
1


1
1
a0
2 
=
1
a1
3 
5
1
2
1
3
1
5

5
4
 3 
 15  =⇒
11
11
11
39
a0
a1
=
34
111
.
Bei einem quadratischen System mit nur zwei Unbekannten ist die Cramersche Regel effektiv; hier erhält man
34
111
a0 = 4
11
11 39 = 34 · 39 − 11 · 2111 = 105 = 3
4 · 39 − 11
35
11 39
4
11
a1 = 4
11
34 111 = 4 · 111 − 11 ·234 = 70 = 2
4 · 39 − 11
35
11 39
Es resultiert mithin das lineare Ausgleichspolynom y = 2x + 3.
Die Matrix des Systems der Normalgleichungen ist symmetrisch. Im allgemeinen Fall führt die Suche nach den
Koeffizienten aj der Ausgleichsfunktion ψ(x) = a1 ϕ1 (x) + a2 ϕ2 (x) + ... + an ϕn (x) zu dem System Ba = r; die
Elemente der quadratischen Matrix B und der rechten Seite r ergeben sich zu
bij =
m
X
ϕi (x)ϕj (x) ,
k=1
6.7
ri =
m
X
yk · ϕi (x)
i, j = 1, 2, ..., n, n
.
k=1
Nichtlineare Anpassung
Hier sollen nur einige Beispiele betrachtet werden, die zeigen, wie man gewisse nichtlineare Anpassungen in lineare
Aufgaben transformieren kann.
Dabei ändert man aber die Maßstäbe und gewinnt nicht die beste Lösung im Sinne der Ausgangsaufgabe; das ist der
Preis für die bequeme Rechnung.
Gegeben seien also gewisse Meßwerte (xi , yi ), i = 1, 2, ..., m.
Beispiel 1: Anpassung von axb :
Idealgleichung: axbi = yi =⇒ ln a + b ln xi = ln yi
Man sucht b und die neue Unbekannte ln a; aus letzterer erhält man a.
(Dieser Ansatz ist nur sinnvoll bei xi > 0 und yi > 0.)
Beispiel 2: Anpassung von aebx :
Idealgleichung: aebxi = yi =⇒ ln a + bxi = ln yi
Man sucht b und die neue Unbekannte ln a; aus letzterer erhält man a.
√
Beispiel 3: Anpassung von a + bx:
√
Idealgleichung: a + bxi = yi =⇒ a + bxi = yi2
Beispiel 4: Anpassung von A sin(ωx + α), ω sei gegeben:
Idealgleichung: A sin(ωxi + α) = yi =⇒ A cos α · sin ωxi + A sin α · cos ωxi = ln yi
√
Man sucht die neuen Unbekannte B = A cos α und C = A sin α; aus diesen erhält man A = B 2 + C 2 und
tan α = C/B.
Beispiel 5: Anpassung von (ax + b)/(1 + cx):
Idealgleichung: (axi + b)/(1 + cxi ) = yi =⇒ axi + b − cxi yi = yi
Nach Multiplikation jeder Idealgleichung mit dem Nenner gewinnt man eine neue lineare Gleichung.
Es wäre übrigens Unsinn, den Ansatz (ax + b)/(cx + d) zu machen, da dies keine eindeutige Bestimmung der Koeffizienten erlaubt - man kann alle vier mit derselben, von Null verschiedenen Zahl multiplizieren.
Beispiel 6: Anpassung von aebx + cedx mit unbekannten Werten a, b, c und d:
Diese Aufgabe ist leider nicht in einfacher und praktikabler Weise zu linearisieren, da man diese Summe nicht gliedweise logarithmieren kann.
Beispiel 7: Anpassung von A sin(ωx + α), dabei seien A, ω und α gesucht:
Im allgemeinen Fall wiederum nicht linearisierbar.
Der Praktiker muß sich klar werden, welche Ansatzfunktion er für ψ(x) wählt.
Es kann sein, er hat für sein Problem eine Differentialgleichung aufgestellt, diese gelöst und bestimmt nun aus Meßwerten die Koeffizienten, die zu der realen Situation gehören. Dann sollte er wohl versuchen, die gefundene Funktion
106
in dieser Form zu verwenden.
Hat er dagegen kein konkretes mathematisches Modell, sondern wählt die Funktion ψ(x) aus einer Klasse von geeignet
aussehenden Kandidaten, so hat man Freiheiten und sollte bedenken, daß Unachtsamkeit bei dieser Wahl einem in
einem späteren Stadium viele Probleme einbringen kann.
6.8
Aufgaben
1. Es seien xk gewisse gegebene Zahlenwerte; man kann der Einfachheit halber annehmen, daß sie in wachsender
Reihenfolge sortiert sind, also xk ≤ xk+1 gilt. Bestimmen Sie Zahlen a, b und c derart, daß die folgenden
Ausdrücke jeweils minimal werden:
n
X
k=1
(xk − a)2
,
n
X
|xk − b|
,
maxk=1...n |xk − c|
k=1
√
2. Es sei die Funktion f (x) = 1 + x auf dem Abschnitt [−1, 1] betrachtet.
Ermitteln Sie zu ihr die Polynome bester gleichmäßiger Approximation des Grades 0 und 1!
Ermitteln Sie zu ihr die Polynome bester Approximation im Quadratmittel des Grades 0, 1 und 2!
Stellen Sie die jeweiligen Abweichungen zwischen Funktion und Approximierender grafisch dar!
3. Ein Sensor liefert zu gleichabständigen Zeitpunkten tk = t0 + kτ einen Meßwert x(tk ) zu einem ablaufenden
Prozeß; der Prozeßrechner gewinnt nach der Erhebung von x(tk ) unverzüglich eine Prognose x̃(tk+1 ) für x(tk+1 ),
um ggfs. steuernd einzugreifen. Diese Prognose soll durch eine Interpolation über die n letzten gemessenen Werte
mit Hilfe der Formel
x̃(tk+1 ) = A0 x(tk ) + A1 x(tk−1 ) + A2 x(tk−2 ) + . . . + An−2 x(tk−n+2 ) + An−1 x(tk−n+1 )
erfolgen.
Im Falle n = 2 ist A0 = 2 und A1 = −1.
a) Ermitteln Sie die Koeffizienten Aj für n = 3, 4 und 5! (Hinweis: Benutzen Sie die Interpolationsformel nach
Lagrange!)
b) Angenommen, statt des echten Prozeßwertes x(tk ) wird ein durch einen Meßfehler vefälschter Wert x∗ (tk ) =
x(tk ) ± ε mit einer bekannten universellen Fehlerschranke ε ermittelt.
Welcher maximaler möglicher Fehler resultiert daraus für den Prognosewert x̃(tk+1 )?
4. Lassen Sie sich von einem Programm die Interpolationspolynome zu der Funktion y = f (x) = ex auf dem
Abschnitt [−1, 1] mit gleichabständigen Stützstellen xk = (2k/n) − 1 zeichnen! Was geschieht, wenn man den
Wert in x = 0 (und nur diesen) von 1 auf 1.01 verfälscht?
107
Kapitel 7
Differentialgleichungen
7.1
Problemstellung
Es gibt eine Vielzahl von Methoden zur exakten - d. h. formelmäßigen - Lösung von gewöhnlichen Differentialgleichungen (künftig ’DGl’ abgekürzt), und es gibt eine Vielzahl von DGl, die sich nicht analytisch lösen lassen. Hier
sind Näherungsverfahren gefragt.
Die allgemeine Lösung einer DGl n-ter Ordnung enthält i. a. genau n Parameter; in dieser Form kann sie von einem
Näherungsverfahren, das nur Zahlenwerte als Resultat liefert, schwerlich gelöst werden. Es werden also nur spezielle
Lösungen berechnet.
Diese werden durch die Angabe von Anfangswerten oder Randwerten festglegt.1 Anfangswerte sind Vorgaben für die
gesuchte spezielle Lösung y(x) an einer Stelle x0 ; üblicherweise ist das der Funktionswert, der Wert der 1., 2., ... ,
(n−1)
.
n − 1-ten Ableitung in x0 : y(x0 ) = y0 , y 0 (x0 ) = y00 , . . . , y (n−1) (x0 ) = y0
Das sind genau n Angaben zur Bestimmung der n unbekannten Parameter.
Die Anfangsbedingungen können hiervon auch abweichen; bei einer Dgl. zweiter Ordnung können auch Vorgaben für y(x0 ) und y 00 (x0 ) getroffen werden, oder - mit gegebenen Werten A, B und C - gelten die Gleichungen
y 0 (x0 ) = Ay(x0 ) + B und y 00 (x0 ) + Cy(x0 ) = 0, usw..
Demgegenüber werden bei Randwertproblemen Angaben in verschiedenen Punkten gemacht; oft sind es zwei. Typisch
ist z. B. die Vorgabe des Lösungswertes in diesen beiden Punkten:
y 00 = f (x, y, y 0 ) ,
y(x0 ) = y0 ,
y(x1 ) = y1 .
Randwertprobleme können mehr oder weniger leicht und erfolgreich auf Anfangswertprobleme zurückgeführt werden;
daneben gibt es eine Vielzahl von Methoden zu ihrer unmittelbaren Behandlung. Darauf soll in diesem Rahmen nicht
eingegangen werden; man vergleiche das abschließende Beispiel in 3.3., S. 26, und das gesamte Beispiel 3, S. 135.
Differentialgleichungen n-ter Ordnung können in ein System von Gleichungen 1. Ordnung umgewandelt werden, indem
man für y 0 , . . . , y n−1 neue unbekannte Funktionen einführt, z. B.:
(
y
000
0
00
= f (x, y, y , y )
=⇒
y1 (x) = y(x)
y2 (x) = y 0 (x)
y3 (x) = y 00 (x)
(
=⇒
y10 = y2
y20 = y3
y30 = f (x, y1 , y2 , y3 )
Im betrachteten Beispiel ist die DGl explizit, also nach der höchsten Ableitung aufgelöst. Das ist oft, aber nicht
immer der Fall. Künftig soll nur diese Variante betrachtet werden; ist die DGl implizit, z. B. 1. Ordnung: F (x, y, y 0 ) =
0, so muß ggfs. für gegebene Werte von x und y aus dieser der jeweils zugehörige Wert von y 0 mit Hilfe eines
Näherungsverfahrens zum Lösen von Gleichungen bestimmt werden.
Es wird also das folgende Anfangswertproblem2 betrachtet:
y10 = f1 (x, y1 , y2 , . . . , yn )
y20 = f2 (x, y1 , y2 , . . . , yn )
...
yn0 = fn (x, y1 , y2 , . . . , yn )
1 Es
,
y1 (x0 ) = y1,0
y2 (x0 ) = y2,0
...
yn (x0 ) = yn,0
.
sind weitere Vorgaben möglich; z. B. kann für das Integral
Z
b
y(x) dx
a
über die Lösungsfunktion y(x) ein Wert vorgeschrieben werden, u. a..
2 Ein Anfangswertproblem besteht aus der DGl einerseits und den Anfangsbedingungen andererseits.
108
Die Funktionen yi (x) werden zu einem n-dimensionalen Funktionenvektor y(x) = (y1 (x), y2 (x), . . . , yn (x))T zusammengefaßt, analog die Anfangsbedingungen zu y0 = (y1,0 , y2,0 , . . . , yn,0 )T und die Funktionen fi :




f1 (x, y1 , y2 , . . . , yn )
f1 (x, y)
 f2 (x, y1 , y2 , . . . , yn ) 
 f2 (x, y) 
f (x, y) = 

 = 
...
...
fn (x, y1 , y2 , . . . , yn )
fn (x, y)
.
Damit lautet das Anfangswertproblem in kompakter Schreibweise
y0
=
f (x, y) ,
y(x0 ) = y0
.
Äußerlich unterscheiden sich damit Systeme nicht von skalaren Gleichungen, also von einer einzigen DGl 1. Ordnung
für eine gesuchte Funktion. Alle weiteren Rechnungen sind auch für einzelne Gleichungen und für Systeme weitgehend
identisch, so daß künftig nur wie mit einer skalaren Gleichung gerechnet wird.
7.2
Vorbetrachtung: Taylor-Polynom zur Lösungsfunktion
Zunächst wird eine Hilfsformel hergeleitet:
In der Funktion f (x, y) werden die beiden Variablen um kleine Werte geändert; es folgt
∆f ≈
∂f
∂f
· ∆x +
· ∆y = fx · ∆x + fy · ∆y .
∂x
∂y
Wenn nun seinerseits y = y(x) von x abhängt, so ist die Änderung von y ein Resultat der Änderung von x und
gegeben durch ∆y ≈ y 0 (x) · ∆x. Damit wird
∆f ≈ fx · ∆x + fy · y 0 · ∆x
∆f
≈ fx + fy · y 0
∆x
=⇒
=⇒
∆x −→ 0
∂f
∂f
d
f (x, y(x)) =
+
· y 0 (x) .
dx
∂x
∂y
Diese Hilfsformel ist eine spezielle Variante der Kettenregel.
Gegeben sei das Anfangswertproblem y 0 = f (x, y), y(x0 ) = y0 . Es soll ein Taylor-Polynom zur Lösungsfunktion,
entwickelt an der Stelle x0 , aufgestellt werden.
Bekanntlich gilt
Pn (x) = y(x0 ) + y 0 (x0 ) · (x − x0 ) +
y 00 (x0 )
y (n) (x0 )
y 0 (x0 )
· (x − x0 )2 +
· (x − x0 )3 + . . . +
· (x − x0 )n .
2
3!
2
Dieses Polynom ist eine Näherung an y(x) in einer gewissen Umgebung von x0 .
Um es aufzustellen braucht man die Werte der Funktion y(x) und ihrer Ableitungen an der Stelle x0 .
Der Funktionswert ist nun gerade der Anfangswert y0 .
Den Wert der ersten Ableitung erhält man aus der DGl und dem Anfangswert: y 0 (x0 ) = f (x0 , y(x0 )) = f (x0 , y0 ).
Differenziert man beide Seiten der DGl nach x, so erhält man die zweite Ableitung von y:
d
d 0
y = y 00 =
f (x, y) = fx + fy · y 0
dx
dx
=⇒
y 00 (x0 ) = fx (x0 , y0 ) + fy (x0 , y0 ) · y 0 (x0 ) .
Nochmaliges Differenzieren erbringt die dritte Ableitung, usw.:
d 00
d
y = y 000 =
[fx + fy · y 0 ] = (fxx + fxy · y 0 ) + (fyx · y 0 + fyy · (y 0 )2 + fy · y 00 ) .
dx
dx
Wegen fxy = fyx kann man den letzten Ausdruck etwas zusammenfassen.
Faktisch ist die Rechnung einfacher. Als Beispiel wird das folgende Problem betrachtet:
y0 =
2 − x + cos πy
,
1 + 2x + y 2
y(0) = 1 .
Es gilt y 0 (0) = (2 − 0 + cos π)/(1 + 2 · 0 + 12 ) = 1/2.
Nun wird die DGl differenziert, wobei man beachtet, daß y von x abhängt!
y 00 =
(−1 − π sin πy · y 0 ) · (1 + 2x + y 2 ) − (2 − x + cos πy) · (2 + 2y · y 0 )
(1 + 2x + y 2 )2
Der Wert im Anfangspunkt ist damit
y 00 (0) =
(−1) · 2 − (2 − 1) · (2 + 2 · 1 · (1/2))
−2 − 3
5
= − .
=
4
4
22
109
Weiter wird
y 000 =
Z
(1 + 2x + y 2 )4
mit dem Zähler
Z = [(−π 2 cos πy · y 02 − π sin πy · y 00 ) · (1 + 2x + y 2 ) + (−1 − π sin πy · y 0 )(2 + 2yy 0 )−
−(−1 − π sin πy · y 0 ) · (2 + 2y · y 0 ) − (2 − x + cos πy) · 2(y 02 + y · y 00 )] · (1 + 2x + y 2 )2 −
−[(−1 − π sin πy · y 0 ) · (1 + 2x + y 2 ) − (2 − x + cos πy) · (2 + 2y · y 0 )] · 2(1 + 2x + y 2 )(2 + 2yy 0 ) .
Setzt man hier x = 0 und die bekannten oder bereits berechneten Werte für y(0), y 0 (0) und y 00 (0), so wird
y 000 (0) =
34 + π 2
.
8
Das Verfahren kann beliebig fortgesetzt werden; es empfiehlt sich der Einsatz eines Programmes zur Rechnung mit
Computeralgebra. Dieses erzeugt mühelos z. B. den folgenden Ausdruck:
P5 (x) = 1 +
x
5
34 + π 2 3 385 + 25π 2 4
− x2 +
x −
x +
2
8
48
384
599
3π 2
π4
+
+
384
20
1280
x5 + . . . .
Die nachstehende Ableitung zeigt den Verlauf der Taylor-Polynome des Grades 0, 1, 2 und 3, der wahre Verlauf von
y(x) ist gestrichelt:
2.0
....
....... P3 (x)
............................
.........
.
.
.
.
.
.
........................P
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
(x)
.
.
.
.
1
.
.....
...........
............................
1.5
.................................................................
.
.
.
.
.
.
.
.
.
.
.
.
.
.
....
........................
...........................................................
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
..... ..... ..... ..... ..... ..... ..... ..... ..... ..... ..... ..... ..... ..... ..... ..... ..... ..... ..... ..... ..... ..... ..... ..... .....
........... ...........
...................................................................................................................................................................................................
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
...................
...............
1.0 ...........................................................................................................................................................................................................................................................................................................................................................................................
....................
P0 (x)
..................
................
...............
..............
.............
.............
............
0.5
..
P2 (x).................
0.0
0.00
0.25
0.50
0.75
1.00
1.25
Wie man sieht stimmt - im Rahmen der Zeichnung - P3 (x) etwa bis 0.3 mit y(s) recht gut überein; die Polynome
niederen Grades entsprechend weniger.
Wie kann man nun auf diese Weise y(x) - zumindest genähert - in einer gewissen Entfernung von x0 berechnen? Der
direkte Wert eines Taylor-Polynoms (zumindest eines moderaten Grades) wäre zu ungenau.
Man wählt einen nicht allzuweit von x0 entfernten Wert x1 = x0 + h; h ist so klein, daß der Wert y1 = Pn (x1 ) als
gute Näherung zu y(x1 ) gelten kann.
Dann formuliert man das neue Anfangswertproblem y 0 = f (x, y), y(x1 ) = y1 .
Wenn y1 exakt gleich y(x1 ) wäre, so wäre die Lösung dieser Aufgabe mit der der ursprünglichen identisch. Wegen
der i. a. vorhandenen Abweichung berechnet man jetzt aber eine neue Funktion, die allerdings nicht sehr weit neben
der eigentlichen liegen dürfte.
Zu diesem neuen Anfangswertproblem wird das Taylor-Poynom in x = x1 aufgestellt; es ist bis in eine Stelle x2
brauchbar. Mit dem dort berechneten Wert ermittelt man eine Näherung y2 ≈ y(x2 ), usw..
Anwendung auf das vorige Beispiel; sei n = 2 und h = 0.2.
Wegen x0 = 0 wird x1 = x0 + h = 0 + 0.2 = 0.2 und y1 = 1 + 0.2/2 − 5 · 0.22 /8 = 1.075.
Die Koeffizienten des neuen Taylor-Polynoms sind
y10 = f (x1 , y1 ) = f (0.2, 1.075) =
und
y100 =
2 − 0.2 + cos 1.075π
= 0.32385
1 + 2 · 0.2 + 1.0752
df
(0.2, 1.075) = −0.64003 ,
dx
es resultiert das neue Polynom
(1)
P2 (x) = 1.075 + 0.32385(x − 0.2) −
110
0.64003
(x − 0.2)2 .
2
(1)
Mit P2 (0.4) erhält man einen Näherungswert zu y(0.4), dem wahren Wert der exakten Lösung an der Stelle x2 =
x1 + h = 0.2 + 0.2 = 0.4.
Die Rechnung kann fortgesetzt werden; man erhält die folgenden, als Kreuze eingezeichneten Punkte (xi , yi ):
1.25
1.20
1.15
1.10
1.05
........................................................................................................................
.........................................
............
.
.
.
.
.
.
.
.
.
.
.
.
.
............
.
.
.
.
.
.
.
.
......................
.
..
.
.
.
.
.
.
.
.
.
.
.
.
.
.
..
.........
.
.
.
.
.
.
.
.
.
.
.
.
.
..
.............
........... ............
.
.
.
.
.
.
.
.
.
..
.........
............
.
.
.
.
.
.
.. ........
........ ....
........
.
.
.
.
.
....
. ...
...... .... ..... .... .. ..... ..... ..... ...
.. ....
.................. ....
. ....
..............
.
.
.
.
....
....
.
....
.
.
...
....
.
.
.
.
.
....
.
...
.
.
....
.
.
.
.
....
...
.
.
.
.
....
.....
1.00
0.00
0.25
0.50
0.75
1.00
1.25
1.50
Das ursprüngliche Polynom P2 (x), an der Stelle x0 entwickelt, ist gestrichelt eingezeichnet. Man erkennt, daß es den
Wert y1 liefert, um gleich danach unbrauchbar zu werden.
Die Punkte (xi , yi ) liegen nicht auf der exakten Lösung, aber immerhin in ihrer Nähe.
Ein weiteres Beispiel: Schwingung eines mathematischen Pendels
Dieses Beispiel ist realitätsbezogen, und es demonstriert die Möglichkeit der Behandlung einer DGl 2. Ordnung;
übrigens wird sie dabei nicht in ein System transformiert.
Sei also ein Pendel der Länge l gegeben, das in einem Schwerefeld mit der Beschleunigung g reibungsfrei schwingt;
bekanntlich genügt seine zeitabhängige Auslenkung ϕ(t) gegen die Senkrechte der nichtlinearen3 DGl
ϕ̈
=
−
g
sin ϕ
l
.
Die DGl 2. Ordnung braucht zwei Anfangsbedinungen; nehmen wir an, das Pendel hing bei t = 0 in Ruhe (ϕ(0) = 0)
und bekam einen Schubs, der ihm die Winkelgeschwindigkeit ω0 = ϕ̇(0) vermittelte.
Gehen wir aus vom Erdschwerefeld (g = 9.81m/s2 ), und geben wir dem Pendel die Länge 1m. Der Winkel ϕ wird im
Bogenmaß gemessen, die Zeit in Sekunden. Im Falle kleiner Ausschläge beträgt die Dauer einer vollen Schwingung
r
T
=
2π
l
= 2.00603s .
g
Das Aufstellen des Taylor-Poynoms ist hier recht einfach; es werde ein Polynom 4. Grades verwandt:
ϕ(2) = −9.81 sin ϕ ,
ϕ(3) = −9.81 cos ϕ · ϕ(1) ,
ϕ(4) = −9.81 cos ϕ · ϕ(2) − sin ϕ · (ϕ(1) )2 .
Es ist also wiederum möglich, die einzelnen Ableitungswerte rekursiv zu berechnen:
ϕ(2) (0) = −9.81 sin 0 = 0 ,
ϕ(3) (0) = −9.81ω0 cos 0 = −9.81ω0 ,
ϕ(4) (0) = −9.81 −ω02 · sin 0 + 0 · cos 0
= 0.
Sei beispielsweise die Anfangsgeschwindigkeit v0 = 1m/s, also ω = v0 /l = 1s−1 , so ergibt sich mit der Schrittweite
τ = 0.1s (der für Zeitschritte an Stelle von h üblichen Bezeichnung):
ϕ(0.1) ≈ ϕ1 = 0 + 1 · 0.1 +
0
9.81 · 1
0
· 0.12 −
· 0.13 + · 0.14 = 0.09984 .
2
3!
4
Man beachte: Bei gleichmäßiger Rotation hätte das Pendel den Winkel ω0 · τ = 0.1 überstreichen müssen; tatsächlich
hat es etwas weniger zurückgelegt. Das stimmt mit dem physikalischen Verständnis überein, nach dem das Pendel
3 Im
Unterricht wird hieraus gern eine lineare DGl gewonnen, indem man sich auf kleine Auslenkungen
beschränkt und
p
sin ϕ ≈ ϕ setzt. Dann resultiert die bekannte harmonische Schwingung ϕ(t) = A sin(ωt + α) mit ω =
g/l.
Diese nichtlineare DGl kann nicht in elementaren Funktionen gelöst werden.
111
beim Ausschwingen langsamer werden muß.
Die weitere Rechnung ist in der folgenden Tabelle dargestellt, es ist jeweils
(3)
ϕi+1 = ϕi + ϕ̇i · τ +
(4)
ϕ
ϕ̈i 2 ϕi
·τ +
· τ3 + i · τ4 .
2
3!
4!
Für den nächsten Schritt sind wiederum zwei Anfangswerte nötig, man braucht dort also auch den Wert der Winkelgeschwindigkeit, der sich analog aus dem Taylor-Polynom für ϕ̇(t) berechnet:4
(3)
ϕ̇i+1 = ϕ̇i + ϕ̈i · τ +
k
ti
0
1
2
3
4
5
6
7
8
9
10
11
0.000
0.1
0.2
0.3
0.4
0.5
0.6
0.7
0.8
0.9
1.0
1.1
ϕi
ϕ̇i
0.000000
0.098365
0.187139
0.257780
0.303592
0.320293
0.306343
0.263042
0.194453
0.107090
0.009368
-0.089224
1.000000
0.950950
0.809904
0.591490
0.317444
0.013941
-0.290778
-0.568370
-0.792365
-0.940551
-0.997677
-0.957767
(4)
ϕi
ϕ
· τ2 + i · τ3 .
2
3!
ϕ̈i
0.000000
-0.963405
-1.825132
-2.500912
-2.932700
-3.088631
-2.958436
-2.550789
-1.895582
-1.048550
-0.091900
0.874125
(3)
ϕi
-9.810000
-9.283725
-7.806437
-5.610789
-2.971716
-0.129803
2.719729
5.383921
7.626601
9.173943
9.786779
9.358323
(4)
ϕi
0.000000
10.276534
18.789129
24.598269
27.749641
28.759129
27.921210
24.986549
19.435327
11.154936
0.992969
-9.342904
Eges /m
0.500000
0.499574
0.499248
0.499070
0.499009
0.499004
0.499001
0.498953
0.498804
0.498516
0.498110
0.497681
Die Tabelle erfaßt etwas mehr als eine Halbschwingung. Der Ausschlag (3. Spalte) wächst zunächst bis auf etwa
0.3203 (in dieser Tabelle), wobei die Winkelgeschwindigkeit (4. Spalte) abnimmt. Beim Maximalausschlag ist die
rücktreibende Beschleunigung (5. Spalte) am größten. - Die Halbschwingung dauert etwas länger als eine Sekunde;
das paßt zum Überschlag der Schwingungsdauer.
Wie genau sind die Werte? - Die physikalische Überlegung liefert hier gewisse Kriterien, die man bei der Bewertung
eines numerischen Ergebnisses durchaus nutzen sollte.
Die Schwingung war als reibungsfrei vorausgesetzt, also ist die Geschwindigkeit beim nächsten Nulldurchgang exakt
dieselbe wie beim Start, nur mit entgegengesetzten Vorzeichen.
Nun ist der Moment des Nulldurchgangs nicht genau getroffen; er liegt in der Nähe des Moments t = 1.0s, und zwar
danach. Die Geschwindigkeit müßte dort noch kleiner sein als im Durchgang; das trifft zu. Rechnen wir etwas genauer.
Zunächst werden die Differenzen zwischen den drei Winkelwerten um den Nulldurchgang herum bewertet (in Einheiten
der letzten Kommastelle; das ist bequemer):
t
ϕ
0.9
107 090
1.0
9 368
1.1
-89 224
∆
97 722
98 592
Die Differenzen sind fast gleich, die ϕi liegen also (hier!) fast auf einer Geraden. Damit ist lineare Interpolation
gerechtfertigt, um den Moment des Nulldurchgangs zu ermitteln:
t∗
= 1.0 +
9368
· 0.1 = 1.0095 .
9368 − (−89224)
Die Geschwindigkeitskurve durchläuft ein Minimum; es kommt auf ihre Krümmung an, und deshalb ist dort lineare
Interpolation unzweckmäßig. Legen wir also ein quadratisches Polynom durch die drei Werte der Geschwindigkeit.
Zur Bequemlichkeit wird auf das Minuszeichen verzichtet und wieder in Einheiten der letzten Stelle gerechnet.
Ansatz: ϕ(t) = A + B(t − 0.9) + C(t − 0.9)(t − 1.0); aus ϕ(0.9) = 940551 = A folgt sofort der erste Parameter.
Weiter ergibt ϕ(1.0) = 940551 + B · 0.1 = 997677 den Wert B = 571260, und aus ϕ(1.1) = 940551 + 571260 · 0.2 +
C · 0.2 · 0.1 = 957767 folgt C = −4851800.
Setzt man nun den ermittelten Wert t∗ = 1.0095s ein, so resultiert 940 551 + 571 260 · (1.0031 − 0.9) − 4 851 800 ·
(1.0031 − 0.9) · (1.0031 − 1.0) = 998057. (Kommastellen wurden weggerundet). - Vorzeichen und Größenordnung
wiederhergestellt erhält man damit für die Geschwindigkeit im Nulldurchgang -0.998057.
Es wurde also wirklich etwas zuwenig Geschwindigkeit gefunden, und zwar 0.2%.
4 An
dieser Stelle kommt doch das System von 2 Gleichungen 1. Ordnung ins Spiel!
112
Ein ständig gültiges Kriterium: Die Gesamtenergie
Eges = Ekin + Epot =
ml2 ϕ̇2
+ mg(1 − cos ϕ)l
2
muß wegen der fehlenden Reibung dauernd konstant sein, und dieser Wert kann mühelos mitberechnet werden (letzte
Spalte). Er nimmt tatsächlich nur unwesentlich ab; in der Zeit bis 1s (erste Halbschwingung) gehen knapp 0.5% der
Energie ’rechnerisch’ verloren.
Wie läßt sich die Genauigkeit verbessern?
Die Schrittweite τ (bzw. h, im allgemeinen Fall) muß verringert werden; dann wird der erste Wert genauer, und damit
sind die Voraussetzungen für den zweiten verbessert, usw..
Allerdings muß man dann, um ein bestimmtes Argument zu erreichen, entsprechend mehr Schritte machen. Das hat
drei Nachteile: 1.) höherer Aufwand, 2.) man macht zwar kleinere Fehler pro Schritt, aber öfter, und 3.) man macht
mehr Rundungsfehler, da man mehr rechnet.
Trotzdem zahlt sich eine Verkeinerung der Schrittweite in puncto Genauigkeit in gewissen Grenzen aus. Im Vergleich
zur eingangs betrachteten Tabelle soll nun τ dreimal jeweils halbiert werden:
ϕi
ϕ̇i
ϕ̈i
(3)
ϕi
(4)
τ
i
ti
ϕi
Eges /m
0.1
...
0
...
9
10
11
0.000
...
0.9
1.0
1.1
0.000000
...
0.107090
0.009368
-0.089224
1.000000
...
-0.940551
-0.997677
-0.957767
0.000000
...
-1.048550
-0.091900
0.874125
-9.810000
...
9.173943
9.786779
9.358323
0.000000
...
11.154936
0.992969
-9.342904
0.500000
...
0.498516
0.498110
0.497681
0.05
20
21
22
1.000
1.050
1.100
0.009504
-0.040374
-0.089262
-0.999317
-0.991704
-0.959845
-0.093236
0.395957
0.874502
9.802859
9.720692
9.378588
1.007713
-4.270591
-9.350394
0.499760
0.499733
0.499707
0.025
40
41
42
1.000
1.025
1.050
0.009515
-0.015477
-0.040374
-0.999526
-0.998793
-0.991940
-0.093337
0.151825
0.395962
9.804904
9.796982
9.722998
1.008843
-1.640681
-4.270823
0.499970
0.499968
0.499967
0.0125
80
81
82
1.0000
1.0125
1.0250
0.009515
-0.002983
-0.015477
-0.999552
-0.999952
-0.998820
-0.093345
0.029263
0.151823
9.805161
9.809490
9.797255
1.008939
-0.316334
-1.640669
0.499996
0.499996
0.499996
Bei τ = 0.0125s zeichnet sich in der Gesamtenergie im Rahmen der Ausgabegenauigkeit kaum noch eine Abweichung
ab; die Geschwindigkeit ist nur unwesentlich kleiner, wobei man noch bedenken muß, daß sie ja nicht im Nulldurchgang angezeigt wird.
Für v0 = 1m/s, 5m/s, 7m/s wird nun das zugehörige ω0 berechnet und damit jeweils die betreffende Bewegung
simuliert:
0.4
ϕ
v0 = 1m/s
0.3
0.2
0.1
0.0
−0.1
.......................................................
........................
...............
...............
............
.
.
.
.
.
.
.
.
.
.
.
...........
.
.
.
.
.
.
.
.
.
.
..........
.
.
.
.
.
..........
......
.
.
.
.
.
.
.
.
.
.........
.
.
.
.
.
.
.
.
.........
.
.
.
.
.....
........
.
.
.
.
.
.
.
........
.
.
.
.
.
.
.
.
.......
.
.
.
.
......
.....
.
.
.
.
......
.
.
.
.
.
......
.
.
.
......
....
.
.
.
.
......
.
.
.
.
t
.
.
.
.
..............................................................................................................................................................................................................................................................................................................................................................................................
......
......
......
....
0.0
0.1
0.2
0.3
0.4
0.5
0.6
0.7
0.8
0.9
1.0
1.1
Der Maximalwert entspricht einem Ausschlag von 18.4o . Das ist mehr als das, was man gemeinhin unter einem ’kleinen Ausschlag’ versteht, aber das Bild ähnelt doch sehr einer harmonischen Schwingung.
113
2.0
1.8
1.6
1.4
1.2
1.0
0.8
0.6
0.4
0.2
0.0
−0.2
ϕ
........................................
.............
......................
v0 = 5m/s
..........
.............
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
........
..
......
........
......
.....
.
.
.
.
.....
.
.
.
.
.....
.
.
.
.....
...
.
.
.
.....
.
.
.
.....
.
.
.
.....
...
.
.
.
.....
.
.
.
.
.....
.
.
...
.....
.
.
.
.
.
.....
.
...
.....
.
.
.
.
.
....
.
..
....
.
.
.
....
.
..
....
.
.
.
....
.
..
....
.
.
.
.
....
..
.
....
.
..
..
.
.
...........................................................................................................................................................................................................................................................................................................................................................t...
. ...
..
0.0
0.1
0.2
0.3
0.4
0.5
0.6
0.7
0.8
0.9
1.0
1.1
1.2
1.3
Rein vom Bild her scheint sich nicht viel geändert zu haben, aber die Schwingungsdauer ist länger geworden. Bei
kleinen Ausschlägen hing sie nicht von der Schwingungsweite ab!
4 ϕ
.......
...........
.
.
.
.
.
.
.
.
.
.
.
.
.....
v0 = 6.3m/s
.................
3
2
1
0
..............
..........................
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
........
...............................
........................
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
................
.............
.
.
.
.
.
.
.
.
.
.
..
..........
.........
.
.
.
.
.
.
.
......
......
.
.
.
.
.
.
.....
....
.
.
.
.
....
....
.
.
.
.
....
....
.
.
.
.
....
....
.
.
.
....
0.0
0.2
0.4
0.6
0.8
1.0
1.2
1.4
.....t
..........
1.6
1.8
Das Pendel macht Überschläge und rotiert - ein Zustand, der sich mit dem linearen Modell überhaupt nicht beschreiben läßt.
√
Ein Fall aus einer Höhe von s = 2m (der obersten Lage des Pendels) erbringt eine Fallgeschwindigkeit von 2gs =
6.2641839m/s.
Startet man mit dieser Geschwindigkeit, so müßte das Pendel in der aufrechten Lage stehenbleiben. Statt dessen wird
nachstehend die Rechnung mit der geringfügig größeren Anfangsgeschwindigkeit von 6.2642m/s durchgeführt, und
zwar mit drei verschiedenen Zeitschrittweiten:
114
ϕ
4
τ = 0.01
v0 = 6.2642m/s
3
2
1
0
.................
...........................................................
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.......
.. ..... ..... ...
.......
.. .....
.....................
...
..... ..
...
.............
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
τ
=
0.02
.
.
.
..
.
.
.
.
.
..
....
..
....
.
.
..
..
.
.
..
.
.....
..
.. .
..
..
..
...
.. τ = 0.05
.. .
..
..
..
...
..
..
.
.........t.............
.
.........
0
1
2
3
4
Die Rechnung zeigt, daß das Ergebnis sehr stark von der Schrittweite abhängt; wählt man diese zu groß, so wird eine
Schwingung vorgegaukelt, während es sich in Wirklichkeit um eine Rotation handelt.
Solche Zustände eines Systems nennt man chaotisch. Sie zeichnen sich dadurch aus, daß sich mehr oder weniger
genau ein labiles Gleichgewicht einstellt, aus dem heraus das System in schwer vorhersagbarer Weise nach der einen
oder anderen Seite kippen kann (und es können wesentlich mehr Richtungen möglich sein). An solchen Stellen werden
Modelle ungenau, und es ist schwer oder unmöglich, den Zustand des Systems für die Zeit ’danach’ vorherzusagen.
Das bekannteste Beispiel ist das Wetter, dessen Prognose über lange Zeiträume sehr unsicher ist.
7.3
Runge - Kutta - Verfahren
Nun zu einem praktikablen Verfahren, das im Prinzip weitgehend die im vorigen Punkt beschriebene TaylorEntwicklung realisiert, es aber dem Nutzer erspart, die aufwendigen Ableitungen zu berechnen. Statt dessen kommt
es einzig mit der Berechnung der Funktion f (x, y) aus, diese allerdings i. a. mehrfach.
Die klassischen Formeln dieser Theorie wurden zuerst von Runge,5 später von Heun und Kutta um das Jahr 1900
herum entwickelt.
Es wird wiederum - bei gegebenen Anfangswerten (x0 , y0 ) - jeweils ein neues Wertepaar (xi+1 , yi+1 ) aus seinem Vorgängerpaar (xi , yi ) berechnet. Deshalb nennt man diese Methode auch Einschrittverfahren.6
1. Das Eulersche Polygonzugverfahren (vorwärts):
Das ist das einfachste denkbare Verfahren; für praktische Zwecke ist es meist zu ungenau. Mit seiner Hilfe können
theoretische Untersuchungen an DGl vorgenommen werden; weiterhin ist es ein guter Einstieg in die Denkweise dieser
Methoden.
Es basiert auf der Verwendung der linearen Taylor-Polynome, also auf der simplen Formel
y(xi+1 ) ≈ yi+1 = yi + yi0 · h = yi + h · f (xi , yi ) ,
xi+1 = xi + h .
Pro Schritt ist nur eine einzige Auswertung der Funktion f (x, y) (diese Zahl ist das übliche Maß des Rechenaufwandes) durchzuführen.
Welche Genauigkeit des Resultats ist zu erwarten?
Der Fehler pro Schritt ist - kleine Werte von h vorausgesetzt - etwa gleich dem ersten weggelassenen Term, und der
wiederum ist etwa proportional h2 .
Um einen gewissen Wert x∗ zu erreichen muß man eine Anzahl von h-Schritten machen, die proportional 1/h ist.
Multipliziert man den Fehler pro Schritt mit der Anzahl der Schritte, so ergibt sich eine Proportionalität des Gesamtfehlers zu h (etwa!).
Diese grobe Überlegung kann korrekter durchgeführt werden; statt dessen soll die Wirkung der Methode an einer
ganz einfachen linearen Gleichung demonstriert werden:
y0
=
y,
y(0) = 1
=⇒
y(x)
=
ex .
Berechnet werden soll ein Näherungswert zu y(1) = e = 2.71828 . . ..
Bei h = 1 ist man in einem Schritt an der betreffenden Stelle: y(1) ≈ y1 = y0 + h · f (x0 , y0 ) = 1 + 1 · 1 = 2.
Geometrisch gesehen wird an der Stelle (xi , yi ) die Tangente an diejenige Lösungskurve der DGl gelegt, die durch
5 Von
ihm war bereits bei der Interpolation im Zusammenhang mit der Funktion f (x) = 1/(1 + 25x2 ) die Rede.
Unterschied zu den von der Idee her wesentlich verschiedenen Mehrschrittverfahren, bei denen (xi+1 , yi+1 ) aus mehreren
Vorgängerwerten berechnet wird.
6 Im
115
diesen Punkt geht, und diese wird dann das Stück der Länge h (auf der x-Achse) verfolgt (ausgezogene Linie):
2.75
2.50
2.25
2.00
1.75
1.50
1.25
....
.....
.
.
.
.....
....
.
.
.
....
c.
.....
.
.
. . h = 1/4
.
.
....
..
.
.
.
.
.
..
....
.....
..
.
x ......
...ch = 1/2
.
e.....
.
.... ..
.
.
.
.
.
.
.
.
.
.
..
.... .
..
.....
.... .
..
.....
.
.
.
.
.
.
.
.
.
.
.....
..
......
.......c. h = 1
. . .... .....
......
.
.
c
.
.
.............
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
..
. . . .... ...
.....
............
.............
........ . . . . .... ..... .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
..
.............
........ . . . ....
........ . . . . ..... ..... ........................
.
.
.
.
.
.
.
..
..
....
........ . . ... ... .............
........ . . . ..... ................................
.
.
.
.
.
.
.
. .
.
......... . . c .............
.......... . . ..................c.........
.
.
.
.
.
.
.
.
.. . ..
......... . . .............
......................................
.
.
.
.
.
.
.
.
.
.
.......... ...............
...........c.....................
.
.
.
.
.
.
.
.
.
.
.
... ...
.......................
...................
.
.
.
.
.
.
.
.
.
.............
............
.
.
.
.
.
.
.
.
.
.
.
..
1.00
0.00
0.25
0.50
0.75
1.00
Der Näherungswert 2 zu 2.71828... ist nicht gerade sehr gut; das ist der groben Vorgehensweise geschuldet, die davon
ausgeht, daß der Anstieg y 0 (0) = 1 von x = 0 bis x = 1 festgeschrieben wird, während sich die Funktionskurve in
Wirklichkeit krümmt.
Durch eine Unterteilung bei x = 0.5 gibt man dem Verfahren die Möglichkeit, den Anstieg zwischenzeitlich zu
korrigieren:
y1 = y0 + h · f (x0 , y0 ) = y0 + h · y0 = 1 + 0.5 · 1 = 1.5 .
y2 = y1 + h · f (x1 , y1 ) = y1 + h · y1 = 1.5 + 0.5 · 1.5 = 2.25 .
Das ist kein umwerfender Erfolg, aber es geht in die richtige Richtung (gestrichelter Verlauf).
Mit h = 1/4 wird das Resultat noch ein wenig besser:
y1 = y0 + h · f (x0 , y0 ) = y0 + h · y0 = 1 + 0.25 · 1 = 1.25 .
y2 = y1 + h · f (x1 , y1 ) = y1 + h · y1 = 1.25 + 0.25 · 1.25 = 1.5625 .
y3 = y2 + h · f (x2 , y2 ) = y2 + h · y2 = 1.5625 + 0.25 · 1.5625 = 1.9531 .
y4 = y3 + h · f (x3 , y3 ) = y3 + h · y3 = 1.9531 + 0.25 · 1.9531 = 2.4414 .
Die gewonnenen Punkte sind punktiert verbunden.
Man erhält i. a. als Bild eine stückweise lineare Funktion, da man jeweils ein Stück der Tangentengerade verwendet.
Daher rührt der Name Polygonzugverfahren.7
Mit genauerer Rechnung erhält man
n
h = 1/n
1
10
100
1000
1
0.1
0.01
0.001
yn
2.000
2.593
2.704
2.716
000
742
814
924
yn − e
-0.718
-0.124
-0.013
-0.001
282
539
468
358
n · (yn − e)
-0.718
-1.245
-1.346
-1.357
28
39
79
90
7 Das ist die einfachste Methode, aus einer Reihe von Meßpunkten eine Kurve zu machen: man verbindet die Punkte durch
Geraden. Bekanntes Beispiel ist die klassische Fieberkurve über dem Krankenhausbett. Das ist übrigens eine sehr vernünftige
Methode, da sie dem Arzt - der im Rahmen einer Visite eine beträchtliche Menge an Patientendaten in Echtzeit verarbeiten muß
- eine schnelle Orientierung erlaubt. Die Frage der Resultatrepräsentation ist eher eine periphere Fragestellung der numerischen
Mathematik, aber ihre Bedeutung sollte man nicht unterschätzen.
Am Rande bemerkt: Eine solche Kurve ist eine lineare Splinefunktion. Im Unterschied zu den kubischen sind hier auf jedem
Teilabschnitt nur lineare Polynome definiert, die in den Stützstellen die vorgegebenen Werte annehmen. Man hat jetzt weniger
Freiheitsgrade, so daß nur noch die Stetigkeit der resultierenden Funktion gefordert werden kann.
Offensichtlich lokalisieren sich auch hier Störungen, und das noch ausgeprägter als im kubischen Fall: Die Änderung eines
Funktionswertes betrifft nur die beiden unmittelbar angrenzenden Abschnitte. Und die Funktion unter- und überschreitet nie
die Tabellenwerte.
116
Wie man an der letzten Tabellenspalte sieht ist der Fehler tatsächlich in etwa proportional zu 1/n = h; der Proportionalitätsfaktor ist rund -1.36.
In diesem Beispiel ist stets yi+1 = yi + h · yi = (1 + h)yi , also bilden die yi eine geometrische Folge mit dem Faktor
1 + h, und es ist yn = (1 + h)n y0 = (1 + h)n = (1 + n1 )n .
Der letzte Ausdruck konvergiert bekanntlich bei n → ∞ gegen e.
Etwas genauer gerechnet erhält man mit den bekannten Potenzreihendarstellungen
ex = 1 + x +
x2
+ ... ,
2!
ln(1 + x) = x −
x2
x3
+
+ ...
2
3
für den Fehler
yn − e =
1+
1
n
n
h
− e = exp n ln 1 +
1
n
i
1
1
+ . . . − e = e exp
+ ... − 1 = e
2n
2n
Dieses Ergebnis paßt sehr gut zu den Resultaten.
h
= exp 1 −
i
h
i
h
h − e = exp n
1+
1
1
− 2 + ...
n
2n
i
−e =
1
e
1.359 . . .
+ ... − 1 =
+ ... =
+ ... .
2n
2n
n
i
Man erkennt also: Eine Halbierung des Fehlers muß mit (ungefähr) der Verdoppelung des Aufwandes erkauft werden.
Diese Relation ist i. a. undiskutabel schlecht; für bessere Methoden muß etwas mehr geistige Arbeit investiert werden;
man vergleiche mit dem im Abschnitt ’Allgemeines’ Gesagten.
2. Heunsches Verfahren:
Das Problem beim Eulerschen Polygonzug war der Umstand, daß der Anstieg der Funktion nur zu Beginn jedes
Teilintervalles ermittelt und dann für dieses festgehalten wurde.
Wenn man schon mit einer linearen Funktion operieren will, so wäre es vernünftiger, nicht den Anstieg y 0 am (linken)
Rand des Intervalls von xi bis xi+1 zu nehmen, sondern den in der Mitte. Ein anderer sinnvoller Wert wäre das
arithmetische Mittel zwischen dem Anstieg links und dem im rechten Rand; das ergäbe die Formel
yi+1 = yi +
f (xi , yi ) + f (xi+1 , yi+1 )
·h.
2
Diese Formel hat einen entscheidenden Nachteil: In ihr steht der gesuchte Wert yi+1 auch auf der rechten Seite.
Man kann sie als Berechnungsvorschrift auffassen; dann muß man aber die Unbekannte yi+1 z. B. mit dem NewtonVerfahren aus dieser Gleichung berechnen. Dieser Aufwand lohnt sich zumeist nicht.
(Man kann yi+1 auch ganz einfach über eine Fixpunktiteration bestimmen; die Ableitung von
ϕ(y) = yi +
2
[f (xi , yi ) + f (xi+1 , y)]
ist
ϕ0 (y) =
h ∂f
(xi+1 , y) ,
2 ∂y
und es ist garantiert |ϕ0 (y)| ≤ q < 1, wenn nur h klein genug gewählt wird. Damit ist Kontraktion gewährleistet;
Selbstabbildung liegt auch vor.)
Reduzieren wir die Ansprüche ein wenig und begnügen wir uns auf der rechten Seite nicht mit dem echten Wert yi+1 ,
sondern mit einem Ersatz. Zu diesem Zweck wird yi+1 mit Hilfe der Euler-Formel geschätzt:
ȳi+1 = yi + h · f (xi , yi )
und dann ein besserer Wert yi+1 berechnet:
yi+1 = yi +
f (xi , yi ) + f (xi+1 , ȳi+1 )
·h.
2
Diese beiden Formeln beschreiben das Heunsche Verfahren.
Wenden wir es auf das schon betrachtete Beispiel y 0 = y, y(0) = 1 an.
Bei h = 1 wird ȳ1 = 1 + 1 · 1 (Euler-Schritt) und damit erhält man y1 = 1 + 1 · (1 + 2)/2 = 2.5.
Das ist eine Geanuigkeit, die beim einfacheren Euler-Verfahren nicht einmal mit vier Schritten erreicht wurde; dort
hatte sich der Wert 2.44 ergeben!8
Bei h = 1/2 läuft die Rechnung so ab:
ȳ1 = 1 + 0.5 · 1 = 1.5, y1 = 1 + 0.5 · (1 + 1.5)/2 = 1.625,
ȳ2 = 1.625 + 0.5 · 1.625 = 2.4375, y2 = 1.625 + 0.5 · (1.626 + 2.4375)/2 = 2.6406.
Das wurde vorher nicht einmal mit 10 Schritten erreicht.
Tabelliert ergibt sich das folgende Bild:
8 Man könnte nun auf die Idee kommen, den grob geschätzten Wert ȳ
i+1 durch das soeben berechnete yi+1 zu ersetzen und
den letzten Schritt noch einmal zu wiederholen. Das bringt jedoch nur unwesentliche Verbesserungen und keine höhere h-Potenz
im Fehlerterm.
117
n
h = 1/n
yn
yn − e
n2 · (yn − n)
1
2
4
8
16
32
64
128
256
512
1024
2048
1
1/2
1/4
1/8
1/16
1/32
1/64
1/128
1/256
1/512
1/1024
1/2048
2.500000000
2.640625000
2.694855690
2.711841239
2.716593522
2.717849674
2.718172512
2.718254338
2.718274936
2.718280103
2.718281397
2.718281720
-0.218281828
-0.077656828
-0.023426138
-0.006440590
-0.001688306
-0.000432154
-0.000109317
-0.000027490
-0.000006893
-0.000001726
-0.000000432
-0.000000108
-0.21828
-0.31063
-0.37482
-0.41220
-0.43221
-0.44253
-0.44776
-0.45040
-0.45172
-0.45238
-0.45272
-0.45288
Aus der letzten Spalte erkennt man, daß der Gesamtfehler jetzt etwa proportional zu h2 bzw. zu n−2 ist.
Betrachten wir den Fehler pro Schritt; typischerweise im ersten. Zu diesem Zweck wird die Funktion f (x, y) an der
Stelle x = x0 und y = y0 in einen Taylor-Ausdruck in beiden Variablen entwickelt:
f (x, y) = f (x0 , y0 ) + fx (x0 , y0 )(x − x0 ) + fy (x0 , y0 )(y − y0 )+
+
1 fxx (x0 , y0 )(x − x0 )2 + 2fxy (x0 , y0 )(x − x0 )(y − y0 ) + fyy (x0 , y0 )(y − y0 )2 ) + . . . .
2!
Damit wird
y1 = y0 +
h
h
[f (x0 , y0 ) + f (x1 , ȳ1 )] = y0 + [f (x0 , y0 ) + f (x0 + h, y0 + hf (x0 , y0 ))] =
2
2
h
= y0 +
f (x0 , y0 ) +
2
f (x0 , y0 ) + fx (x0 , y0 )h + fy (x0 , y0 ) · hf (x0 , y0 ) +
h2 2
+fxy (x0 , y0 ) · h f (x0 , y0 ) +
f (x0 , y0 ) + . . .
2
h2
fxx (x0 , y0 )+
2
2
=
h2
[fx (x0 , y0 ) + fy (x0 , y0 ) · f (x0 , y0 )] + . . . =
2
h2 h2 df
·
(x0 , y0 ) + . . . =
= y0 + h · y 0 (x0 ) +
fx (x0 , y0 ) + fy (x0 , y0 ) · y 0 (x0 ) + . . . = y0 + h · y 0 (x0 ) +
2
2 dx
h2 00
= y0 + h · y 0 (x0 ) +
· y (x0 ) + . . . .
2
Man erkennt, daß die Darstellung von y1 bis zum Term mit h2 mit der Taylor-Formel für y(x1 ) = y(x0 + h)
übereinstimmt. Eine Abweichung tritt erst im nächsten Summanden auf, und der ist proportional zu h3 .
Bis zu einem gewissen x∗ macht man proportional h−1 Schritte, und das läßt einen Gesamtfehler der Ordnung h2
erwarten.
Diese Aussage kann man mathematisch exakt formulieren und beweisen; darauf sei hier verzichtet. Die dafür nötigen
Voraussetzungen werden in der Praxis selten überprüft.
= y0 + h · f (x0 , y0 ) +
Resultat: Beim Heunschen Verfahren bewirkt eine Halbierung der Schrittweite eine Verdoppelung des Aufwandes,
aber eine (ungefähre) Viertelung des Fehlers.
Damit ist es wesentlich effektiver als das eingangs dargestellte Polygonzugverfahren. Allerdings benötigt es pro Schritt
zwei Auswertungen von f (x, y) statt einer.9
Das Heunsche Verfahren ist immer noch relativ grob, aber bereits praktisch verwendbar, wenn man sich schnell
und mäßig genau einen Eindruck von der Lösung eines Anfangswertproblems verschaffen will. Es ist sehr einfach zu
programmieren.
3. Die klassische Runge-Kutta-Formel
Allgemein gilt: Je genauer ein Verfahren, desto öfter muß man pro Schritt f (x, y) berechnen. Das sorgt irgendwann
für einigen Programmieraufwand.
Ein recht guter Kompromiß zwischen Genauigkeit und Preis wurde bei der klassischen Runge-Kutta-Formel erreicht,
9 Bisweilen wird die Meinung geäußert, bei Schrittweiten von h > 1 wäre die Methode von Euler vorzuziehen, da dann h
weniger ist als h2 .
Man akzeptiere die Regel aber so, wie sie formuliert wird: Bei Halbierung ... das kann bedeuten, h = 1000 wird zu h = 500
halbiert, usw.
Die absolute Größe der Schrittweite ist unwesentlich; sie muß nur klein im Sinne des betrachteten Problems sein. 0.1 Stunde ist
mehr als 10 Millisekunden, obwohl der erste Wert kleiner als 1 ist, und der zweite größer. Modelliert man die Kontinentaldrift,
so kann die Zeitschrittweite vielleicht 1 000 Jahre betragen; im Hochfrequenzbereich ist die Situation ganz anders.
118
die sich deshalb seit rund 100 Jahren in der Praxis einiger Beliebtheit erfreut. Bei ihr werden in jedem Schritt vier
Hilfswerte k1 bis k4 berechnet. Aus diesen Hilfswerten ergibt sich letztlich der neue Wert yi+1 :
k1 = h · f (xi , yi ) ,
k2 = h · f (xi + h/2, yi + k1 /2) ,
k3 = h · f (xi + h/2, yi + k2 /2) , k4 = h · f (xi + h, yi + k3 ) ,
k1 + 2k2 + 2k3 + k4
.
yi+1 = yi +
6
0
Wenden wir diese Formel auf das betrachete Beispiel y = y, y(0) = 1 an; sei wieder h = 1:
k1 = 1 · 1 = 1 , k2 = 1 · (1 + 1/2) = 1.5 , k3 = 1 · (1 + 1.5/2) = 1.75 , k4 = 1 · (1 + 1.75) = 2.75 ,
y1 = 1 +
1 + 2 · 1.5 + 2 · 1.75 + 2.75
= 2.708 333 .
6
Das ist eine Abweichung von nur 0.366% !
Als Tabelle resultiert
n
h = 1/n
yn
yn − e
n4 · (yn − n)
1
2
4
8
16
32
64
128
256
1
1/2
1/4
1/8
1/16
1/32
1/64
1/128
1/256
2.70833333333
2.71734619141
2.71820993920
2.71827684442
2.71828150034
2.71828180741
2.71828182713
2.71828182838
2.71828182845
-0.00994849513
-0.00093563705
-0.00007188926
-0.00000498404
-0.00000032812
-0.00000002105
-0.00000000133
-0.00000000008
-0.00000000001
-0.00995
-0.01497
-0.01840
-0.02041
-0.02150
-0.02207
-0.02236
-0.02251
-0.02259
Der Gesamtfehler ist jetzt proportional zu h4 ; er verringert sich also bei Halbierung etwa auf ein Sechzehntel.
Die Überprüfung dieses Faktes erfordert eine Taylor-Zerlegung bis zur vierten Potenz einschließlich; das sind 15
Summanden mit insgesamt 14 partiellen Ableitungen. Diese Rechnung ist sehr schreibintensiv und erfordert die
Definition spezieller abkürzender Regeln zu ihrer Bewältigung.
Beim Vergleich der drei letzten Tabellen sieht man, daß nicht nur Ordnung der Fehlerabnahme besser wird; darüber
hinaus wird auch der Proportionalitätsfaktor betragsmäßig mit der Verbesserung der Methode immer kleiner. Die
letzte Fußnote muß man auch unter diesem Aspekt sehen.
Die allgemeine Gestalt der Runge-Kutta-Methoden:
Zu diesen gehören auch die Eulersche Polygonzugmethode und das Heunsche Verfahren; diese sind Runge-KuttaMethoden erster oder zweiter Ordnung, was sich auf die h-Potenz der Darstellung ihres Gesamtfehlers bezieht.
In der allgemeinen Form haben Runge-Kutta-Methoden die Gestalt
yi+1 = yi +
s
X
b j kj ,
kj = f
xi + cj h, yi +
s
X
!
ajl kl
, j = 1, 2, . . . , s, .
l=1
j=1
Sie sind damit beschrieben durch die Wahl von s, der Anzahl der Funktionswertberechnungen f (x, y) pro Schritt,
und die Parameter ajl , bj und cj . Diese kann man in eine Tabelle anordnen:
c1
c2
..
.
cs
a11
a21
..
.
a
b1
a12
a22
..
.
a
b2
a13
a23
..
.
a
b3
...
...
..
.
...
...
a1s
a2s
..
.
a
bs
Euler: yi+1 = y1 + h · f (xi , yi ) : s = 1, b1 = 1, c1 = 0, a11 = 0 .
Heun: yi+1 = yi + 0.5h · f (x0 , y0 ) + 0.5h · f (x0 + h, yi + hf (x0 , y0 ))
Hier ist offenbar s = 2, b1 = b2 = 0.5, k1 = h · f (x0 , y0 ), k2 = h · f (x0 + h, yi + k1 ), also c1 = 0, c2 = 1, a11 = a12 =
a22 = 0 und a21 = 1.
Zur klassischen Runge-Kutta-Formel gehört die Tabelle
0
1/2
1/2
1
0
1/2
0
0
1/6
0
0
1/2
0
2/6
119
0
0
0
1
2/6
0
0
0
0
1/6
Wenn bei der Berechnung eines kj nie ein späterer Wert km mit m ≥ j (der in diesem Moment ja noch nicht bekannt
ist) benutzt wird, so nennt man das Verfahren explizit, ansonsten implizit.
Die drei dargestellten Verfahren waren alle explizit.
Ist der noch unbekannte Wert km nur der just zu berechnende, also j = m, so heißt die Methode semiimplizit.
Bei impliziten oder semiimpliziten Varianten muß man also in jedem Schritt eine (i. a. nichtlineare) Gleichung oder
ein nichtlineares Gleichungssystem lösen.10 Bei expliziten Methoden sind nur ajl mit l < j von Null verschieden, also
nur Elemente unter der Hauptdiagonale der von den ajl gebildeten Matrix.
Im Falle eines semiimpliziten Verfahrens dürfen Elemente auf der Hauptdiagonale ungleich Null sein, aber nicht
darüber.
Betrachten wir als Beispiel die möglichen expliziten Verfahren mit s = 2:
yi+1 = yi + b1 k1 + b2 k2 ,
k1 = hf (xi + c1 h, yi ) , k2 = hf (xi + c2 h, yi + a21 k1 )
Schreiben wir die Taylor-Zerlegung für yi+1 auf, wobei gleich ausgenutzt wird, daß die Methode explizit sein soll.
Es wird also bei der Berechnung von k1 nur yi verwendet, und bei der Ermittlung von k2 nur yi und k1 .
Das Ergebnis wird nach h-Potenzen sortiert; dabei begnügen wir uns mit h0 , h1 und h2 ; in der Herleitung werden
die dritten Potenzen mit angegeben, um anzudeuten, wie eine genauere Rechnung ablaufen würde:
yi+1 = yi + b1 k1 + b2 k2 = yi + b1 hf (xi + c1 h, yi ) + b2 hf (xi + c2 h, yi + a21 hf (xi + c1 h, yi )) =
c21 h2
· fxx (xi , yi ) + . . . +
2
= yi + b1 h f (xi , yi ) + c1 h · fx (xi , yi ) +
+b2 h f (xi , yi ) + c2 hfx (xi , yi ) + a21 k1 · fy (xi , yi ) +
c22 h2
fxx (xi , yi ) + c2 h · a21 k1 · fxy (xi , yi )+
2
a2 k2
+ 21 1 fyy (xi , yi ) + . . .
2
=
c2 h2
= yi + b1 h f (xi , yi ) + c1 h · fx (xi , yi ) + 1 · fxx (xi , yi ) + . . . +
2
c 2 h2
+b2 h f (xi , yi ) + c2 hfx (xi , yi ) + a21 h f (xi , yi ) + c1 h · fx (xi , yi ) + 1 · fxx (xi , yi ) + . . .
2
c22 h2
c2 h2
fxx (xi , yi ) + c2 h · a21 h f (xi , yi ) + c1 h · fx (xi , yi ) + 1 · fxx (xi , yi ) + . . .
2
2
+
· fy (xi , yi )+
#
2
a2 h2
c 2 h2
+ 21 fyy (xi , yi ) f (xi , yi ) + c1 h · fx (xi , yi ) + 1 · fxx (xi , yi ) + . . .
2
2
· fxy (xi , yi )+
+ ...
=
= yi + h(b1 + b2 )f (xi , yi ) + h2 [b1 c1 · fx (xi , yi ) + b2 c2 · fx (xi , yi ) + b2 a2 1 · f (xi , yi ) · fy (xi , yi )] + . . . .
Diese Entwicklung soll übereinstimmen mit der Taylor-Formel für y(x+ 1) = y(xi + h):
y(xi + h) = yi + h · yi0 +
h2 00
yi + . . . .
2
Es ist yi0 = f (xi , yi ) und yi00 = fx (xi , yi ) + fy (xi , yi ) · yi .
Der Vergleich der beiden Formeln ergibt sofort - entsprechend der zu fordernden Überinstimmung von (b1 +b2 )f (xi , yi )
und yi0 für h1 die Bedingung b1 + b2 = 1.
Bei h2 muß
b1 c1 · fx (xi , yi ) + b2 c2 · fx (xi , yi ) + b2 a2 1 · f (xi , yi ) · fy (xi , yi ) =
1 00
1
yi = (fx (xi , yi ) + fy (xi , yi ) · yi0 )
2
2
sein. Das erfordert b1 c1 + b2 c2 = 1/2 und b2 a21 = 1/2. Man erhält letztlich drei Gleichungen
b1 + b2 = 1 ,
b1 c1 + b2 c2 =
1
,
2
b2 a21 =
1
2
für die fünf Parameter b1 , b2 , c1 , c2 und a21 . Da sind noch zwei Freiheitsgrade, über die man verfügen kann.
Beispielsweise kann man nun noch den Term mit h3 betrachten und versuchen, ihn in einem gewissen Sinne möglichst
10 Das ist wieder ein Beispiel für die Verschachtelung numerischer Verfahren.
Angenommen, es ist ein nichtlineares Gleichungssystem, das mit dem Newton-Verfahren gelöst wird. Im Anbetracht der kleinen
Schrittweite h werden die zu berechnenden Wert kj denen in den vorigen Schritten ähneln. Wenn man diese also gespeichert
(0)
(0)
(0)
hat, so kann man ein Interpolationspolynom durch einige letzte Werte legen und einen Startvektor (k1 , k2 , . . . , ks ) durch
Extrapolation ermitteln. Mit Hilfe der Differenzenapproximation wird die Matrix der partiellen Ableitungen berechnet. Das
lineare Gleichungssystem wird gelöst. Die Lösung wird bewertet und das Newton-Verfahren ggfs. z. B. mit dem Verfahren vom
Goldenen Schnitt gedämpft.
120
nahe an yi000 /3! zu bringen (ganz identisch kann man ihn mit diesen zwei freien Parametern nicht machen). Hier sei
der Weg der Einfachheit gewählt: Es möge k1 in xi berechnet werden und k2 in xi+1 , damit ist c1 = 0 und c1 = 1.
Das System wird zu
1
1
b1 + b2 = 1 , b2 =
, b2 a21 =
2
2
mit der Lösung b1 = b2 = 1/2 und a21 = 1. Das ist gerade das Heunsche Verfahren, s.o..
In Anbetracht dieser Herleitung kommt vermutlich Sympathie für die plausible Überlegung auf, nach der die Heunsche
Formel konstruiert wurde. Allerdings zeigt dieser Weg, wie im Prinzip Runge-Kutta-Formeln mit beliebigen Werten
für s generiert werden können. Man braucht aber sehr bald ausgeklügelte Computeralgebra.
7.4
Schrittweitensteuerung
Wenn ein Archäologe ein wichtiges Objekt in etwa sechs Meter Tiefe vermutet, so wird er vielleicht vier Meter Erdreich
mit dem Bagger abtragen, dann anderthalb Meter mit der Schaufel, um anschließend mit dem Spachtel und zuletzt
mit dem Pinsel zu operieren.
Es wäre Unfug, alles mit dem Bagger oder alles mit dem Pinsel zu machen.
Auf unsere Verhältnisse angewandt: Es ist nicht zwingend, ein Anfangswertproblem mit konstanter Schrittweite h für
alle Schritte zu berechnen.
Überhaupt: Wie kann man die Schrittweite h vernünftig wählen? Ist sie zu groß, so wird das Resultat ungenau; setzt
man sie dagegen zu klein an, so sind zu viele Rechenschritte zu machen, und man verliert - ggfs. sehr wertvolle - Zeit.
(Man denke an den schon mehrmals erwähnten Steuerrechner im Echtzeitbetrieb!) Und wählt man h viel zu klein,
so wird die Rechnung so umfangreich, daß man irgenwann mehr Rundungsfehler als substantielle Information hat.
Weiter muß beachtet werden, daß der schönste Hinweis zur Wahl der Schrittweite nichts nützt, wenn er sich nicht
programmieren läßt.
Es gibt ausgeklügelte Strategien zur Schrittweitenwahl; hier sollen nur einige Basisideen skizziert werden.
Die folgende Variante ist primitiv, aber bereits recht wirksam:
Angenommen, man will y(x) von x0 bis x∗ > x0 tabellieren, und der Gesamtfehler soll (absolut) nicht größer als
ε > 0 werden.
Gehen wir der Einfachheit halber vom Heunschen Verfahren aus; dort ist der Fehler pro Schritt etwa proportional
zu h3 .
(1)
Wir wählen irgendein geeignet erscheinendes h > 0 und berechen einen Näherungswert y1 . Danach wird h halbiert
und man wiederholt die letzte Rechnung mit zwei Schritten, wodurch man in denselben x- Wert gelangt. Man bekommt
(1)
(2)
y2 und vergleicht diesen Wert mit y1 .
(2)
(1)
Es gilt (mit dem ursprünglichen h) genähert y1 ≈ y(x0 + h) + Ah3 und y2 ≈ y(x0 + h) + 2A(h/2)3 , also A ≈
(2)
(1)
4(y1 − y2 )/3h3 .
(2)
(1)
(2)
(1)
Damit kann man die Fehler der Rechnungen schätzen; sie betragen etwa 4(y1 − y2 )/3 oder (y1 − y2 )/3.
∗
Will man den Gesamtfehler gleichmäßig auf die Länge von x0 bis x verteilen, so darf man sich auf dem Abschnitt
der Länge h höchstens den Anteil ε · h/(x∗ − x0 ) leisten. Mit dieser Größe werden die obigen Werte verglichen.
Sind sie (betragsmäßig) größer, so muß h verkleinert werden. Man kann es erneut halbieren und probieren usw., oder
man rechnet
s
3ε
ε·h
4 (1)
(2)
3
=⇒ h =
.
|y − y2 | · h = ∗
(1)
(2)
3 1
x − x0
4(x∗ − x0 ) · |y1 − y2 |
Zur Sicherheit kann man den letzten Wert noch ein wenig verringern.
Liegt dagegen der geschätzte Fehler deutlich unter der zulässigen Toleranz, so wird h vergrößert.
121
Beispiel: Im Moment t = 0 wird der Schalter S geschlossen; der bis dahin leere Kondensator C = 50µF wird
über den Widerstand R1 = 10kΩ mit der Spannung
U0 = 200V geladen.
Bei einer Spannung von 160V zündet die Glimmlampe;
der Widerstand R2 dieses Zweiges, der bis dahin Unendlich war, fällt auf 100Ω.
Bei 140V verlöscht die Glimmlampe wieder.
Gesucht ist die zeitabhängige Ladung Q(t) des Kondensators bis zum Moment des zweiten Zündens der Glimmlampe.
..................................................
..........................
................................................................................
...
...
...................................................
....
.
...
...
...
.
...
R1
....
..............................
...
.
.
.
...
...
...
..
....
.
..
.
...
....
...
.... ........................r...... ....
....
...
..
...
.
.
...
....
..... ... .....
...
..........................
....
...
....
....
...
...
....
....
...
.................
....
... ...
... C
... ...
.......... U0
...................
.....................
.....................
... ...
...
... ...
....
..
.. ... R2
....
...
... ...
...
... ...
....
...
... ...
....
...
.................
....
...
..
.
...
....
...
.
.
.
.
...
....
....
...
.
S
.
...
.
.
................................................................................
.................................................
Nach dem Schließen des Schalters gilt für die Ladung Q(t) das Anfangswertproblem
Q̇ =
Q
U0
−
,
R1
R1 C
Q(0) = 0 .
Bei Q(t)/C = Uz = 160V zündet die Glimmlampe und die DGl modifiziert sich zu
Q̇ =
R1 + R2
U0
−
Q
R2
R1 R2 · C
Man beachte folgende Besonderheiten:
• Beide Dgl sehen aus wie lineare; in Wirklichkeit ist es aber nur eine DGl mit unstetigen Koeffizienten und
rechter Seite.
• Welcher Fall eintritt hängt von der Kondensatorspannung und damit von Q(t) ab; die Gleichung ist folglich
nichtlinear, obwohl das nicht explizit zu erkennen ist.
• Ob die Glimmlampe bei z. B. 150V leitet oder sperrt hängt nicht in erster Linie von dieser Spannung ab,
sondern von ihrer Vorgeschichte, also davon, von welcher Seite man sich diesen 150V nähert. - Das ähnelt der
Hysteresiskurve.
• Man könnte das erste Anfangswertproblem lösen, bis 160V erreicht sind, und die dann vorliegende Ladung
als Anfangswert für ein zweites Problem mit der zweiten DGl nehmen. Problematisch ist, daß man diesen
Zeitpunkt nicht kennt;11 er ergibt sich erst im Laufe der Rechnung.
Es ist für den Menschen bequemer, sich nicht darum zu kümmern, und die Arbeit - d. h. das Erkennen des
Umschaltmoments und die dort notwendige Änderung der Schrittweite - an das Programm zur Lösung der DGl
zu delegieren.
Im ersten Fall wird die Veränderung beschrieben durch eine Exponentialfunktion e−λt mit
λ =
1
1
1
=
=
.
R1 C
0.5s
104 Ω · 50 · 10−6 As · V −1
Die primäre Ladung des Kondensators erfolgt also im Verlaufe einiger Sekunden; die Differenz zum Endzustand halbiert sich alle ln 2 · 0.5s = 0.35s.
Die Entladung über die Glimmlampe zeichnet sich durch einen Zeitfaktor aus, der aus dem berechneten durch Multiplikation mit (R1 + R2 )/R1 = 101 hervorgeht; sie ist also wesentlich schneller.
Damit ist schon klar, daß man nicht jeden der beiden Prozeßteile mit derselben Zeitschrittweite τ rechnen kann - ein
’kleiner Zeitabschnitt’ ist in jedem Fall etwas ganz anderes.
Der Spannungsverlauf am Kondensator ist der folgende:
11 Es
wird hier natürlich konsequent ignoriert, daß sich diese DGl leicht geschlossen lösen lassen.
122
UZ
160 ..... ..... ..... ..... ..... ..... ..... ..... ..... ..... ..... ..... ..... ..... ..... ..... ..... ..... ..... ..... ..... ..... ..... ..... ..... ..... ..... ..... ......................................... ..... ..... ..... ..... ......................................... ..... ..... ...
140
120
100
80
60
40
20
0
...
...
...
.........
... ............................
... .....
...............
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
..... ..... ..... ..... ..... ..... ..... ..... ..... ..... ..... ..... ..... ..... ..... ..... ..... ..... ..... ..... ..... ..... ............................ ..... ..... ..... ..... ..... ..... ............. ..... ..... ..... ..... ..... ..... .................... ..... ...
.
.
UL
...........
...........
.
.
.
.
.
.
.
.
.
.
..........
.........
.
.
.
.
.
.
.
.
.
........
........
.
.
.
.
.
.
.
..
.......
.......
.
.
.
.
......
.....
.
.
.
.
.
.....
....
.
.
.
....
.....
.
.
.
.
....
....
.
.
.
.
....
....
.
.
.
...
....
0.0
0.1
0.2
0.3
0.4
0.5
0.6
0.7
0.8
0.9
1.0
Das Runge-Kutta-Verfahren arbeitet nur mit lokaler Information zwischen xi und xi+1 ; in einem Programm kann
man noch ggfs. gespeicherte frühere Werte für die Betrachtung nutzen, zukünftige sind aber unbekannt.
Das Lösungsverfahren für das Anfangswertproblem verhält sich wie ein Kraftfahrer (dem man allerdings nicht nacheifern sollte), der im dichten Nebel unterwegs ist und nur den Mittelstreifen unmittelbar vor sich sieht. Damit es
nicht so dramatisch wird: Nehmen wir an, er macht die Fahrt am Fahrtrainer, d. h. vor einem Bildschirm.
Das Rechenverfahren:
Der Kraftfahrer:
Es startet mit einer moderaten Schrittweite.
Er startet mit einer moderaten Geschwindigkeit.
Die Kurve der Lösung ist glatt und nur wenig gekrümmt.
Der Fehler ist klein.
Die Straße ist glatt und nur wenig gekrümmt. Es gibt
keine Probleme.
Es kann also die Schrittweite vergrößern, und tut dies
auch.
Er kann also die Geschwindigkeit vergrößern, und tut dies
auch.
Plötzlich ändert die Lösung stark ihr Verhalten.
Plötzlich macht die Straße eine Biegung.
Der Fehler, der mit der bisherigen Schrittweite resultiert,
wird unvertretbar groß.
Die von den Straßenrändern vorgegebene Toleranz wird
deutlich überschritten.
Das Programm kehrt zum letzten korrekten Wert zurück,
halbiert die Schrittweite und startet erneut in den Problembereich.
Der Fahrer spult den Film bis vor die Kurve zurück und
versucht, sie mit halbierter Geschwindigkeit zu durchfahren.
Nach einigen Schritten - zu großer Fehler.
Etwas später, aber wieder im Straßengraben.
Es wird wiederum zurückgegangen - vielleicht nicht soweit wie beim erstenmal - und nach erneuter Halbierung
der Schrittweite der nachste Versuch gestartet.
Es wird wiederum zurückgegangen - vielleicht nicht soweit wie beim erstenmal - und nach erneuter Halbierung
der Geschwindigkeit der nachste Versuch gestartet.
Diesmal klappt’s; nach einigen Schritten ’beruhigt’ sich
die Lösung und wird wieder glatt.
Diesmal klappt’s; nach der Kurve wird die Straße wieder
halbwegs gerade und scheint es auch bleiben zu wollen.
Die Schrittweite kann wieder vergrößert werden...
Er kann wieder Gas geben...
Anfangswertprobleme mit einer solchen Spezifik: ’Langsame Veränderung und dann plötzliches Kippen’ - sind in Naturwissenschaft und Technik keine Seltenheit. Mechanische Beispiele kann sich jeder selbst vorstellen; in der Chemie
gibt es Reaktionen, bei denen ein entstehender Stoff ab einer bestimmten Konzentration seine eigene Bildung katalytisch beschleunigt, und daß bei langsamer Vermehrung der Menge eines Uranisotops im Behälter auf einmal ein
dramatischer Prozeß einsetzen kann ist auch bekannt.
Eine zweite Idee zur lokalen Fehleranalyse und Schrittweitensteuerung besteht in der Verwendung sogenannter eingebetteter Runge-Kutta-Verfahren.
Erinnern wir uns an die Methode von Heun: Dort wurde ein neuer Funktionswert am Ende des laufenden Schrittes,
d. h. in xi+1 , mit Hilfe der Euler-Formel geschätzt: ȳi+1 = yi + h · f (xi , yi ).
Das ist ein gröberer12 Wert als das letztlich berechnete yi+1 , aber beide müssen, da sie Näherungswerte zum selben
Wert y(xi+1 ) sind, nahe beieinander liegen.
12 Das heißt: Dieser Wert ist in der Regel ungenauer als der mit dem exakteren Verfahren von Heun berechnete. Im konkreten
Fall muß er nicht schlechter sein, er kann sogar besser ausfallen. - Wenn die Kurve der Funktion y(x) eine Biegung macht
und die Tangente durch (x0 , y0 ) im Punkt (x∗ , y(x∗ )) schneidet, so würde ein Euler-Schritt mit der möglicherweise großen
Schrittweite h = x∗ − x0 nichtsdestoweniger den exakten Wert ergeben! Aber das ist Zufall.
123
Durch ihren Vergleich kann man nun eine Aussage über die Güte der beiden Näherungswerte gewinnen.
Der Begriff ’eingebettet’ bezieht sich auf den Umstand, daß der eine Wert bei der Rechnung quasi nebenbei anfällt
und nicht mühsam berechnet werden muß; insbesondere sind keine zusätzliche Auswertungen der Funktion f (x, y)
notwendig.
Die folgende explizite Runge-Kutta-Formel ist ein Verfahren mit dem Gesamtfehler ∼ h2 :
0
1/2
1/2
0
1/2
0
0
0
0
1/2
0
0
0
0
1
=⇒
k1 = hf (xi , yi ), k2 = hf (xi + h/2, yi + k1 /2), k3 = hf (xi + h/2, yi + k2 /2),
yi+1 = yi + k3
Angewandt auf das Testproblem y 0 = y, y(0) = 1 ergibt sich:
n
h = 1/n
yn
yn − e
n2 · (yn − n)
1
1
4
8
16
32
64
128
1
1/2
1/4
1/8
1/16
1/32
1/64
1/128
2.750000
2.743164
2.727870
2.721207
2.719087
2.718493
2.718336
2.718295
0.031718
0.024882
0.009589
0.002925
0.000805
0.000211
0.000054
0.000014
0.0317
0.0995
0.1534
0.1872
0.2061
0.2161
0.2213
0.2239
Diese Methode ist aber eingebettet in die klassische Runge-Kutta-Formel vierter Ordnung:
0
1/2
1/2
1
0
1/2
0
0
1/6
0
0
1/2
0
2/6
0
0
0
1
2/6
0
0
0
0
1/6
(
=⇒
k1 = hf (xi , yi ), k2 = hf (xi + h/2, yi + k1 /2),
k3 = hf (xi + h/2, yi + k2 /2), k4 = hf (xi + h, yi + k3),
yi+1 = yi + (k1 + 2k2 + 2k3 + k4 )/6
,
d. h. wenn man dieses Verfahren rechnet, so kann man sich mühelos einen zweiten Näherungswert zu y(xi+1 ) in der
Form ỹi+1 = yi + k3 beschaffen - dazu bedarf es nur dieser einen Addition! Dieser ist mit yi+1 zu vergleichen.
Weitere Einzelheiten entnehme man der Literatur.
Gute professionelle Software enthält in der Regel Programme mit automatischer Schrittweitensteuerung; vom Nutzer
wird nur eine Aussage über den zulässigen Gesamtfehler erwartet.
Eine praktische Bemerkung noch: Angenommen, man will die Lösung y(x) für 0 ≤ x ≤ 1 mit der Schrittweite
0.01 als Tabelle ausgedruckt bekommen, so muß der Modul zur Schrittweitenbestimmung außer auf den Fehler auch
darauf achten, daß er im nächsten Tabellenwert ’aufsetzt’. Er kann also, wenn er in x = 0.38834 war, nicht mit der
Schrittweite h = 0.00217 zu 0.39051 weiterrechnen, sondern muß h = 0.00166 wählen, um in 0.39000 zu landen.
7.5
Spezielle Verfahren für spezielle Probleme
Der Plural ist etwas irreführend; es wird nur ein spezielles numerisches Problem betrachtet. Das reicht aber hoffentlich
hin, um den Umstand zu motivieren, daß universelle Verfahren, wie sie eingangs geschildert wurden, nicht der Weisheit
letzter Schluß sein können.
Betrachten wir als Beispiel die Entladung eines Kondensators C = 50µF über einen Widerstand R = 10kΩ13 bei
Anwesenheit einer kleinen Induktivität L = 0.1H.
Die Differentialgleichung für den Strom ist
L
d2 i
di
1
+R + i
dt
C
dt2
=
0.
Im Moment t = 0 wird ein Schalter geschlossen; der Strom war da i(0) = 0. Er beginnt nun aus dem mit 200V
geladenen Kondensator zu fließen. Nahe t = 0 liegen also praktisch 200V an, von denen aber die Sebstinduktionsspannung L di abzuziehen ist. Würde die Kondensatorspannung von 200V bestehen bleiben, so würde letztlich ein
dt
Strom I ∗ = 200V /10kΩ = 20mA fließen. Durch die Induktivität stellt er sich gemäß i∗ (t) = 20mA · [1 − exp(−Rt/L)]
ein.
Für den sich entladenden Kondensator sind die Verhältnisse im Anfangsmoment dieselben, damit ist di/dt = di∗ /dt =
20mA · R/L = 20mA · 104 Ω/0.1H = 2 000 A/s.
13 Aus
Kostengründen wurden die Teile des letzten Beispiels recycelt.
124
Machen wir aus der DGl 2. Ordnung ein System 1. Ordnung,14 sei di/dt = p, so wird wegen
d2 i
dt2
also
di =
dt
dp
=
dt
=
−
i
R di
·
−
L dt
LC
p,
i(0) = 0
p(0) = 2 · 106
− P p − i = −105 (p + 2i) ,
L
LC
Die Wahl des Anfangswertes von p zeigt an, daß i in mA gemessen werden soll; der Wert müßte unter 20mA bleiben.
Die Zeit wird in Sekunden gemessen.
Nehmen wir eine Hundertstelsekunde als Zeitschrittweite τ , und machen wir einen Schritt mit dem Euler-Verfahren:
i1 = i0 + τ · p0 = 0 + 0.01 · 2 · 106 = 2 · 104 = 20 Ampere !!!
p1 = p0 − 105 (p0 + 2i0 ) = 2 · 106 − 2 · 1011 ≈ −2 · 1011
Das Ergebnis ist totaler Unfug: Die Stromstärke ist - für die gegebenen Verhältnisse - riesig und nimmt rasant ab.
(Da sie aber viel zu gewaltig ist bedeutet letzteres ’einen Schritt in die richtige Richtung’.)
Offenbar war wohl die Schrittweite zu groß; verringern wir sie auf ein Zehntel der benutzten, und dann nochmals, ...
. Jedenfalls erhält man für die ersten drei Schritte die folgende Tabelle:
τ
0.001
0.000 1
0.000 01
0.000 001
i1
i2
i3
p1
p2
p3
2000.000
200.000
20.000
2.000
-196000.031
-1600.000
20.000
3.800
19405604.000
14599.603
20.000
5.420
-198000016
-18000000
-0
1800000
19601602560
161996016
-40
1620000
-1940519518208
-1457932160
-40
1457999
Bei τ = 10−6 s werden die Werte vernünftig15 - die Stromstärke wächst und wird dabei flacher; ihre Ableitung nimmt
dementsprechend ab, bleibt aber positiv. Damit könnte man rechnen.
Das wird aber aufwendig - der interessante Teil des Prozesses geht über einige Sekunden, und pro Sekunde muß man
bei τ = 10−6 gerade eine Million Schritte machen.
Vielleicht sind es später weniger? Der Prozeß klingt ab und wird immer glatter, da kann man doch die Schrittweite
hochfahren?
Leider nicht; die Ursache für den Fehler liegt hier in einem anderen Effekt.
Nun war das Euler-Verfahren als recht grob vorgestellt worden; was ergibt die Methode von Heun? - Die betreffende
Tabelle wird (zwei Werte aus Platzgründen weggelassen)
τ
0.001
0.0001
0.00001
0.000001
i1
i2
i3
p1
p2
p3
-98000.016
-800.000
10.000
1.900
-480376544
-33598.402
15.000
3.619
-2354230591488
-1378273.875
17.500
5.176
9801801728
81998000
999980
1810000
48036696817664
3361772288
499970
1638049
...
...
249965
1482434
Das Ergebnis ist dasselbe, und auch die klassische Runge-Kutta-Formel würde erst bei τ < 10−5 s einen vernünftigen
Verlauf ergeben.
Um die Ursache zu verstehen betrachten wir einmal die allgemeine Lösung der DGl y 00 + 105 y 0 + 2 · 105 y = 0. Das
charakteristische Polynom hat zwei negative reelle Nullstellen, die um Größenordnungen auseinanderliegen: λ1 liegt
bei -2, und λ2 bei −105 . Die Zeit in Sekunden gemessen ist damit allgemein
5
i(t) = C1 e−2t + C2 e−10 t .
Der erste Summand beschreibt das Zusammenspiel von Kondensator und Widerstand und damit einen relativ langsamen Prozeß, der dafür sorgt, daß man in der Größenordnung von Sekunden denken muß. Der zweite bringt die
recht unbedeutende Induktion ins Spiel, die hier nur außerordentlich kurzlebig und bereits nach einer Zehntausendstel
Sekunde praktisch abgeklungen ist (e−10 = 0.0000454).
’Thou are the man!’ - wie in der Erzählung von E. A. Poe greift diese Leiche aus ihrem Sarg heraus in das Geschick
der Lebenden ein; allerdings nicht nur einmal, sondern bei der DGl dauernd.
Am besten läßt sich die Sache beim Euler-Verfahren begreifen: Die Werte im i-ten Schritt sind die Anfangswerte
für den nächsten; mit ihnen beginnt die Überlagerung von einem sehr schnellen Abklingen (gestrichelt) und einem
14 Wie
schon eingangs gesagt sind alle diese Lösungsverfahren für einzelne DGl und für Systeme von DGl identisch!
werden sie bereits mehr oder weniger vernünftig, sobald τ < 10−5 wird; bei der gewählten Unterteilung der
Schrittweiten ist das aber erst bei 10−6 der Fall.
15 Eigentlich
125
langsamen Prozeß (punktiert); die Summe ist die ausgezogene Kurve:
...c
...
...
......
......
......
.......
... ...
... ...
... ....
... .....
.. ......
.. . . . ...... .................
... . . . . . . ............
..
. . ......................
...
...
........................
.............................
... .....
................................
.
...................................
.
... ..
.......................................
...
............................................
... ..
..................................................
..........................
... .... ∗
.
.... ... .τ
.............
..... . ..... ..... .
...
.... ..... ..... ..... ..... ..... ..... ..... ..... ..... ..... ..... ..... ..... ..... ..... ..... ..... ..... ..... ..... ..... ..... ..... ..... ..... ..... ..... ..... ..... ..... ..... ..... ..... ..... ....
......
.....
. ...
...
...
...
...
...
...
...
...
...
Beim Euler-Verfahren geht man die Tangente an der Kurve in t = ti entlang; und diese orientiert sich an der
schnellen Komponente. Deswegen muß man die Schrittweite kleiner als τ ∗ wählen, um wenigstens den unsinnigen
Vorzeichenwechsel zu vermeiden. Mit solch kleinen Schrittweiten kommt man aber in der langsamen Komponente
nicht voran.16
DGl mit abklingenden Lösungen, deren Zeitkonstanten sich um einige Größenordnungen unterscheiden, nennt man
steife DGl.
Zu ihnen gelangt man immer dann, wenn wesentlich verschieden schnelle Abklingprozesse miteinander kombiniert
sind, z. B. bei mehrstufigen chemischen Reaktionen A −→ B −→ C, bei denen eine Reaktion viel schneller ist als die
andere, bei Problemen der Thermodynamik u. v. a. m..
Diesen DGl ist im Rahmen der Numerik eine umfangreiche Literatur gewidmet.
Was kann man nun praktisch machen?
Kehren wir zurück zum Euler-Verfahren: Wie wäre es, wenn wir die Tangente nicht in dem steilen Anfangsstück
anlegen, sondern im flachen Endteil?
Tatsächlich, formal muß man die Tangente nicht unbedingt links anlegen. Das ist natürlich, denn wenn man sie rechts
anlegt, so geschieht das in dem Punkt (xi+1 , yi+1 ), dessen y-Koordinate man ja gerade sucht.
Die resultierende Formel wäre dann yi+1 = yi + h · f (xi+1 , yi+1 ), und solche Formel nennt man bekanntlich implizit.
Eine eingehendere theoretische Untersuchung ergibt, daß bei steifen DGl alle expliziten Verfahren (darunter auch
solche, die nicht auf den Ansatz der Runge-Kutta-Formeln basieren) Probleme haben und nur mit undiskutabel
kleinen Schrittweiten funktionieren.
Probieren wir die genannte Formel yi+1 = yi + h · f (xi+1 , yi+1 ); man nennt sie das Eulersche Polygonzugverfahren (rückwärts): Es wird hier (den diskretisierten Strom mit einem großen Buchstaben bezeichnet, um ihn vom
Diskretisationsindex zu unterscheiden):


di = p
dt
 dp = −105 (p + 2i)
dt
(
=⇒
Ii+1 = Ii + τ pi+1
pi+1 = pi − 105 τ · (pi+1 + 2Ii+1 )
Das ist ein - im vorliegenden Fall glücklicherweise lineares!17 - Gleichungssystem für Ii+1 und pi+1 ; man erhält
Ii+1 =
pi − 2 · 105 τ Ii
,
2 · 105 τ 2 + 105 τ + 1
pi+1 =
(1 + 105 τ )Ii + τ pi
.
2 · 105 τ 2 + 105 τ + 1
Mit der vorhin völlig undiskutablen Schrittweite τ = 0.01s ergeben sich die folgenden ersten Werte:
16 In diesem Bild sind e−t und e−20t miteinander kombiniert, damit man noch etwas erkennt. Im betrachteten elektrischen
Beispiel wäre diese Tangente praktisch senkrecht, und damit ergibt sich ein außerordentlich kleines τ ∗ .
17 Offenbar ergeben (implizite) Runge-Kutta-Verfahren, auf lineare DGl angewandt, immer lineare Gleichungssysteme. Das Schema, das ein Runge-Kutta-Verfahren definiert, enthält bereits eine Matrix ajl ; diese kann mit der Matrix der DGl
verknüpft werden ... jedenfalls wird das alles eine dankbare Anwendung der Matrizenrechnung.
126
i
1
2
3
4
Ii
19.589
19.224
18.847
18.847
pi
1958.864
-36.453
-37.693
-36.956
Diese Werte sehen vernünftig aus; die nachstehende Grafik zeigt den Verlauf der Näherungsfunktion zu i(t) (als Polygonzug) bis t = 0.03s für τ = 0.01 (obige Tabelle, punktiert), τ = 0.001 (gestrichelt) und τ = 0.0001 (durchgezogen):
20 .....................................................................................................................................................................................
........................................................................................................................
.
. .
16
12
8
4
.......................................................
.
.. ..
..
..... ..
.
..
... .
.
..... ...
.
..
... .
.
..... ..
.
..
... ...
.
..... ..
.
... .
..
.
..... ...
.
... .
..
.
..... ...
..
... .
.
..... ...
.
..
...
.
..... ..
.
..
... ..
.
..... ..
.
... .
..
.
.......
.
....
..
.
.......
..
....
........ ...
.. .
... .
.......
0
0.00
0.01
0.02
0.03
Wie man sieht wird die Anfangsphase - der Aufbau des Stromes bis zu seinem Maximalwert knapp unter 20mA in keinem Fall korrekt dargestellt. Sie dauert weniger als 0.0001s und kann damit auch unmöglich wiedergegeben
werden; aber der Verlauf ist doch jedesmal qualitativ und bald auch quantitativ völlig richtig.
Nachstehend ist dieser Anfangsverlauf dargestellt, der etwa 0.00005s dauert (Zeitachse in ms):
20
16
12
8
4
..................................................................................................................................................................................................................................................
...................................
............
.
.
.
.
.
.
.
.
.
.....
.....
.
.
...
...
.
.
.
...
...
..
...
..
...
..
...
..
...
..
...
..
...
..
...
..
...
0
0.00
0.05
0.10
0.15
0.20
0.25
Implizite Verfahren haben also auch eine Daseinsberechtigung. Überhaupt erlauben sie in vielen Fällen wesentlich
größere Schrittweiten als explizite und werden deshalb bei DGl, für die keine komplizierten Gleichungen oder Gleichungssysteme resultieren, gern genommen.
Die gute Eigenschaft, mit steifen DGl fertig zu werden, haben bereits viele semiimplizite Verfahren (wie z. B.
das Eulersche Polygonzugverfahren, rückwärts). Da sie auch relativ einfache Gleichungssysteme liefern werden sie
127
bevorzugt benutzt.
7.6
Aufgaben
1. Berechnen Sie zu dem Anfangswertproblem y 0 = y, y(0) = 1 den Wert yn nach dem Heunschen Verfahren, der
sich mit h = 1/n ergibt, und seine genäherte Abweichung vom exakten Wert e02.718 . . ., die die Form A/n2
hat. Ermitteln Sie diesen Wert A!
2. Das DGl-System y10 = −y1 , y20 = −2y2 , y1 (0) = 1, y2 (0) = 100 wird mit einer Schranke ε > 0 für den
Gesamtfehler durch ein Näherungsverfahren gelöst.
a) Kann man hier diese Schranke für alle x > 0 verwenden?
b) Es interessiert eigentlich dasjenige x∗ , für das y1 (x∗ ) = y2 (x∗ ) ist. Was ist über seine Genauigkeit zu sagen?
128
Kapitel 8
Beispiele
8.1
Beispiel 1: Numerische Auswertung einer Fourier-Reihe
Man schreibe ein effektives Programm, das für 0 ≤ x ≤ π die Fourier-Reihe
∞
X
cos(2k + 1)x
k2 + 1
k=0
auswertet.
Wenn man schnell fertig werden will und beschließt, eine Genauigkeitsschranke von 10−6 zu akzeptieren, so könnte
man es mit dem folgenden Programm versuchen, das nach der Rechnung den Wert der Reihe in s enthalten soll:
1:
s:=0; k:=0;
k:=k+1; s:=s+cos((2*k+1)*x)/(k*k+1);
if abs(cos((2*k+1)*x)/(k*k+1)) > 10−6 then goto 1;
Aber: Dieses Programm ist erstens falsch, und obendrein schlecht.
Der Fehler ist nicht ganz trivial, denn bei Testrechnungen wird dieses Programm zumeist recht gute Werte liefern (z.
B. ergibt es bei x = 0 den Wert 0.719 829 76... statt des richtigen Wertes 0.720 329 75..., d. h. nur 0.000 499 99...
oder 0.07% zuwenig). Er würde (evtl.) auffallen, wenn man sich die Funktion mit diesem Programm als eine Folge
von Punkten zeichnen ließe - einige Punkte tanzen deutlich aus der Reihe.
Ein solcher Wert, wo diese Programmvariante versagen würde, wäre z. B. π/6; dann ist
∞ cos
X
k=0
(2k + 1)π
π
5π
√
√
cos
cos
3
3
π
6
2
6 + ... =
=
cos
+
+
+
0
−
+ ... .
6
2
5
2
10
k2 + 1
Der zweite Summand ist exakt Null, und der würde im vorstehenden Programm die Summation beenden, obwohl
man noch keineswegs nahe am Resultat wäre. Die Abbruchbedingung ist also fatal falsch.
Bei der numerischen Summation von Reihen ist es i. a. nicht zulässig, die Kleinheit eines Summanden als Abbruchbedingung zu verwenden. 1
Das Ende der Summation muß also durch eine korrekte Restgliedbetrachtung festgelegt werden anstelle dieser intui1 Das gilt sogar dann, wenn die Summanden monoton abnehmen, denn selbst dann ist deren Kleinheit keine Garantie für
einen kleinen absoluten Fehler. Betrachten wir als Beispiel die geometrische Reihe bei 0 < q < 1; ihre n-te Partialsumme weicht
von ihrem Wert 1/(1 − q) um
S − Sn =
∞
X
k=0
!
q
k
−
n
X
!
q
k
=
k=0
ab. Bricht man die Summation ab, wenn der Summand
qn
∞
X
k=n+1
q k = q n+1
∞
X
qk =
q n+1
1−q
k=0
< ε wird, so beträgt der Fehler also etwas weniger als
q
ε,
1−q
und bei q nahe 1 wird dieser Wert groß, selbst bei kleinem ε. Sei ε fest und q = 1 − ε/a, dann ist der Fehler also etwa a - ein
beliebiger Wert, der sehr groß sein kann.
129
tiven Schranke. - Die nachfolgende Abschätzung ist sicher, aber etwas pessimistisch:
∞
Z k
∞
∞
∞
X
X
X
X
| cos(2k + 1)x|
cos(2k + 1)x dx
1
≤
|Rn | = ≤
≤
2
2
2
2
k
+
1
k
+
1
k
+
1
x
+1
k=n+1
k=n+1
k=n+1
k=n+1 k−1
Dabei wurde ausgenutzt, daß für k − 1 ≤ x ≤ k die Ungleichung x2 + 1 ≤ k2 + 1 gilt, also 1/(x2 + 1) ≥ 1/(k2 + 1),
und damit
Z k
Z k
dx
dx
1
=
<
,
2
2
k2 + 1
k
+
1
x
+1
k−1
k−1
und nun werden die aneinander anschließenden Integrale zusammengefaßt:
Z
∞
|Rn | ≤
n
dx
1
1
π
− arctan n = arctan
<
.
=
2
n
n
x2 + 1
Wünscht man sich für den absoluten Fehler der Funktionsberechnung eine Schranke von z. B. 10−6 , so ist man auf
der sicheren Seite, wenn man n > 106 wählt, denn nach der vorstehenden Abschätzung ist dann |Rn | < 1/106 = 10−6 .
Das bedeutet die Verwendung von mindestens einer Million Summanden - ein beträchtlicher Aufwand, der vertretbar
ist, wenn man nur einige wenige Funktionswerte berechnen will, aber für einen Routineeinsatz des Programms nicht
in Frage kommt. Man muß also durch mathematische Aufbereitung des Problems eine effektivere Berechnungsvorschrift gewinnen. Im vorliegenden Fall kann man die Reihe in eine geschlossen summierbare Reihe und eine schneller
konvergente Restreihe zerlegen, wobei nur die zweite numerisch berechnet werden muß. Grundlage ist der Gedanke,
daß ein Weglassen der ’1’ im Nenner die Summanden bei großen Werten von k nur unwesentlich ändert, die Reihe
aber in eine bekannte Funktion verwandelt.
Einer Formelsammlung entnimmt man die für 0 ≤ x ≤ π gültige Darstellung2
x =
π
4
−
2
π
cos x +
cos 3x
cos 5x
cos 7x
+
+
+ ...
32
52
72
also
∞
X
cos(2k + 1)x
k=0
(2k + 1)2
=
π
4
=
π
−x
2
∞
π
π X cos(2k + 1)x
−
,
2
4
(2k + 1)2
k=0
,
und damit wird
∞
X
cos(2k + 1)x
k2 + 1
k=0
=π
= 4
∞
X
cos(2k + 1)x
k=0
(2k + 1)2
+
∞ X
cos(2k + 1)x
k=0
k2 + 1
−
4 cos(2k + 1)x
(2k + 1)2
=
∞
∞
X (4k − 3) cos(2k + 1)x
X (2k + 1)2 − 4(k2 + 1)
π
−x +
cos(2k + 1)x = 1.934 802 − 3.141 159x +
.
2
2
2
(2k + 1) (k + 1)
(2k + 1)2 (k2 + 1)
k=1
k=0
Bricht man den letzten Term bei k = n ab, so ist der Fehler
Z ∞
∞
∞
∞
X
X
X
(4k − 3) cos(2k + 1)x 4k − 3
1
dx
1
<
<
=
.
≤
2
2
3
3
k=n+1 (2k + 1)2 (k2 + 1) (2k + 1) (k + 1)
k
x
2n2
n
k=n+1
k=n+1
√
Das ist viel günstiger; mit derselben Fehlerschranke 10−6 erhält man nun n ≥ 0.5 · 106 = 707, also weniger als ein
Tausendstel der Anzahl von Summanden, die man vorher hätte auswerten müssen. - Die zusätzlich anfallende lineare
Funktion enthält einen wesentlichen Teil der ursprünglichen Reihe; sie stellt keinerlei Problem dar.
Mit subtileren theoretischen Überlegungen kann man die Anzahl der benötigten Summanden weiter verringern; darauf
sei hier verzichtet. Statt dessen soll noch ein wenig über eine effektive Programmierung nachgedacht werden.
Die Berechnung der Kosinuswerte bedeutet einen gewissen Aufwand, den man mit zehn bis fünfzig Rechenoperationen
abschätzen kann. Man kann aber bedenken, daß diese Funktion in gleichabständigen Argumenten ausgewertet wird,
die jeweils um 2x zunehmen. Aus dem Additionstheorem für die Kosinusfunktion folgt dann
cos(2k + 3)x = cos[(2k + 1)x + 2x] = cos(2k + 1)x · cos 2x − sin(2k + 1)x · sin 2x ,
cos(2k − 1)x = cos[(2k + 1)x − 2x] = cos(2k + 1)x · cos 2x + sin(2k + 1)x · sin 2x ,
und Addition beider Gleichungen ergibt
cos(2k + 3)x + cos(2k − 1)x = 2 cos(2k + 1)x · cos 2x .
2 Der
rechts stehende Ausdruck ist auf [−π, π] die Funktion |x| - das muß ggfs. beachtet werden!
130
Mit dem in k konstanten Faktor A = 2 cos 2x resultiert die einfache Rekursion zur Berechnung des nächsten Wertes
cos(2k + 3)x:
cos(2k + 3)x = A cos(2k + 1)x − cos(2k − 1)x .
Damit reduziert sich der Aufwand auf eine einzige Multiplikation und eine Subtraktion.
In manchen Computern bzw. Programmsystemen werden Additionen wesentlich schneller ausgeführt als Multiplikationen; das kann man bei der Berechnung des Nenners bedenken. Es ist mit ak = (2k + 1)2 (k2 + 1)
bk = ak+1 − ak = (2k + 3)2 (k2 + 2k + 2) − (k + 1)2 (k2 + 1) = 16k3 + 36k2 + 38k + 17
Weiter wird
ck = bk+1 − bk = 48k2 + 120k + 90
und
dk = ck+1 − ck = 96k + 168 sowie dk+1 = dk + 96 .
Damit kann man die Nenner ak durch wenige Additionen rekursiv berechnen:
dk+1 = dk + 96 ,
ck+1 = ck + dk ,
bk+1 = bk + ck ,
ak+1 = ak + bk .
Praktisch ist diese aufwendige Rechnung nicht nötig. Man berechnet ak für einige Werte von k und schreibt sie
untereinander; danach zieht man vom jeweils unteren von zwei Werten den darüberstehenden ab. Das Resultat, die
sogenannte 1. Differenz ∆(1) , wird zur Zuordnung zwischen diese Zeilen geschrieben. Bei diesen wird wiederum der
jeweils obere Wert eines Paares vom unteren subtrahiert; diese 2. Differenz ∆(2) schreibt man wiederum auf Lücke,
und so geht es weiter:
∆(1)
k
ak
0
1
1
18
2
125
3
490
4
1377
5
3146
6
6253
7
11250
∆(2)
∆(3)
∆(4)
∆(5)
17
107
365
887
1769
3107
4997
90
168
258
264
522
360
882
456
1338
552
96
96
96
0
0
0
96
1890
Die vierten Differenzen erweisen sich als konstant, und die fünften sind demzufolge gleich Null. Will man diese Tabelle nun fortsetzen, so macht man dies zweckmäßigerweise von rechts nach links. In der Spalte mit ∆(4) wird eine
96 eingetragen, dann ist ∆(3) = 552 + 96 = 648, weiter ∆(2) = 1890 + 648 = 2538, ∆(1) = 4997 + 2538 = 7535 und
damit a8 = 11250 + 7535 = 18785 - ein nur mit Additionen berechneter Wert.
Als letzte Bemerkung zum eingangs angegebenen Programm wäre noch zu sagen, daß es ein überflüssiger Aufwand
ist, den Summanden zweimal zu berechnen - einmal zum Summieren und einmal für den (allerdings falschen) Genauigkeitstest. Wenn schon, so sollte man ihn nur einmal ermitteln und in einer Variablen speichern. Das Programm
wird es einem mit Halbierung der Rechenzeit danken.
Nach diesen Vorarbeiten kann man das folgende Programm formulieren, das zwar deutlich länger ist, aber unvergleichlich effektiver und obendrein richtig:
A:=2*cos(2*x); c0=cos(x); c1=cos(3*x); c2:=A*c1-c0;
w:=490; d1:=365; d2:=258; d3:=168; z:=9;
s:=c0/18+c1/25+z*c2/w;
for k:=4 to 707 do
begin c0:=c1; c1:=c2; c2:=A*c1-c0;
d3:=d3+96; d2:=d2+d3; d1:=d1+d2; w:=w+d1; z=z+4;
s:=s+k*c2/w;
end; s:=1.934802-3.141159*x+s;
Sollte diese Fourier-Reihe von großer Bedeutung sein, so kann an dieses Programm durch weiteres Nachdenken
131
noch beträchtlich verbessern; dazu gibt es an anderer Stelle einige weitere Bemerkungen. Hier mag es reichen; es ging
darum zu demonstrieren, welche mathematische Aufbereitungen möglich und ggfs. notwendig sind.
Daneben sind folgende Methoden von eigenständigen praktischen Wert dargestellt worden:
• Restgliedabschätzung für einen gewissen Typ von Reihen, speziell Fourier-Reihen,
• Konvergenzbeschleunigung bei Fourier-Reihen durch Heraustrennen bekannter Reihen mit Verbleib einer
schneller konvergenten Restreihe,
• effektive rekursive Berechnung von cos xk für gleichabständige Werte xk (geht analog für sin xk ),
• effektive rekursive Berechnung von Polynomwerten für gleichabständige Werte xk .
Zum letzten Punkt: Pn (x) bezeichne ein Polynom n-ten Grades. Man berechne also eine Wertetabelle mit einer
genügenden Anzahl von xk und bilde die ersten, zweiten, ... , n-ten Differenzen, letztere sind konstant. Nun kann die
Tabelle durch einfache Additionen in der beschriebenen Weise fortgesetzt werden.
8.2
Beispiel 2: Ladungsdichte auf einem Ring
Ein Ring mit kreisförmigen Querschnitt vom Radius Rq um einen Kreis des Radius Rc > Rq aus leitfähigen Material
wird mit der Ladung Q versehen; die Ladungsträger (z. B. Elektronen) verteilen sich auf seiner Oberfläche. Man
berechne die Dichte ihrer Verteilung.
..... ..... ..... ..... ..... ..... ..... ..... ..... ...... ..... ..... ..... ..... .....
....
..... ..... ..... ..... ..... ....
....
...
. ..... ..... ..... ..
..
... ..... .....
...
.
....
.....
.
.
...
.
.
.
..........................................
.
y
.
.
.
.
.
.
.
.
.
....
...
..
.
.......
...
.
......
..
...
.
...
... ........
.....
..
.
R
.
.
q
... ....
.
.
.
...
.
.
.
.
.
.
.. .
.
...
...
..
...
............
.
.
.
.
... ..
.
.
.
.
.
...
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
... ..
.
.
.
.
.
.
.
.
.
.
.
.
.
...
...
........
.. ϕ
.
.
..... ..................ψ
.
.
r, x ..
.
.
............................................................................................................................................................................................................................................................................................................|..............................................................................................................
.
..
.
.
.......
...
Rc − Rq ...
Rc
.
.
...
.. Rc + Rq
...
.. . .....
..
.
...
.
.
..
.. ...
...
..
.
..... ..... ..... ..... ..... ..... ..... ........ ...... ....... ...... ..... ..... ..... .....
.
.
.
.. . .....
.
.
..... ..... ..... ..... ..... ....
....
. ..... ..... ..... ...........
....
... .............
.....
.
.
.
.
.
.
....
.
...........................................
...
z .. .......
.
Die Berechnung soll nur ein grobes Bild für einen ersten Eindruck ergeben; es wird also eine ganz primitive Modellierung angewandt, und das resultierende Programm soll einfach sein, ohne daß eine effektive Arbeit in dieser Phase
angestrebt wird.
Diese primitive Modellierung benutzt unmittelbar die physikalische Vorstellung.
Die Dichte der Verteilung hängt offenbar nicht davon ab, ob es sich um positive oder negative Ladungen handelt;
sprechen wir also einfach von ’Elektronen’, ohne diese im Wortsinn zu meinen.
Die Ladungen sitzen nur auf der Oberfläche, da das Material leitfähig sein soll. Die Dichte ist also eine Flächendichte.
Das Problem ist rotationssymmetrisch bezüglich der z-Achse; es genügt folglich, einen einzigen Querschnitt zu betrachten. Die gesuchte Funktion ist damit auf den Umfang zu beziehen; als Argument kann der Winkel ϕ angesehen
werden. Nennen wir diese Dichte q(ϕ).
Das Problem ist damit schon eindimensional - eine beträchtliche Erleichterung und eine drastische Verringerung der
Parameterzahl. Abgesehen davon ist dadurch gewährleistet, daß sich das Resultat als Kurve darstellen läßt und keine
3D-Grafik gebraucht wird.
Weiterhin ist offensichtlich, daß hier Symmetrie bezüglich der x − y-Ebene vorliegt; man braucht diese Verteilung
also nur auf dem halben Umfang zu berechnen, z. B. für 0 ≤ ϕ ≤ π.
Für die angekündigte simple Modellierung wird der Ring in n gleiche Teile geteilt, so wie man einen Wurstring in
Scheiben schneidet, die außen dicker sind als innen. Jede derartige ’Scheibe’ wird nun wieder - wie eine Torte - in 2m
Sektoren geschnitten.
Die Mittelfläche einer ’Scheibe’ sei durch den Winkel ψi = 2πi/n gekennzeichnet; 0 ≤ i ≤ n − 1. Die Verteilung wird
auf der Oberfläche der 0. Scheibe berechnet.
Die Mittelpunkte der Sektorenoberflächen gehören zu den Winkeln ψj = πj/m, 0 ≤ j ≤ 2m.
Mit dem Rad eines Fahrrades verglichen wäre also j = 0 oder j = 2m die Mitte der Lauffläche; bei j = m sitzt das
Ventil.
Die Oberfläche des Rings wird damit in gekrümmte ’Rechtecke’ aufgeteilt. Wir denken uns nun die gesamte Ladung
eines solchen Vierecks in seinem Zentrum konzentriert, und wir verbinden diese Zentren mit Drähten, die Ladungen
zwar leiten können, aber nicht aufbewahren. Der Ring selbst wird nun nicht mehr gebraucht; statt seiner haben wir
eine Anzahl von Punkten (diesen Zentren) im Raum, die ihn halbwegs darstellen.
Nun versehen wir all diese Zentren mit derselben Zahl N von Elektronen, und betrachten wir irgendeinen der Umfangspunkte der 0. Scheibe.
132
Auf die N Elektronen in ihm wirken die Abstoßungskräfte aus allen anderen Knotenpunkten. Diese versuchen die
Elektronen nach außen zu drücken, aber dorthin führt kein Draht.
Wegen der Rotationssymmetrie haben die Elektronen keinen Anlaß, auf die 1. oder n − 1-te Scheibe zu wechseln.
Sie können nur entlang des Umfangs wandern, und das werden sie tun, wenn die auf diesen Knoten wirkende Kraft
nicht senkrecht zur Oberfläche ist.
Die ’ganz simple Modellierung’ besteht nun darin, für alle m Punkte auf der oberen Hälfte der 0. Scheibe die jeweils
wirkende Kraft zu berechnen, ihre Orientierung zur Oberflächennormalen zu ermitteln, und dann in die resultierende
Richtung ein Elektron abzugeben.
Es wäre vermutlich sinnvoll, die Anzahl der abzugebenden Elektronen nicht nur von der Richtung, sondern auch von
dem Betrag dieses Vektors abhängen zu lassen, aber das erfordert schon etwas Überlegung; dies sei einem besseren
Modell vorbehalten.
Nachdem alle Punkte des halben Umfangs durchlaufen und Elektronen hin oder her geschoben wurden wird dieser
Durchlauf wiederholt, und dann nochmals, und nochmals ... . (Auf der gegenüberliegenden Hälfte wird nicht gerechnet, die dortigen Ladungen ergeben sich einfach durch Spiegelung, sie werden also gleichzeitig mit ermittelt.)
Irgenwann wird sich dieser Prozeß in dem Sinne stabilisieren, daß die Verteilung in jedem Durchlauf geringfügig
um einen festen Zustand schwankt, daß also beispielsweise ein jetzt abgegebenes Elektron in der nächsten Runde
zurückgeholt wird, usw..
Diese Vorgehensweise orientiert sich am physikalischen Verständnis: Es müßte so gehen, da damit die Energie der
Ladungsverteilung halbwegs minimiert wird - derselbe Prozeß, der sich auch in der Realität abspielen würde.
Nachdem solcherart der Weg geklärt ist können die benötigten Formeln aufgestellt werden.
~ in
Wenn im Punkt P1 die Ladung Q1 und in P2 entsprechend Q2 positioniert sind, so wirkt auf Q1 eine Kraft F
2
~
~
Richtung des Vektors P2 P1 mit dem Betrag (c ist eine gewisse positive Konstante) |F | = cQ1 Q2 /|P1 P2 | .
Der gesamte Kraftvektor ist nun der Einheitsvektor der Kraft, multipliziert mit seinem Betrag:
1
cQ1 Q2 ~
~ = cQ1 Q2 ·
F
P2~P1 =
P2 P1 .
|P1 P2 |2 |P1 P2 |
|P1 P2 |3
~0j , die auf ihn
Nun konkret: Sei P0j einer der Punkte auf dem Umfang der 0. Scheibe; 0 ≤ j ≤ m. Die Gesamtkraft F
wirkt, ist die Summe der Kräfte aus allen anderen Knotenpunkten Pkl aller Scheiben (0 ≤ k ≤ n − 1, 0 ≤ l ≤ 2m − 1):
~0j =
F
n−1 2m−1
X
X
k=0
∗
l=0
cQj Qk
P0j~Pkl ,
|P0j Pkl |3
wobei das Sternchen bedeutet, daß der Punkt P0j bei der Summenbildung ausgelassen wird.
Den konstanten positiven Faktor cQj kann man aus der Summe herausziehen; und da nur die Richtung dieses Vektors
interessiert kann man ihn weglassen.
Es wird also in der x−z-Ebene der verbleibende Vektor ~vj berechnet und mit dem Radiusvektor (x, 0, z)T −(Rc , 0, 0)T
verglichen. Je nachdem, nach welcher Seite er von diesem abweicht wird ein Elektron übergeben.
Man braucht die Koordinaten der Punkte Pkl ; in Zylinderkoordinaten ist
zkl = Rq sin
2πl
,
2m
rkl = Rc + Rq cos
2πl
,
2m
ψkl = ψkl .
Um die Abstände zu ermitteln ist der Übergang in kartesische Koordinaten sinnvoll:
xkl =
h
Rc + Rq cos
2πl
2πk
cos
,
2m
n
i
xkl =
h
Rc + Rq cos
2πl
2πk
sin
,
2m
n
i
zkl = Rq sin
2πl
.
2m
Da es offensichtlich nur auf das Verhältnis von Rc und Rq ankommt kann man Rq = 1 setzen und Rc als Maßzahl
dieses Radius, gemessen in der Einheit Rq , ansehen.
Für den inneren und den äußeren Radius des Ringes müssen noch spezielle Festlegungen getroffen werden, da dort
wegen der festgelegten Symmetrie nie eine von der Horizontalen abweichende Richtung ermittelt wird. Man könnte
daran denken, im Falle einer Differenz von mehr als zwei Elektronen zu den beiden Nachbarn je eines nach jeder Seite
abzugeben oder aufzunehmen.
Die resultierenden Werte qj sind nun allerdings noch nicht die gesuchte Ladungsdichte, sondern nur die ’Elektronezahl’
im jeweiligen Knotenpunkt. Der steht für ein gewisses Rechteck, und das ist im Außenbereich größer als zur ’Nabe’
hin. Näherungsweise kann man diese Änderung berücksichtigen, indem man die Werte qj noch durch die zugehörigen
Radien rj teilt. Die sich hieraus ergebende Tabelle stellt - bis auf einen beliebigen Normierungsfaktor - eine Näherung
für die Ladungsdichte q(ϕ) dar.
Das Verfahren ist grob und rechenintensiv; aber es liefert ziemlich schnell eine gewisse Lösung. Und es basiert auf
direkter Modellierung durch diskrete Zustände.
Der übliche Weg wäre ein gewisser Kreis: Man würde alles auf kleinen Flächenstücken betrachten, die Bilanz aufstellen, deren Abmessungen dann gegen Null gehen lassen und diverse Integrale erhalten. Wenn es nicht gelingt,
eine geschlossene Lösung zu finden - was einige analytische Kenntnisse erfordert - so kann man diese Integrale durch
Näherungsformeln diskretisieren, und man landet bei ähnlichen Formeln wie den benutzten.
133
Dieser ’Umweg’ über das stetige Modell - das sich in den letzten 300 Jahren eingebürgert hat - wurde hier vermieden.
Freilich, wenn man die Integrale korrekt aufschreibt, so könnte man mit geringer Mühe Näherungsformeln gewinnen,
die wesentlich genauer wären als die entwickelten, und die in einem winzigen Bruchteil der Rechenzeit ordentliche
Ergebnisse lieferten - aber ein wenig länger würden diese Vorarbeiten schon dauern.
Zur Realisierung der Rechnung wurde das folgende, für n = m = 15 ausgelegte Programm genutzt:
1:
2:
for i:=0 to m do q[i]:=100; nr:=0; pi:=3.1415927;
for j:=1 to m-1 do begin
fx:=0; fz:=0; x0:=rc+cos(pi*j/m); z0:=sin(pi*j/m);
for k:=0 to n-1 do for l:=0 to m+m-1 do begin
if (k=0) and (l=j) then goto 2;
r:=rc+cos(pi*l/m); z1:=sin(pi*l/m);
x1:=r*cos(2*pi*k/n); y1:=r*sin(2*pi*k/n);
d:=(x1-x0)*(x1-x0)+y1*y1+(z1-z0)*(z1-z0);
if l <= m then qq:=q[l] else qq:=q[m+m-l];
d:=d*sqrt(d); fx:=fx+qq*(x0-x1)/d; fz:=fz+qq*(z0-z1)/d;
end;
x1:=-z0; z1:=x0-rc; q[j]:=q[j]-1;
if x1*fx+z1*fz > 0 then q[j+1]:=q[j+1]+1 else q[j-1]:=q[j-1]+1;
if (x1*fx+z1*fz > 0) and (j=m-1) then q[j+1]:=q[j+1]+1;
if (x1*fx+z1*fz < 0) and (j=1) then q[j-1]:=q[j-1]+1;
end;
if q[0] > q[1]+1 then begin q[0]:=q[0]-2; q[1]:=q[1]+1; end;
if q[m] > q[m-1]+1 then begin q[m]:=q[m]-2; q[m-1]:=q[m-1]+1; end;
if q[0] < q[0]-1 then begin q[0]:=q[0]+2; q[1]:=q[1]-1; end;
if q[m] < q[m-1]-1 then begin q[m]:=q[m]+2; q[m-1]:=q[m-1]-1; end;
nr:=nr+1; if nr < 300 then goto 1;
Die Rechenergebnisse für den Fall Rc = 10 sind in der nachstehenden Tabelle zusammengefaßt; links steht die Nummer
des Durchlaufs - der bereits stattgefunden hat - und rechts die Summe aller Ladungen; die Werte 1 bis 14 werden
dabei doppelt genommen. Diese Summe dient nur der Kontrolle; sie muß konstant sein und ist es auch.
Man beachte, daß die qj auf dem Ring von außen (q0 ) nach innen q15 laufen.
N
0
1
2
3
4
5
6
7
8
9
10
..
.
295
296
297
298
299
300
0
100
102
102
102
102
102
102
104
104
104
104
..
.
108
108
108
108
108
108
1
101
101
101
102
102
103
103
103
103
103
103
..
.
109
108
108
109
108
108
2
100
100
101
101
102
102
102
102
103
103
104
..
.
107
107
108
107
107
108
3
100
100
100
100
100
100
101
101
101
101
101
..
.
107
107
107
107
107
107
4
100
100
100
100
100
100
100
100
100
101
101
..
.
105
106
105
105
106
105
5
100
100
100
100
100
100
100
100
100
100
100
..
.
104
105
105
104
105
105
6
100
100
100
100
100
100
100
100
100
100
100
..
.
103
102
102
103
102
102
7
100
100
100
100
100
100
100
100
100
100
100
..
.
102
102
101
102
102
101
8
100
100
100
100
100
100
100
100
100
100
100
..
.
99
99
100
99
99
100
9
100
100
100
100
100
100
100
100
100
100
100
..
.
98
97
98
98
97
98
10
100
100
100
100
100
100
100
100
100
100
100
..
.
96
96
96
96
96
96
11
100
100
100
100
100
100
100
100
100
100
100
..
.
94
95
95
94
95
95
12
100
100
100
100
100
100
100
100
100
99
99
..
.
93
93
93
93
93
93
13
100
100
100
100
100
99
98
97
97
97
97
..
.
92
92
92
92
92
92
14
99
99
98
97
97
97
97
97
96
96
95
..
.
91
91
91
91
91
91
15
100
98
98
98
96
96
96
96
96
96
96
..
.
92
92
90
92
92
90
P
ql
3000
3000
3000
3000
3000
3000
3000
3000
3000
3000
3000
..
.
3000
3000
3000
3000
3000
3000
Die resultierende Verteilung aus diesen Werten ist, wenn sie durch den Radius des jeweiligen Punktes geteilt und
damit normiert werden:
134
.......
.... .... ...
.... q(ϕ)
....
...
...
1.00 ............ ..... ..... ..... ..... ..... ..... ..... ..... ..... ..... ..... ..... ..... ..... ..... ..... ..... ..... ..... ..... ..... ..... ..... ..... ..... ..... ..... ..... ..... ..... ..... ..... ..... ..... ..... ..... ..... ..... ..... .............
...
...........
..
.
......... .................................................
.... ...
.
.
.
.
.
.
.
.
.
.
.
0.99 .............
.
.
.
............
...
.....
...........
..............
....
..
... ................ ........................................
.
.
.
.
.
.
.
.
.
.
.
.......
0.98 ..
.
...........
.
.
.
.
.
.
.
.
.
..
.
.
....
.
...... ..
....
.
...
.........
..............
.
.
.
.
.
.
.
.
.
.
.
0.97 ............
.
.
.
.
.....
.
...
.
.
..
.
.
.
.
. .................................. .........
..
..
0.96 ................
....
...
0.95 ............
...
...
...
...
...
. .
.
.
......................................................................................................................................................................................................................................................................................................................................................................................................................
...
.o
.o
.o
. .
...
45
90
135
180o ϕ
Man beachte, daß ϕ = 0o den Punkten auf der Außenseite entspricht, während der rechte Teil der Kurve den inneren
Bereich des Ringes beschreibt.
Die Werte sind offenbar sehr grob; um sie zu verbessern hätte man mehr als 100 ’Elektronen’ in mehr Punkte
positionieren müssen. Das hätte die Rechnung aber stark verlängert.
Man erkennt allerdings, daß sich auf der Innenseite des Rings mehr Elektronen versammeln als auf der Außenseite.
Ist das plausibel? Hätte man das erwartet? Beachten Sie die Fußnote auf Seite 7!
Zielstellungen dieses Beispiels:
• Grobe Modellierung auf der Basis einer physikalischen Vorstellung,
• Keine Rücksicht auf Rechenzeit und Effektivität,
• Keine besonders hohen Genauigkeitsforderungen,
• Trotzdem eine gewisse und unerwartete Erkenntnis.
8.3
Beispiel 3: Stationäre Temperaturverteilung - ein Randwertproblem
Gegeben ist eine Schicht eines homogenen Materials der Dicke L. Zeitlich stationär herrsche auf der linken Oberfläche
(x = 0) dieser Schicht überall die gegebene Temperatur T (0) = Tl ; rechts bestimmt sich die Temperatur aus einer
Übergangsbedingung: −λ · T 0 (L) = α(T (L) − Tu ).
Hierbei bezeichnet λ die Wärmeleitzahl, α die Wärmeübergangszahl, und Tu die - ebenfalls stationäre - rechte
Umgebungstemperatur.
Für die stationäre Temperatur T (x) gilt die Differentialgleichung
(λ(T ) · T 0 )0
=
0
,
diese bringt zum Ausdruck, daß die Wärmeleitzahl von der Temperatur abhängt. (Wenn das nicht der Fall ist, so gilt
einfach T 00 = 0, und hieraus resultiert ein linearer stationärer Temperaturverlauf.) Sei λ(T ) eine lineare Funktion der
Temperatur: λ(T ) = λ0 + µT , T in Grad Celsius.
Es soll dieser stationäre Temperaturverlauf ermittelt werden:
...
............ T (x)
........... T
u
....
...
....
.
......
...
..................................... .. T (L)
...
............................
.
.
.
..
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
..
.
.
..............
.
.
..
.
.
.
.
...
.
.
.
.
.
.
.
.
.
.
.
.
............
..
.
.
.
.
.
.
.
.
.
.
.
.
.
.
...
.
..
......
................
.
..
.
...
.
.
.
.
.
.
.
.
.
.
.
.
...
..........
.
.
.
.
.
.
.
.
.
.
.
...
.
..
.....
...
.............
.
..
.
.
.
.
.
.
.
.
.
.
..
.......
.
.
.
.
...
.
.
.
.
.
.
.
..
... ....................
..
.
.
.
.
.
.
.
.
.
Tl ..............
...
...
..
..................................................................................................................................................................................................................................................................................................................................................................................
...
.
.
L
.
x
.
A) Lösung des Problems durch Differenzenapproximation der Ableitung:
Der Abschnitt [0, L] wird in n gleiche Teile der Länge h = L/n geteilt: xk = kh, x0 = 0, xn = L. Es sei Tk der
135
Näherungswert zu T (xk ), der berechnet wird. Für alle inneren Punkte wird die Differentialgleichung diskretisiert,
dabei bezeichnet xk±1/2 = xk ± h/2 einen fiktiven Punkt (vgl. S. 25):
1
0
0
λ(Tk+1/2 ) · Tk+1/2
− λ(Tk−1/2 ) · Tk−1/2
=
h
nh
i
h
i
o
1
Tk+1 + Tk
Tk+1 − Tk
Tk + Tk−1
Tk − Tk−1
=
λ0 + µ
·
− λ0 + µ
·
, k = 1, 2, . . . , n − 1 .
h
2
h
2
h
2
Diese Gleichung wird natürlich mit 2h multipliziert.
Im linken Randpunkt x0 = 0 ist T0 = Tl bekannt, und rechts (xn = L) wird mit der einseitigen Ableitung diskretisiert:
0 = (λ(T ) · T 0 )0 x=x
=
k
λ0 + µTn
(3Tn − 4Tn−1 + Tn−2 ) = α(Tn − Tu ) .
2h
Man erhält also insgesamt n + 1 Gleichungen für die n + 1 Unbekannten T0 bis Tn . (Die Gleichung in x0 ist trivial.)
Die n − 1 aus der Differentialgleichung herrührenden Gleichungen sind allerdings nichtlinear wegen der Abhängigkeit
von λ von T .
Zur Lösung des Systems wird die Fixpunktiteration angewandt; sie basiert hier auf der naheliegenden Überlegung,
daß sich λ vermutlich nur wenig ändert. (Die Werte von Tl und Tu sollen nicht sehr weit differieren, so daß die in Frage
kommenden Temperaturen in einem nicht allzugroßen Bereich liegen mögen.) Man schätzt also den Temperaturver(0)
lauf mit Werten Tk (hier wird einfach zwischen Tl und Tu linear interpoliert) und berechnet daraus die λ-Werte des
Gleichungssystems. Sind diese ermittelt und festgelegt, so verbleibt ein lineares System, dessen Lösung keine Mühe
(1)
macht. Die Resultate Tk sind natürlich etwas verfälscht, da die Wärmeleitzahlen nur auf geschätzten Temperaturen
basierten, aber sie sind sicher viel genauer als diese Schätzung. Nun kann man mit Hilfe dieser besseren Werte die
(1)
von λ(Tk ) in den einzelnen Punkten korrekter ausrechnen und ein besseres lineares Gleichungssystem aufstellen.
Dieser Prozeß wird wiederholt, bis sich die Werte nicht mehr ändern.
(m+1)
Man berechnet also einen Satz neuer Näherungswerte Tk
aus dem folgenden linearen System (der besseren Über(m)
sicht wegen sind diese Unbekannte fettgedruckt, während die bekannten vorigen Näherungswerte Tk
in normaler
Schrift erscheinen):
−λ(T (L)) · T 0 (L) = α(T (L) − Tu )
=⇒
−
Tm+1
0
h
(m)
(m)
2λ0 + µ(Tk−1 + Tk
i
(m+1)
) Tk−1
h
(m)
(m)
− 4λ0 + µ(Tk−1 + 2Tk
h
(m)
−
(m+1)
+ Tk+1 ) Tk
(m)
(m)
+ 2λ0 + µ(Tk+1 + Tk
i
i
=
Tl
=
0 , k = 1, 2, . . . , n − 1
=
−αTu .
+
(m+1)
) Tk+1
λ0 + µTn(m) (m+1)
λ + µTn(m) (m+1)
λ + µTn(m)
(m+1)
Tn−2 + 4 0
Tn−1 − 3 0
+ α Tn
2h
2h
2h
Die Matrix dieses Gleichungssystems ist schwach besetzt; sie hat Bandstruktur entlang der Hauptdiagonale (wobei die
letzte Zeile etwas aus der Reihe tanzt). Von diesen Effekt abgesehen nennt man die Matrix auch tridiagonal.
Bezeichnet man die Nicht-Null-Elemente mit einem Sternchen, und die Nullen mit einem Punkt, so hätte im Fall
n = 7 die Matrix die Gestalt


∗ · · · · · · ·
 ∗ ∗ ∗ · · · · · 
 · ∗ ∗ ∗ · · · · 


 · · ∗ ∗ ∗ · · · 


 · · · ∗ ∗ ∗ · · 


 · · · · ∗ ∗ ∗ · 


· · · · · ∗ ∗ ∗
· · · · · ∗ ∗ ∗
und es ist sicher wenig sinnvoll, dieses System mit der universellen Variante des Gauss-Verfahrens zu lösen, vielmehr
kann man diese Methode für den vorliegenden Fall vereinfachen.
Nennen wir die Koeffizienten der n − 1 Gleichungen, die bei der Diskretisierung der Differentialgleichung entstanden
sind, ak , bk und ck : ak Tk−1 + bk Tk + ck Tk+1 = 0. Durch die Hinrechnung verschwinden die Koeffizienten unter
der Hauptdiagonalen. (Man kann sich durch eine theoretische Überlegung überzeugen, daß hier das Pivotelement
immer auf der Hauptdiagonalen genommen werden kann.) Nach dieser Transformation bleiben Gleichungen der Form
pk Tk + qk Tk+1 = rk , und die neuen Koeffizienten pk , qk und rk können rekursiv berechnet werden.
In der ersten Zeile (k = 0) ist p0 = 1, q0 = 0 und r0 = Tl . Das a1 -fache dieser Zeile wird von der zweiten subtrahiert,
damit wird p1 = b1 , q1 = c1 und r1 = −a1 r0 . Im nächsten Schritt wird das a2 /p1 -fache der zweiten Zeile von der
dritten subtrahiert:
p2 = b2 − a2 q1 /p1 , q2 = c2 , r2 = −a2 r1 /p1 .
So geht es Zeile um Zeile weiter. Neben der vorletzten Zeile muß aber auch noch die letzte transformiert werden, die
die abweichende Gestalt dn Tn−2 + an Tn−1 + bn Tn = fn hat. Diese Umrechnung verläuft so:
pn−2 Tn−2 + qn−2 Tn−1
an−1 Tn−2 + bn−1 Tn−1 + cn−1 Tn
dn Tn−2 + an Tn−1 + bn Tn
=
=
=
rn−2
0
fn
=⇒
136
pn−2 Tn−2 + qn−2 Tn−1
pn−1 Tn−1 + qn−1 Tn
a∗n Tn−1 + b∗n Tn
=
=
=
rn−2
rn−1
fn∗
=⇒
=⇒
pn−2 Tn−2 + qn−2 Tn−1
pn−1 Tn−1 + qn−1 Tn
pn Tn
=
=
=
rn−2
rn−1
rn
Damit ist die Hinrechnung beendet, und es kann die einfache Rückrechnung erfolgen. Es ist Tn = rn /pn , und dann
wird Tk = (rk − qk Tk+1 )/pk .
Insgesamt kann die Rechnung durch das folgende Programm ausgeführt werden; dabei wurde auf eine klare Struktur
Wert gelegt und die Programmierung an die Herleitung angelehnt. Diese Variante vergeudet Speicherplatz; es ist
nicht nötig, so viele Felder zu vereinbaren und zu belegen. Bei einer ordentlichen Programmierung kann eine speicherökonomische Version erstellt werden. Darauf sei hier im Interesse der Anschaulichkeit verzichtet. Die Belegung
von p[0] usw. hätte man aus dem Zyklus herausziehen sollen.
Allerdings wird mit nur zwei Sätzen T0 und T1 von Temperaturen gearbeitet (einer hätte auch gereicht), und der
neuberechnete wird jeweils in den alten umgespeichert. Dabei erfolgt ein Vergleich, und wenn sich wenigstens ein
Wert um mehr als ein gewisses ε geändert hat, so wird die Rechnung mit dem neuen Temperatursatz wiederholt.
h:=L/n;
{ Initialisierung der Temperatur: }
for k:=0 to n do T0[k]:=Tl+k*(Tu-Tl)/n;
{ Belegung des Gleichungssystems: }
1:
p[0]:=1; q[0]:=0; r[0]:=Tl;
for k:=1 to n-1 do begin
a[k]:=2*lambda0+my*(T0[k-1]+T0[k]);
b[k]:=-4*lambda0-my*(T0[k-1]+2*T0[k]+T0[k+1]);
c[k]:=2*lambda0+my*(T0[k]+T0[k+1]); end;
dn:=-0.5*(lambda0+my*T0[n])/h; a[n]:=-4*dn; b[n]:=3*dn-alpha; fn:=-alpha*Tu;
{ Hinrechnung: }
for k:=1 to n-1 do begin
p[k]:=b[k]-a[k]*q[k-1]/p[k-1]; q[k]:=c[k]; r[k]:=-a[k]*r[k-1]/p[k-1]; end;
a[n]:=a[n]-dn*q[n-2]/p[n-2]; fn:=fn-dn*r[n-2]/p[n-2];
p[n]:=b[n]-a[n]*q[n-1]/p[n-1]; r[n]:=fn-a[n]*r[n-1]/p[n-1];
{ Rückrechnung: }
T1[n]:=r[n]/p[n];
for k:=n-1 downto 0 do T1[k]:=(r[k]-q[k]*T1[k+1])/p[k];
{ Umspeichern und maximale Abweichung ermitteln: }
max:=0;
for k:=1 to n do begin
if abs(T1[k]-T0[k]) > max then max:=abs(T1[k]-T0[k]);
T0[k]:=T1[k]; end;
{ Rechnung ggfs. wiederholen: }
if max > epsilon then goto 1;
Damit soll ein konkreter Fall gerechnet werden; nehmen wir Tl = 10o C, Tu = 80o C, L = 10mm, λ0 = 2.5kJ · m−1 ·
h−1 · K −1 (etwa Eisen) und α = 4000W · m−2 · K −1 . Für µ wird ein Wert genommen, der λ bei 100o C um 20%
vergrößert; es wäre dies µ = 0.005kJ · m−1 · h−1 · K −1 ·o C −1 .
Die Werte entstammen in dieser Form einem Tabellenwerk; ein Computerprogramm kann nicht mit Maßeinheiten
rechen, also ist es Sache des Programmierers, die Formeln aufzubereiten. In der Regel fährt man am besten, wenn man
für die gesamte Rechnung einheitliche Einheiten festlegt. Wählen wir als Längeneinheit Millimeter und passen wir den
Rest an. Es ist 1kJ=1Wh/3.6, damit wird λ0 = (2.5/3.6) · 10−3 W · mm−1 · K −1 = 6.944 · 10−4 W · mm−1 · K −1 , µ =
1.389 · 10−6 W · mm−1 · K −1 ·o C −1 und α = 4 · 10−3 · W · mm−2 · K −1 .
(m)
Die Werte von Tk sind für n = 8 - ein ziemlich kleiner Wert, aber hier geht es um das m - nachstehend tabelliert.
Man erkennt, daß die Werte für m = 3 im Rahmen der Ausgabegenauigkeit später nicht mehr geändert werden.
(Zehntausendstel Kelvin liegen sicher weit jenseits jeder praktischen Genauigkeitsforderung.) Die Fixpunktiteration
konvergiert also sehr schnell.
m
0
1
2
3
4
0
10.0000
10.0000
10.0000
10.0000
10.0000
1
18.7500
19.0867
19.0854
19.0852
19.0852
2
27.5000
28.0214
28.0145
28.0141
28.0141
3
36.2500
36.8092
36.7949
36.7945
36.7945
4
45.0000
45.4547
45.4339
45.4336
45.4336
5
53.7500
53.9625
53.9381
53.9380
53.9380
5
62.5000
62.3369
62.3137
62.3138
62.3138
7
71.2500
70.5821
70.5665
70.5666
70.5666
8
80.0000
78.7019
78.7017
78.7017
78.7017
Nun zur Diskretisierungsgenauigkeit, also zu dem Fehler, der durch das Ersetzen der Differentialgleichung durch das
algebraische System von diskreten Variablen hervorgerufen wird. Er ist etwa proportional zu h2 ∼ n−2 . Um ihn
praktisch zu analysieren wird das Beispiel mit n = 8, 16, 32, . . . gerechnet, und es werden die Werte ausgegeben, die
sich auf dieselben Stellen beziehen. Bei n = 16 ist das jeder zweite, bei n = 4 jeder vierte usw.. Die Numerierung
137
im Tabellenkopf bezieht sich auf n = 8; die Werte sind die von m = 5, so daß die Fixpunktiteration also schon
abgeschlossen ist:
n
4
8
16
32
64
128
1
19.085216
19.085189
19.085182
19.085180
19.085180
2
28.014363
28.014132
28.014077
28.014064
28.014061
28.014060
3
36.794546
36.794466
36.794447
36.794442
36.794441
4
45.434080
45.433632
45.433527
45.433501
45.433495
45.433493
5
53.938000
53.937871
53.937840
53.937832
53.937830
5
62.314417
62.313764
62.313612
62.313575
62.313566
62.313563
7
70.566588
70.566412
70.566370
70.566359
70.566357
8
78.702575
78.701731
78.701533
78.701485
78.701473
78.701470
Die Werte für n = 128 können wohl als praktisch exakt angesehen werden; für übliche Anwendungen reichen bereits
wesentlich gröbere Diskretisierungen (z. B. n = 8; damit ist diese Rechnung schon fast taschenrechnertauglich). Man
beachte, daß man bei n = 128 eine ziemlich detaillierte Tabelle erhält, die eine ordentliche Kurve zeichnen läßt.
In der nächsten Tabelle stehen die Differenzen der Werte für das jeweilige n zu dem zugehörigen Wert für n = 128,
also in der obigen Tabelle aus jeder Zeile die letzte abgezogen:
n
4
8
16
32
64
1
0.000036
0.000009
0.000002
0.000000
2
0.000303
0.000071
0.000017
0.000004
0.000001
3
0.000105
0.000025
0.000006
0.000001
4
0.000587
0.000138
0.000033
0.000008
0.000002
5
0.000170
0.000041
0.000010
0.000002
5
0.000854
0.000201
0.000048
0.000011
0.000002
7
0.000231
0.000056
0.000013
0.000003
8
0.001105
0.000261
0.000063
0.000015
0.000003
n wird von Schritt zu Schritt verdoppelt; die Abweichungen müßten sich also analog jeweils auf etwa ein Viertel der
vorigen reduzieren. - Man überzeuge sich, daß dies tatsächlich recht genau eintritt.
Abschließend eine Bemerkung zur Verifizierung der Resultate: Die Physik läßt fordern
• limα→∞ T (L) = Tu - idealer thermischer Kontakt am rechten Rand, analog wie links;
• limα→0 T (L) = Tl - thermisch isolierende Oberfläche, dann ist T (x) = Tl =konstant;
• limλ→0 T (L) = Tu - Fall einer Schaumstoffisolierung;
• µ = 0 ⇒ T (x) = ax + Tl mit −λ · a = α(aL + Tl − Tu ).
Daran kann man das Programm testen, indem man für α und λ sehr kleine oder sehr große Werte einsetzt und prüft,
ob sich dieses Verhalten abzeichnet.3
B) Jetzt wird der Fall betrachtet, daß ein Wechselstrom daß Material durchfließe, und zwar senkrecht zur x-Achse.
Dieses wird damit erwärmt. Die Randbedingungen mögen unverändert bleiben.
Die Amplitude des Wechselstroms sei zeitlich konstant und die Frequenz so hoch, daß man davon ausgehen kann,
daß die thermische Trägheit des Materials ein Mitschwingen der Temperatur praktisch verhindert. Diese kann also
als zeitlich stationär angesehen werden, und man kann mit der effektiven Stromstärke rechnen.
Der Wechselstrom fließt hauptsächlich in den oberflächennahen Schichten. Seine Verteilung kann natürlich berechnet
werden, das sei aber hier nicht das Ziel. Nehmen wir der Einfachheit halber an, es sei eine quadratische Funktion, die
in der Mitte der Schicht auf Null fällt:
Ief f = A(2x − L)2 .
Die Leistung - und damit Wärmequelldichte - ist proportional zum Quadrat der Stromstärke, und man erhält die
Differentialgleichung
(λ(T ) · T 0 )0 = −B(2x − L)4 , B > 0 .
An der Diskretisation der rechten Randbedingung ändert sich nichts, und links bleibt natürlich alles wie bisher. Für
die inneren Punkte folgt aus der Differentialgleichung
−B(2xk − d)4 = (λ(T ) · T 0 )0 x=x
=
k
1
0
0
λ(Tk+1/2 ) · Tk+1/2
− λ(Tk−1/2 ) · Tk−1/2
=
h
1
Tk+1 + Tk
Tk+1 − Tk
Tk + Tk−1
Tk − Tk−1
λ0 + µ
·
− λ0 + µ
·
, k = 1, 2, . . . , n − 1 .
h
2
h
2
h
Der einzige Unterschied zum vorigen System ist also, daß diese Gleichungen inhomogen werden.
Ansonsten erfolgt die Rechnung völlig analog (Fixpunktiteration, Ausnutzen der Bandstruktur, ...).
Für B = 10−6 sind nachstehend die für verschiedene n resultierende Werte angegeben:
=
nh
i
h
i
o
3 Was sagt eigentlich das physikalische Verständnis zum vorgegebenen Beispiel - muß T (x) immer flacher oder immer steiler
wachsen? Anders ausgedrückt: ist T (x) konvex oder konkav?
138
n
4
8
16
32
64
128
256
1
35.868746
37.751599
38.245395
38.371687
38.403628
38.411661
2
38.874080
47.697312
50.293801
50.985316
51.163576
51.208851
51.220262
3
56.755671
59.575210
60.339089
60.537776
60.588480
60.601291
4
56.255830
65.513597
68.429813
69.231447
69.441681
69.495575
69.509225
5
74.137944
77.143827
77.978397
78.198748
78.255456
78.269848
5
73.110655
82.483775
85.460871
86.296072
86.518265
86.575701
86.590314
7
88.326285
90.837142
91.561918
91.758105
91.809304
91.822395
8
79.862999
82.005160
83.080035
83.452252
83.562143
83.592077
83.599897
Die Abweichungen, auf die (nicht so exakten) Werte für n = 256 bezogen:
n
4
8
16
32
64
128
1
-2.542915
-0.660062
-0.166267
-0.039975
-0.008033
2
-0.462419
-3.522950
-0.926460
-0.234946
-0.056685
-0.011411
3
-3.845620
-1.026081
-0.262202
-0.063515
-0.012811
4
5.035569
-3.995628
-1.079412
-0.277779
-0.067544
-0.013650
5
-4.131904
-1.126021
-0.291451
-0.071100
-0.014393
5
12.509364
-4.106538
-1.129443
-0.294242
-0.072049
-0.014613
7
-3.496109
-0.985253
-0.260476
-0.064290
-0.013091
8
10.353774
-1.594736
-0.519861
-0.147644
-0.037753
-0.007819
Die Werte für n = 4 liegen jetzt deutlich neben der Realität; der zu x = L liegt unter Tu , während er in Wirklichkeit
darüber liegen muß.
Die Fehler verringern sich nach wie vor etwa um den Faktor 1/4; sie sind aber wesentlich größer. Um eine vergleichbare
Genauigkeit zu erhalten müßte man n sehr groß machen.
Der Verlauf der resultierenden Temperatur ist zunächst nachstehend dargestellt; die punktierte Kurve beschreibt die
Wärmequelldichte c(2x − L)4 (in irgendeinem Maßstab). Wie man sieht führt die Wärmezufuhr im Außenbereich zu
einer Erwärmung der Mitte:
100
80
60
40
20
0
............................................
................
......
.
.
.
.
.
.
.
.
.
.
.....
.......
.
.
.
.
.
..
.
.
.
.
.......
.
.
.
......
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
..... ..... ..... ..... ..... ..... ..... ..... ..... ..... ..... ..... ..... ..... ..... ..... ..... ..... ..... ..... ..... ..... ..... ..... ..... ..... .................... ... ..... ..... ..... ..... ..... ..... ..... ..... ..... ..... ...................... .....
... .
........
..... ..
..........
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
....
..........
..........
. .....
.
.
.
.
.
.
.
.
.
.
.
.
.
.
..
.. ..
..........
..... ..
..........
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
... ....
..........
.........
..... ..
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.....
.........
..........
. ....
.
.
.
.
.
.
.
.
.
.
.
.
.
...
..
.
.. ...
........
..... ..
..
........
.
.
.
.
..
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
..
.
.....
.. .....
..
..
... ...
.....
.
.
.
.
.
.
.
.
.
.
..
... .
.....
..... ..
..
.. ........
.
.
.
.
.
.
.
.. .....
... ....
..... ..
..
...
.
.
.
.
.
.
.
.
.. .
.....
..
... ...
.. ....
.
.
.
.
.
.
.
.
.. ..
.. .... ..
.
..
.....
.
.... ..... ..... . .
..
..
.. ... .....
..
..
.
...... ..
..
..
...
...
.
...
.
..
.....
.....................................
10
Was ist die Ursache für diese Vergrößerung des Fehlers?
Im Proportionalitätsfaktor c des Fehlerterms ch2 ist ein Wert der vierten Ableitung der Lösung enthalten In der
Aufgabe A) war die Lösung fast eine lineare Funktion, und damit war der Betrag der vierten Ableitung klein. Jetzt
ist die Funktionskurve deutlich gekrümmt und dieser Faktor beträchtlich gewachsen.
Dieses Problem wird noch durch die starke Ortsabhängigkeit der rechten Seite - und damit der Lösungsfunktion - der
Differntialgleichung verschärft. Um eine akzeptable Genauigkeit zu erhalten ist eine kleine Schrittweite h, also eine
große Anzahl n von Punkten notwendig. Diese Notwendigkeit einer feinen Schrittweit besteht aber nur in zwei engen
Bereichen - im breiten inneren Streifen könnte man h viel gröber lassen.
Um den Rechenaufwand zu senken kann man nun eine gewisse Schichtdicke l einführen und den x-Bereich von 0 bis l
139
betrachten, weiter den von l bis L − l, und zuletzt den von L − l bis L. In den beiden äußeren Gebieten rechnet man
mit einem feinen h, in der Mitte mit groben Schritten. Man muß nur die Übergänge durch diese - vom Standpunkt
der Physik willkürlichen - Grenzen modellieren. Das geschieht durch die Feststellung, daß in x = l und in x = L − l
die Funktion T (x) und ihre erste Ableitung stetig sein soll. In der diskretisierten Variante bedeutet dies, daß die
Ableitung, nach links genommen, dieselbe sein muß wie die nach rechts genommene.
Betrachten wir x = l, sei l = xM . Links ist die Schrittweite hM = l/M ; rechts ist hZ = (L − 2l)/N , und es soll gelten
1
1
(3TM − 4TM −1 + TM −2 ) =
(−3TM + 4TM +1 − TM +2 ) .
2hM
2hZ
Die Gesamtzahl der Unbekannten ist n = 2M + N .
Die Rechnung ändert sich nicht wesentlich; die Tridiagonalität der Matrix ist jetzt aber in drei Zeilen gestört statt
in einer. Man muß also dreimal eine Sonderbehandlung durchführen.
Der Preis für ein recheneffektives Programm ist ein größerer Aufwand bei seiner Erstellung, und eine etwa dreifache
Länge, denn man ist jetzt gezwungen, für jedes der drei Teilstücke extra zu programmieren.
Kann man diese künstliche - und mithin gekünstelte - Unterteilung vermeiden und bei einem einheitlichen Programm
bleiben?
Natürlich, es gibt noch andere Wege. Beispielsweise kann man mit Differenzenapproximationen für die Ableitung
arbeiten, die verschiedene Schrittweiten erlauben. Die Unterteilungspunkte haben damit nicht mehr den gleichen
Abstand, und man kann sie in den problematischen Randbereichen dichter legen und im Innern weiter auseinander.
Und der Preis? - Operiert man weiterhin mit jeweils drei Punkten bei der Annäherung der Differentialgleichung, so
hat der Fehler jetzt nicht mehr die Größenordnung vom Quadrat der Schrittweite, sondern nur noch ihrer ersten Potenz - er verringert sich also nur noch langsam, und um ein akzeptables Resultat zu erhalten braucht man wiederum
viele Punkte; gerade das, was man vermeiden wollte.
Will man bei der alten Ordnung der Genauigkeit bleinen, so muß man bei veränderlicher Schrittweite vier oder fünf
Punkte zur Darstellung von (λT 0 )0 geranziehen. Damit wird das Programm wieder einheitlich und ohne künstliche
Übergänge, aber die Tridiagonalität ist zum Teufel, und bei der Hinrechnung muß man nicht eine Zeile mit der nächsten verknüpfen, sondern mit den zwei nächsten; obendrein ist pro Schritt mehr zu rechnen. (Und zu allem Überfluß
erfordern noch die zweite und die vorletzte Zeile eine spezielle Behandlung.)
Kurzum, man kann eine Sorte Ärger - oder Aufwand - nur vermeiden, indem man an seiner Stelle anderen wählt.
Jedes Problem hat eine gewisse Schwierigkeit, die einen bestimmten minimalen Aufwand erfordert. Darunter ist keine
Lösung zu haben. In welcher Währung man den Preis zahlt ist egal - die Betrachtung zeigt, es gibt verschiedene
Wege, und jeder hat andere Unbequemlichkeiten. Man kann übrigens weitgehend auf die Numerik verzichten und
durch klassische Mathematik das Problem aufbereiten - das ist aber auch Arbeit, und sie dauert ihre Zeit.
C) Die letzte Bemerkung soll aufgegriffen und diskutiert werden.
Offensichtlich kann die Differentialgleichung ganz einfach geschlossen gelöst werden. Im homogenen Fall (kein Stromfluß) folgt aus (λT 0 )0 = 0 einfach die Konstanz des Klammerausdrucks: λT 0 = C1 .
Nun ist
λT
0
= (λ0 + µT )T
0
d
=
dx
T 2 (x)
λ0 T (x) + µ
2
= C1
=⇒
λ0 T (x) + µ
T 2 (x)
= C1 x + C2 .
2
Aus T (0) = Tl folgt
λ0 Tl + µ
Tl2
= C2 ,
2
und am rechten Rand ist
− [λ0 T (L) + µT (L)] · T 0 (L) = α(T (L) − Tu ) .
(∗)
Aus der quadratischen Gleichung
µ 2
µ
T (x) + λ0 T (x) − C1 x + λ0 Tl + Tl2
2
2
h
i
= 0
erhält man eine Darstellung für T (x), die allerdings noch den Parameter C1 enthält:
λ0
T (x) = −
±
µ
s
λ20
2
µ
+
C1 x + λ0 Tl + Tl2 ,
2
µ
2
µ
h
i
und bei x = 0 ist T (0) = Tl nur dann, wenn man vor der Wurzel das Pluszeichen verwendet.
Dieser Ausdruck ist nun - nebst seiner x-Ableitung - in (∗) einzusetzen; daraus bestimmt sich C1 . Das geht allerdings
nicht als geschlossene Formel, vielmehr muß man an dieser Stelle wieder auf ein numerisches Verfahren zurückgreifen.
Im inhomogenen Fall (Stromfluß) ist die Rechnung noch komplizierter.
Der ’exakte’ Lösungsweg ist also nicht bis zum Ziel durchzuhalten.
Es gibt zwei ’extreme’ Vorgehensweisen bei der mathematischen Behandlung eines Problems: Man versucht es durch
tiefsinnige Methoden geschlossen, also formelmäßig zu lösen, oder man nimmt es ’im Rohzustand’ und ’erschlägt’ es
140
mit einem Computer, d. h. man bekommt eine Zahlenlösung, ohne viel über das Problem nachgedacht zu haben.
Der erste der beiden Wege genießt mehr Ansehen; tatsächlich fördert er das Problemverständnis und bringt mehr
Nutzen. In der Realität werden aber diese beiden extremen Varianten selten benutzt, vielmehr liegen die Wege meist
irgenwo dazwischen: Man bereitet das Problem bis zu einem gewissen Punkt auf und löst es dann numerisch.
Dieser Punkt wird durch verschiedene Faktoren bestimmt:
• Welche Art von Resultat wird benötigt?
• Wie weit kommt man mit den eigenen oder sonstigen erreichbaren mathematischen Kenntnissen?
• Welche Software (und ggfs. Hardware) hat man zur Verfügung?
• Wieviel Zeit hat man für die gesamte Aktion?
Die sachgemäße - und nicht halbwegs zufällige - Wahl dieses Punktes erfordert etwas Erfahrung und Überblick.
Dieses Beispiel sollte folgende Erkenntnisse vermitteln:
• Diskretisierung eines Randwertproblems unter Verwendung von Punkten xk±1/2 zwischen diesen Stellen xk ,
• Überführung eines (ganz speziellen!) Systems quadratischer Gleichungen in lineare, mit Anwendung der Fixpunktiteration,
• effektives Lösen tridiagonaler Gleichungssysteme,
• Ausweg bei einzelnen Störungen der Tridiagonalität,
• Möglichkeit der lokalen Verfeinerung der Schrittweite h durch künstliche Unterteilung des Problems,
• physikalisch untermauerte Methoden der Ergebnisprüfung,
• Möglichkeiten, die mathematischen Parameter (hier: Unterteilungszahl n und Anzahl der Iterationsschritte m)
experimentell zu bestimmen, durch Vergleich mit anderen, ebenso berechneten Werten,
• es gibt immer einen komplizierteren Weg, aber nicht immer einen einfacheren, und
• wenn man am Start ein langes und vielversprechendes Stück des analytischen Weges vor sich sieht, so bedeutet
das nicht, daß er bis zum Ziel führt.
Noch eine Bemerkung zu C); dort hat man ein typisches Problem.
So ein Marathonlauf ist eine echte Schinderei; mit Auto oder Motorrad wäre die Strecke viel schneller und vor allem
leichter zu schaffen.
Natürlich ist das unsportlich und kommt deshalb nicht in Betracht; aber die Lösung eines solchen Randwertproblems
ist kein Sportereignis und fairplay ist nicht gefordert; es soll vielmehr nur effektiv und richtig sein.
Der Beschluß, aufs Auto zu verzichten, wurde an einer Stelle gefaßt, wo man nicht ahnte, daß man sich damit
in Zukunft Probleme einhandeln würde: Vermutlich hatte man selbst oder jemand anderes, dessen Resultate man
verwendete, die Funktion λ(T ) gemessen und beschlossen, die Resultate durch eine lineare Funktion λ(T ) = λ0 +
µT darzustellen; das ging im vorliegenden Fall ganz gut und ist überhaupt so üblich - wo’s geht legt man eine
Ausgleichsgerade.
Diese Vorgehensweise hat viel für sich, aber hier ist sie die Ursache von noch recht weit in der Zukunft liegenden
Problemen, evtl. auch anderer Leute.
Angenommen, die Meßresultate lassen sich auch durch eine geeignet angepaßte Funktion λ(T ) = eβT +γ darstellen,
dann wird die Rechnung viel einfacher.
Und was ist, wenn kein λ(T ) = eβT +γ ordentlich zu den Meßwerten paßt? Nun, die Schar von Funktionen ist groß,
und vielleicht findet man noch etwas Passendes, das λ(T ) mit akzeptabler Genauigkeit ergibt und sich zu etwas
Brauchbaren integrieren läßt.
Es ist sehr wichtig, in sich die Fähigkeit zu entwickeln, im Dickicht des Problems innezuhalten und sich zu fragen:
Wo habe ich mir diese Schwierigkeit eingehandelt, und hätte ich damals etwas anderes nehmen oder machen können?
Im Unterschied zum wahren Leben kann man hier zumeist nochmal zurück und die Entscheidung korrigieren.4
4 In
einer gewissen technischen Disziplin haben sich Autoren redlich mit dem Integral
Z
a
e−x dx
herumgeplagt; dabei ist a ein - mühsam und nicht allzu genau gemessener! - Wert, von dem man weiß, daß er zwischen 0.66
und 0.70 liegt; üblicherweise wählt man a = 0.68.
Das ist in der Regel in Ordnung; hier zwingt einen diese harmlose Festlegung zu der Substitution y = x0.68 mit dy = 0.68 ·
x−0.32 dx:
Z
Z
0.68
1
ex
dx =
y 0.32/0.68 · e−y dy .
0.68
Es ist 32/68=8/17=0.470588... ein krummer Wert; das vorstehende Integral ist nicht geschlossen berechenbar, und wenn man eine
Weile in dicken Büchern sucht wird man feststellen, daß seine Stammfunktion die sogenannte ’unvollständige Gammafunktion’
ist.
Damit hat die Krankheit zwar einen Namen, aber zur Therapie ist nichts gesagt. Diese Feststellung hilft nicht viel weiter. Man
wird jene Funktion nicht tabelliert finden.
141
8.4
Beispiel 4: Nullstellensuche
Gesucht sind die dreißig kleinsten positiven Nullstellen der Funktion
√
√
f (x) = 2 sin x + sin 3x
.
Lösung:
Die Kurve der Funktion f (x) hat im Bereich 0 ≤ x ≤ 60 (der 21 Nullstellen enthält) den folgenden (etwas schematischen) Verlauf:
0
10
20
30
40
50
60
2.5
2.5
.
.
..
...
.....
2.0
1.5
1.0
0.5
0.0
−0.5
−1.0
−1.5
−2.0
−2.5
..
..
.....
......
....
.
.. ....
... ...
..... ....
.... .....
..... .....
.....
... ....
.... ....
... .....
.. ...
....
.. ...
. ...
.... ....
.
.
.
.. ....
.
.
. .
.
.. ..
.. ..
.. ..
. ...
... ....
... ...
... ...
......
..
... ....
.. .....
... .....
.
.
.
... .....
.
..... .....
..... .....
.... .....
.
.
.........
..... .....
..
.. ..
.. ..
.. ..
. ...
.....
... ...
... ..
... ...
... ...
.. ...
... ...
... ...
... ...
... .....
..... .....
..... ....
..... .....
.... .....
..... .....
..... .....
... ....
..... .....
... .....
.
.
.. ..
.. ..
.. ..
.. ..
.. ..
.. ..
. ..
.. ..
.. ....
.. ...
... ...
... ...
.. ...
... ...
... ..
... ...
... ...
... ...
..... .....
.... .....
..... .....
..... .....
..... ....
........ ... ..... .... .....
..... .....
..... ..... ... ....
.
.. ..
.. ..
.. ..
.. ..
.. .... .... .... ...
.. ..
.. .. . .. ....
.. .....
... ... ..
... .....
... ...
.... . ... . ...... .... .. .....
... ..... .....
... ...
.
.
.
.
.
.
.
.
.
.
... ..... ..... ..... .... ...
.
.
.
.... ....
.
.
.
.
... . ...
... ... ... ..... ... ...
. .....
... .
... ..... .....
. .. .. ...
...
... ...
... .. ...
.
.
.
. .... ....
.
...
.
.
.
.
.
.
.
.
.
... .
... ...
... . . ... ...
... ... .... .... ...
... . ....
...
... ..... .....
... .
... ...
......
.
.
.
.
.
.
.
... ...... .. .... ....
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
... .
... .
... . ... ...
... ...
... ...
... ...
... ...
... ...
..... ... ..
.
.
.
.
.
.
.
.
.
.
.
.
.
.
... .
... .
... ... ... ..
... ...
.
.
.
.
... .
.
.
.
.
.
.
.
.
.
.
.
... ..
... ...
... ...
... .
... ..
... .
... ... ..
... ...
... ..
... ..
... ...
... ...
... ...
... ..
... ..
....
... ...
... .
... .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
... ..
.
... .
... ...
.
..
.
.
.
.
.....
.
.
.
.
.
... .
... ...
... ...
... ...
... .
... ...
..
.
.
.
.
.
.
.
.
... ..
.
... .
... ...
.
.
.
.
.
.
.
.
.
.
....
... ...
... ...
... ...
... ...
.
.
.
.
.
.
.
.
.
.
.
....
... .
......
... ...
... ...
... ...
......
...
... ..
... ...
..
... ..
......
....
.
2.0
1.5
1.0
0.5
0.0
−0.5
−1.0
−1.5
−2.0
−2.5
0
10
20
30
40
50
60
√
Wie man sieht wirkt die Kurve etwas chaotische; die Funktion f (x) ist nichtperiodisch, da 3 irrational ist, also mit
1 in keinem rationalen Verhältnis steht. Es ist mithin nicht einfach möglich, aus berechneten Nullstellen die nächsten
vorherzusagen.
Knapp unter x = 50 ist offenbar eine relativ problematische Stelle.
Man könnte die Funktion rechenintensiv mit einer sehr kleinen Schrittweite abtasten; aber es ist trotzdem schwierig zu
garantieren, daß man dabei kein Paar eng benachbarter Nullstellen übersieht. Statt dessen ist es vielleicht günstiger,
zu jeder Stelle x0 einen Bereich anzugeben, in√dem garantiert√keine Nullstelle
liegt.
√
Zunächst ein Fakt: Offenbar ist |f 00 (x)| = | − 2 sin x − 3 sin 3x| ≤ 2 + 3 = 2C mit C = 2.20711.
Nach der Formel von Taylor gilt für diese überall beliebig oft differenzierbare Funktion f (x) mit ξ = ξ(x, x0 ) ∈ (x0 , x)
die Abschätzung
f (x) = f (x0 ) + f 0 (x0 ) · (x − x0 ) +
f 00 (ξ)
(x − x0 )2 ≤ f (x0 ) + f 0 (x0 ) · (x − x0 ) + C(x − x0 )2 = ϕo (x)
2
.
f 00 (ξ)
(x − x0 )2 ≥ f (x0 ) + f 0 (x0 ) · (x − x0 ) − C(x − x0 )2 = ϕu (x)
2
.
Analog ist
f (x) = f (x0 ) + f 0 (x0 ) · (x − x0 ) +
Im nachstehenden Bild ist die Situation um x0 = 2 herum dargestellt. f (x) ist die ausgezogene Kurve; ϕo (x) die
gestrichelte - sie verläuft immer oberhalb von f (x) und hat im vorliegenden Fall keine Nullstelle. Demgegenüber liegt
ϕu (x) unter f (x) und sie wird in beiden Richtungen vor f (x) zu Null:
Etwas Kompromißbereitschaft hilft weiter: Versteift man sich nicht auf die 0.68, sondern ist man bereit, zu 2/3=0.6666... zu
konvertieren, so wird nach einfacher Rechnung
Z
2/3
−2/3
√
ex
dx = −1.5x1/3 · e−x
+ 0.75 π · erf x1/3
mit der wohlbekannten und ausführlich tabellierten Fehlerfunktion erf(x).
142
+c
1
4
3
2
1
0
−1
−2
−3
2
3
....
4
....
....
....
....
3
....
....
....
.....
....................................................................
.................... ..... .....
2
................. .....
....................
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
. . ................
.
...............
.....
.............
....
...............
..... ... 1
. ........................ ..... .....
. ..... .....
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
..... ..... .
. . ................
. . . ...................
0
. . ........................
..
....................
...........................
..
............
..
..
..
−1
..
..
..
..
−2
..
..
..
..
. . −3
.
−4
−4
1
2
3
Sei nun f (x0 ) 6= 0, so haben in einem bestimmten Bereich um x0 herum weder ϕu (x) noch ϕo (x) eine Nullstelle, und
dann hat auch f (x) in diesem Bereich keine Nullstelle.
Praktisch bedeutet dies: Man ermittle alle reelle Nullstellen von ϕu (x) und ϕo (x); es sind mindestens zwei, und
wenigstens eine liegt oberhalb von x0 . Sei x1 > x0 die kleinste derartige Nullstelle, dann hat f (x) zwischen x0 und
x1 keine Nullstelle, und man kann die Nullstellensuche oberhalb von x1 in genau derselben Weise fortsetzen.
Dieses Verfahren leistet mehr als nur die Verhinderung des ’Überspringens’ einer Nullstelle. Wenn letztlich ein x1 nahe
bei einer Nullstelle x∗ gefunden wurde, dann ist der nächste Schritt klein, das quadratische Glied in ϕ - in jedem! also zu vernachlässigen und ϕu und ϕo haben fast dieselbe Nullstelle. Die Formel zur Bestimmung der nächstgrößeren
unteren Grenze zu x∗ wird also praktisch zu einem Newton-Verfahren für x∗ .
Es bleibt noch zu klären, was man zu tun hat, nachdem eine Nullstelle gefunden wurde, denn die obige Überlegung
basierte auf der Voraussetzung f (x0 ) 6= 0. Sei jetzt also x0 = x∗ ; dann wird ϕo (x) = f 0 (x0 ) · (x − x0 ) + C(x − x0 )2 =
(f 0 (x0 ) + C(x − x0 )) · (x − x0 ). Analog ist ϕu (x) = (f 0 (x0 ) − C(x − x0 )) · (x − x0 ); jedenfalls wird x1 = x0 + |f 0 (x0 )/C|.
Das nachstehende PASCAL - Programm realisiert diese Prozedur:
program Nullstellensuche;
label 1, 2;
var x,y,ys,c,h1,h2,h3,h4,h,s,w2,w3,xa : real;
k,l : integer; f : text;
r : array [1..10,1..6] of real;
begin x:=0;k:=0; w2:=sqrt(2); w3:=sqrt(3); c:=0.5*w2+1.5; xa:=0; k:=0;
assign(f,’nullst.dat’); rewrite(f);
1:
ys:=w2*cos(x)+w3*cos(w3*x); x:=x+abs(ys/c);
2:
y:=w2*sin(x)+sin(w3*x); ys:=w2*cos(x)+w3*cos(w3*x);
s:=sqr(ys)-4*c*y;
if s<0 then begin h3:=-1; h4:=-1; end else
begin h3:=-0.5*(ys+sqrt(s))/c; h4:=-0.5*(ys-sqrt(s))/c; end;
s:=sqr(ys)+4*c*y;
if s<0 then begin h1:=-1; h2:=-1; end else
begin h1:=0.5*(ys+sqrt(s))/c; h2:=0.5*(ys-sqrt(s))/c; end;
if h1>0 then h:=h1 else h:=999;
if (h2>0) and (h2<h) then h:=h2;
if (h3>0) and (h3<h) then h:=h3;
if (h4>0) and (h4<h) then h:=h4;
x:=x+h; if h>1.0E-06 then goto 2;
inc(k); if k<11 then begin r[k,1]:=x; r[k,2]:=x-xa; end;
if (k>10) and (k<21) then begin r[k-10,3]:=x; r[k-10,4]:=x-xa; end;
if k>20 then begin r[k-20,5]:=x; r[k-20,6]:=x-xa; end;
xa:=x; if k<30 then goto 1;
143
for l:=1 to 10 do
writeln(f,l:3,r[l,1]:11:6,r[l,2]:9:6,l+10:3,r[l,3]:11:6,r[l,4]:9:6,
l+20:3,r[l,5]:11:6,r[l,6]:9:6); close(f);
end.
Die nachstehende Tabelle enthält die ersten dreißig Nullstellen und die jeweilig Differenz zur vorigen Nullstelle; man
erkennt, daß diese Werte reichlich chaotisch streuen:
k
xk
xk − xk−1
k
xk
xk − xk−1
k
xk
xk − xk−1
1
2.455277
2.455277
11
34.505049
2.443838
21
66.574942
4.356544
2
6.804264
4.348987
12
36.975601
2.470552
22
69.010164
2.435222
3
9.229494
2.425229
13
41.313451
4.337850
23
71.501528
2.491364
4
11.781084
2.551590
14
43.735149
2.421698
24
78.241156
6.739627
5
16.044052
4.262968
15
46.353962
2.618813
25
81.046549
2.805394
6
18.462818
2.418766
16
47.319809
0.965847
26
82.459911
1.413362
7
22.764071
4.301253
17
50.550380
3.230572
27
85.056284
2.596373
8
25.275898
2.511827
18
52.970372
2.419991
28
87.478787
2.422503
9
27.706226
2.430328
19
57.295999
4.325627
29
91.820191
4.341404
10
32.061211
4.354986
20
62.218398
4.922399
30
94.286194
2.466003
Die nächste Tabelle gibt zwei weit auseinanderliegende Nullstellen und zwei eng benachbarte unter den ersten 250
an:
k
xk
xk − xk−1
47
147.254655
2.418973
48
156.499190
9.244535
172
561.756588
2.855438
173
561.897873
0.141285
Anmerkung:
Die vorstehende Tabelle ist - bezogen auf ihren Anspruch - falsch. Sie enthält nicht alle Nullstellen! Die korrigierte
Variante sieht so aus:
k
xk
xk − xk−1
k
xk
xk − xk−1
k
xk
xk − xk−1
1
2.455277
2.455277
11
34.505049
2.443838
21
59.781103
2.485105
2
6.804264
4.348987
12
36.975601
2.470552
22
62.218398
2.437295
3
9.229494
2.425229
13
41.313451
4.337850
23
66.574942
4.356544
4
11.781084
2.551590
14
43.735149
2.421698
24
69.010164
2.435222
5
16.044052
4.262968
15
46.353962
2.618813
25
71.501528
2.491364
6
18.462818
2.418766
16
47.319809
0.965847
26
75.821615
4.320087
7
22.764071
4.301253
17
47.830456
0.510647
27
78.241156
2.419541
8
25.275898
2.511827
18
50.550380
2.719924
28
81.046549
2.805394
9
27.706226
2.430328
19
52.970372
2.419991
29
81.308166
0.261616
10
32.061211
4.354986
20
57.295999
4.325627
30
82.459911
1.151745
Die Nullstellen x17 , x21 , x26 und x29 aus dieser Tabelle fehlen in der ersten.
Entsprechend modifiziert sich teilweise die Tabelle der weit auseinanderliegenden Nullstellen und der eng benachbarten unter den ersten 250:
xk − xk−1
k
xk
142
414.085 515
-
143
418.442 089
4.356 574
193
561.756 588
-
194
561.897 873
0.141 285
Grund für den Fehler war die Nichtbeachtung der Rundungseffekte. In der Theorie stimmte alles; praktisch kommt es
aber in einigen Fällen vor, daß die ausgerechnete Veränderung h, um die x vergrößert wird, einerseits noch größer als
die Schranke ist, bei der x als Nullstelle akzeptiert wird, andererseits aber wegen Rundungsfehler geringfügig zu groß
wird; im Resultat liegt das errechnete x sehr genau in der Nullstelle, aber ein kleines bißchen oberhalb dieser. Damit
144
ist die Nullstelle faktisch ermittelt; sie wird aber wegen des im letzten Schritt zu großen h nicht als solche akzeptiert,
und es wird der nächste h-Schritt eingeleitet. Der führt aber zur nächsten Nullstelle, und damit ist eine übersehen.
Auswege:
1. Man könnte mit doppelter Genauigkeit rechnen und die Fehlerschranke ε für die Akzeptanz der Nullstelle beibehalten; damit würde vermutlich das theoretisch unmögliche und nur durch Rundungsfehler verursachte Überspringen
der Nullstelle vermieden. Man landet dann vor der Nullstelle und macht noch einen Schritt, der ein sehr kleines h
liefert, so daß die Nullstelle akzeptiert wird.
2. Man kann die berechnete Schrittweite h anschließend noch etwas kürzen; z. B. indem man zu x nur 0.9h addiert.
Dies ist die simpelste Variante; sie vergrößert die Rechenzeit ein wenig. Mathematisch gesprochen: das Verfahren wird
dadurch nur noch linear konvergent.
3. In jedem Schritt berechnet man sowieso den Funktionswert y = f (x); das läßt sich ausnutzen, um das Überspringen
einer Nullstelle zu registrieren. Man merkt sich den alten Funktionswert ya zum vorigen x; wenn der neue Wert y
ein anderes Vorzeichen hat (y · ya < 0), so ist das neue x eine Nullstelle. Die Bedingung h < ε wird also um diese
Bedingung ergänzt; es resultiert das folgende Programm:
program Nullstellensuche;
label 1, 2, 3;
var x,y,ys,c,h1,h2,h3,h4,h,s,w2,w3,xa,ya : real;
.....
assign(f,’nullst.dat’); rewrite(f); ya:=0;
1:
ys:=w2*cos(x)+w3*cos(w3*x); x:=x+abs(ys/c);
2:
y:=w2*sin(x)+sin(w3*x); ys:=w2*cos(x)+w3*cos(w3*x);
if y*ya < 0 then goto 3;
.....
x:=x+h; ya:=y; if h>1.0E-06 then goto 2;
3:
ya:=0; inc(k); if k<11 then begin r[k,1]:=x; r[k,2]:=x-xa; end;
.....
Zu Beginn und nach jeder gefundenen Nullstelle wird ya = 0 gesetzt, so daß die Bedingung y · ya < 0 im nächsten
Schritt nicht erfüllt ist; ansonsten würde das nächste berechnete x gleich wieder als Nullstelle angesehen, obwohl es
keine ist.
Der eingetretene Fehler war nicht geplant, aber lehrreich. Er zeigt sehr drastisch, wie Dreckeffekte den theoretisch
richtigen Ablauf torpedieren können. Man beachte, daß dieser Fehler unter 30 Werten nur viermal auftrat, und zwar
erstmals beim siebzehnten! Ein Testen des Programms durch peinliche Kontrolle der ersten zehn Werte hätte die
Illusion einer korrekten Arbeit vermittelt.
Ergänzung:
In der Diskussion dieser Aufgabe tauchte die Frage auf, wie sich das Programm im Falle mehrfacher Nullstellen
verhält.
Es soll zunächst die Frage nach der Existenz mehrfacher Nullstellen behandelt werden; sei also x eine - zumindest doppelte Nullstelle von f (x), dann gilt
√
√
√
√
√
2 sin x + sin 3x = 0 und
2 cos x + 3 cos 3x = 0 .
Der zweite Summand wird auf die andere Seite gebracht, und die entstandenen Gleichungen werden quadriert:
√
√
2 sin2 x = sin2 3x und 2 cos2 x = 3 cos2 3x .
Dieses Gleichungspaar wird addiert:
2 = 1 + 2 cos2
√
3x
=⇒
cos
√
√
2
3x = ±
2
.
Dann gilt aber - mit einem Koeffizienten ν = ±1 auch
√
sin 3x = ±ν
also
√
2
2
,
√
√
√
√
2
2
2 sin x ± ν
= 0 und
2 cos x ±
= 0 .
2
2
√
Diese beiden Gleichungen werden durch 2 geteilt, der zweite Summand kommt nach rechts und man dividiert sie
durcheinander; es folgt
tan x = ν
.
145
Folglich gelten die beiden Bedingungen:
tan x = ν
=⇒
x =
π
+ kπ
4
Damit erhält man endgültig
und
cos
√
√
2
3x = ±
2
=⇒
√
π
3x =
+ lπ
4
.
π
+ lπ
1 + 4l
3x
=
= π4
,
x
1
+ 4k
+ kπ
4
√
und diese Gleichung ist falsch, denn 3 ist irrational. Also war die Rechnung von Anfang an unmöglich, folglich gibt
es bei dieser Funktion keine doppelten oder mehrfachen Nullstellen.
1. Anmerkung: Damit ist allerdings nichts ausgesagt über die Existenz von Extremwerten sehr nahe an der x-Achse,
also von ’beinahe - doppelten’ Nullstellen.
√
√
2. Anmerkung: Diese Rechnung ist zutiefst akademisch und nur sinnvoll, wenn man die Faktoren 2 und 3 wirklich
im Wortsinne nimmt. Ist man hingegen bereit, sie durch Näherungswerte - z. B. auf zwölf Kommastellen genau - zu
ersetzen, so wird diese Betrachtung hinfällig.
3. Anmerkung:
Billigen wir dieser Rechnung einen Sinn zu, so ergibt sich, daß ein abstrakter Fakt wie die Irrationa√
lität von 3 plötzlich von praktischen Nutzen ist.
√
3 =
√
Die Überlegungen ergeben, daß das dargestellte Programm bei Extremwerten sehr nahe an der Achse - also z. B.
näher als der Rundungsfehler der Berechnung von f (x) - völlig hilflos wird. Ein denkbarer Ausweg wäre ein noch viel
intelligenteres Programm, das kritische Stellen erkennt und in der Nähe solcher Probleme seine Rechengenauigkeit d. h. die Stellenzahl seiner Arithmetik - selbständig erhöht, bis es die Situation mit Sicherheit ’begreift’, also genauer
als die Rundungsfehler analysiert.
Man bedenke auch, daß die Werte x, in denen f (x) vom Programm berechnet wird, diskret liegen, also nicht beliebig
dicht ausfallen. Und diese Dichte nimmt mit wachsendem x ab. Setzen wir z. B. sechstellige dezimale Gleitkommazahlen voraus, so kommt nach 0.111 111 als nächster Wert eben 0.111 112 im Abstand von 0.000 001; dagegen folgt
auf 111.111 sofort 111.112 im Abstand 0.001. Die halbwegs exakte Berechnung der Nullstellen von f (x) für große
Werte von x ist folglich in vielerlei Hinsicht problematisch.
146
Kapitel 9
Literatur
Die betrachteten Verfahren sind - teilweise ergänzt und mit Variationen - in den gängigen Formelsammlungen mehr
oder weniger ausführlich beschrieben. Das einfache Nachschlagen der Formeln ist also sicher nicht das Problem.
Ein altes, aber in vielerlei Hinsicht immer noch unübertroffenes Werk ist
R. W. Hamming: Numerical Methods for Scientists and Engineers, McGraw-Hill Book Company, Inc.,
dessen Vorteile darauf beruhen, daß es von einem Mathematiker mit enormer Erfahrung sowohl im Rechnen als auch
in der Kommunikation mit Praktikern geschrieben wurde. Neben nützlichen Kommentaren enthält es auch eine Reihe
wertvoller Tricks und Kniffe.
Die weiteren Bücher sind Angebote; die Reihenfolge bedeutet keinerlei Wertung. Man suche sich ggfs. dasjenige
heraus, in dem die interessierende Frage am besten abgehandelt ist:
• H. Schwetlick, H. Kretzschmar, Numerische Verfahren für Naturwissenschaftler und Ingenieure, Fachbuchverlag Leipzig
• J. Werner, Numerische Mathematik 1 + 2, Vieweg-Studium, Bd. 32, 33: Aufbaukurs Mathematik
• R. Mohr, Numerische Methoden in der Technik, Vieweg
• R. Plato, Numerische Mathematik kompakt, Vieweg
• G. Opfer, Numerische Mathematik für Anfänger, Vieweg
Zum Thema ’Berechnung elementarer und höherer Funktionen’ sei nochmals verwiesen auf
- M. Abramowitz, I. A. Stegun Handbook of mathematical functions, Dover Publications, Inc.
- Spravoqna Matematiqeska Biblioteka: Matematiqeski$
i analiz
L. A. Lsternik, O. A. Qervonenkis, A. P. npol~ski$
i:
Vyqislenie lementarnyh funkci$
i, FIZMATGIZ, Moskva, 1963
- Y. L. Luke, Mathematical functions and their approximations, Academic Press, Inc.
147
Sachwortverzeichnis
Aitkensches ∆2 -Verfahren 17, 29, 67
Anfangswertproblem 108
Äquidistante Stützstellen 93
Arithmetisches Mittel 105
Arkusfunktionen , Berechnung der 90
Ausgleichsfunktion 105
Auslöschung 14
Bandstruktur 136
Barriereverfahren 85
Belegungsfunktion 100
Bereich, zulässiger 78
Blockmatrix 62
Chaos 115
Differentialgleichung
- explizite 108, 120, 126
- implizite 108, 126, 127
- mit Differenzenverfahren 26, 135, 63
- semiimplizite 120, 120, 127
- steife 126
Differenz, erste (zweite) 17, 131
Differenzenformeln
- einseitige, 1. Ableitung 23
- zentrale, 1. Ableitung 22
- 2. Ableitung 25
Differenzengleichung 26
Dominierende Hauptdiagonale 65
Einbettung 73
Einschließung 29, 32
Einschrittverfahren 115
Einzelschrittverfahren 65
Erste Differenz 17
Eulersches Polygonzugverfahren, vorwärts 115
- rückwärts 126
Explizite Differentialgleichung 108
Exponent 10
Exponentialfunktion , Berechnung der 88
Extrapolation 94, 75
Extremum, lokales 78
Fehlerabschätzung
- Gesamtschrittverfahren 67
- a priori, a posteriori 67
Fiktive Punkte 25, 136
Fixpunkt 40
Fixpunktiteration 40, 43, 136
- für Systeme 68
Fourierkoeffizienten 102
-reihe 102, 129
Gausssche Normalgleichung 60
Gauss-Verfahren 56
Gesamtschrittverfahren 65
- Fehlerabschätzung 67
Gewichtsfunktion 100
Gitterpunkt 26
Gleichabständige Stützstellen 93
Gleichung, quadratische 15
Gleitkommazahl 10
Goldnener Schnitt 20
- Verfahren vom 21
Gültige Ziffern 14
Hauptdiagonale, dominierende 65, 97
Heunsches Verfahren 117
Heuristische Methode 83
Horner-Schema 48
Idealgleichungen 105
Implizite Differentialgleichung 108
Interpolation 91, 112
- nach Newton 92
- nach Lagrange 92
Intervallarithmetik 58
Intervallhalbierung 29
Iterationsverfahren 28
- linear konvergentes 29
- quadratisch konvergentes 29
- superlinear konvergentes 29, 31
Knoten 91
Kontraktion 40
Konvergenzordnung 28
Kubisch konvergentes Verfahren 38
Linear konvergentes Verfahren 29
Lineare Regression 105
Linearer Trend 105
Lorarithmus , Berechnung des 89
Lokales Extremum 78
Lösung, verallgemeinerte 59
Mantisse 10
Maschenpunkt 26
Maschinengenauigkeit 11
Matrix
- Block- 62
- mit Bandstruktur 136
- schwach besetzt 26, 63, 136
- sparse 26, 63
- tridiagonal 136
Mittel, arithmetisches 105
Moment 96
Nachiteration 58
Nebenbedingung 78, 85
Newton-Verfahren 34
- für Systeme 69
- vereinfachtes 37, 71
Normalgleichung, Gausssche 60
Nullkurve 52, 55
Nullstellenaufgabe 28
Optimierung
- diskrete 79
- stetige 79
Orthogonale Funktionen, - Polynome 102, 103
Pivotwahl 56
- in tridiagonalen Systemen 27, 136
- totale 57
- Spaltenpivotisierung 57
- Zeilenpivotisierung 57
Polygonzugverfahren, Eulersches, vorwärts 115
- rückwärts 126
148
Punkte, fiktive 25
Quadratische Gleichung 15
Quadratisch konvergentes Verfahren 29, 35
Randwertproblem 108
Regression, lineare 105
Regula falsi 30
- vereinfachte 33
Restgliedbetrachtung 129
Runge-Kutta-Formel, klassisch 118
- allgemein 119
- eingebettete 123
Schlupfvariablen 78
Schrittweitensteuerung 121
Sekantenverfahren 30
- vereinfachtes 33
Selbstabbildung 40
Simplex 84
Skalarprodukt von Funktionen 101
Skalierung eines Systems 57
Spline, -funktion 95, 116
Startwert 28, 36
Strafverfahren 86
Stützstelle 91
- äquidistante, gleichabständige 93
Superlinear konvergentes Verfahren 29
Tangentenverfahren 35
Trend, linearer 105
Winkelfunktionen , Berechnung der 90
Vandermonde 91
Verallgemeinerte Lösung 59
Vieta, Satz von - 45, 52
Vorzeichen 10
Ziffern, gültige 14
Zulässiger Bereich 78
149