Einführung in die Numerische Mathematik für Chemiker

Einführung in die Numerische
Mathematik für Chemiker
1. Auflage, Stand vom 8. November 2016
Bernd Hartke
Theoretische Chemie
Institut für Physikalische Chemie
Max-Eyth-Straße 2
Erdgeschoß, Raum 29
Tel.: 0431/880-2753
[email protected]
http://ravel.pctc.uni-kiel.de
“Sprechstunde” : jederzeit nach Vereinbarung
Numerik für Chemiker • Prof. Dr. B. Hartke, Universität Kiel, [email protected]
Einleitung
Ziele der Veranstaltung
• erstes Grundverständnis von numerischer im Gegensatz zu analytischer
Mathematik
• Erstellung und Verwendung eigener Programme statt fertiger “apps”
• Verwendung von professionellen numerischen Bibliotheken
• Hintergrundwissen für vorgefertigte Programme der angewandten Mathematik und numerischen Simulation in Physik, Chemie,. . .
KEINE Ziele der Veranstaltung
• detaillierte Einführung in spezielle tools, insbesondere:
– TheoChem-Pakete (Gaussian, Turbomole, Molpro, Orca, . . . )
– algebraisch-numerische Mathe-Programme (Mathematica, Maple, . . . )
– Programmiersprachen (Fortran, C, C++, Java, Python, . . . )
• physikalisch- oder theoretisch-chemischer Stoff
2
Numerik für Chemiker • Prof. Dr. B. Hartke, Universität Kiel, [email protected]
Veranstaltungsformat
• mehrere thematische Kapitel; zu jedem Kapitel gibt es:
– eine Vorlesungsstunde: Einführung in die theoretischen Grundlagen;
Besprechung des zugehörigen Aufgabenblatts
– eine betreute Übungsstunde
• alle Skriptseiten und alle Aufgabenblätter von meiner homepage als
pdf-Dateien herunterladbar:
http://ravel.pctc.uni-kiel.de → teaching
→ Numerical Mathematics for Chemists
(Achtung: Inhalt wird sich während des Semesters fortlaufend ändern)
• die Benotung erfolgt über die Bearbeitung der Übungsaufgaben:
– abzugeben sind:
∗ mindestens: lauffähiger Programmtext, in Octave/Matlab oder
Fortran
∗ keine ausführbaren Programme
∗ ggf. (als pdf-Datei): output, Antworten auf Fragen, weitere Erläuterungen (z.B. bei Schwierigkeiten), etc.
– Funktionierende Programme sind anzustreben.
In Ausnahmefällen reicht es, wenn für mich aus dem Programmtext
klar erkennbar ist, daß die Prinzipien verstanden wurden.
– Abgabe der Aufgaben am besten per e-mail:
[email protected]
[email protected]
3
Numerik für Chemiker • Prof. Dr. B. Hartke, Universität Kiel, [email protected]
Inhaltsplan
1. Einführung in grundlegende Programmierkonzepte
(Octave/Matlab, Fortran)
2. Zahlendarstellung, Fehler, Konditionszahl
3. Differentiation
4. Integration: Trapezregel, Simpson, Gauß;
Anwendung: überall
5. Zufallszahlen und Monte-Carlo-(MC)-Integration
Anwendung: MC-Simulationen von Gasen, Flüssigkeiten,. . .
6. Suche nach Nullstellen und Extremwerten: Newton et al.
Anwendung: Lösung analytisch unlösbarer Gleichungen; zahlreiche Optimierungsprobleme
7. gewöhnliche Differentialgleichungen (Euler, Runge-Kutta)
Anwendung: z.B. einzelne Gleichungen der Kinetik
8. DGL-Systeme und partielle DGLs
Anwendung: komplizierte Kinetiken, klassische Mechanik, Quantenmechanik, Wärmeleitung, Elektrodynamik, Akustik, Strömungsdynamik,. . .
9. Lösung linearer Gleichungssysteme (inkl. Matrixinversion);
Anwendung: überall, z.B. Regression ( Fit“) und Interpolation
”
10. Matrixdiagonalisierung: Eigenwertproblem;
Anwendung: Quantenmechanik, stationäre Lösungen der Schrödingergleichung
11. lineare Regression, χ2 -Statistik; nichtlineare Regression (Levenberg-Marquardt);
Spline-Interpolation;
Anwendung: z.B. Anpassung von Modellfunktionen an Meßdaten
Vorwissen-Umfrage
4
Numerik für Chemiker • Prof. Dr. B. Hartke, Universität Kiel, [email protected]
Literaturempfehlungen:
• W. H. Press, B. P. Flannery, S. A. Teukolsky und W. T. Vetterling:
Numerical Recipes“, Cambridge University Press, Cambridge, 1990:
”
sehr gut geschriebene Einführung in die Grundalgorithmen der Numerischen Mathematik, mit Beispielprogrammen; weit verbreitetes Standardwerk.
• Roland W. Freund und Ronald W. Hoppe: “Stoer/Bulirsch: Numerische
Mathematik 1 und 2”, Springer, Berlin, 10. Auflage, 2007:
bewährtes Standardwerk deutscher Mathe-Fakultäten zur Numerischen
Mathematik; klare Darstellung, aber etwas “mathematischerer Stil”.
• M. Hermann: “Numerische Mathematik”, Oldenburg, 2006:
gut zugängliches Buch, leider ohne Differentialgleichungen und Optimierung.
• Peter Deuflhard und Andreas Hohmann: “Numerische Mathematik 1,2,3:
Eine algorithmisch orientierte Einführung”, deGruyter, Berlin, 4. Auflage,
2008:
Band 1 bietet eine allgemeine Einführung in diverse Themen, Band 2/3
beschäftigen sich mit Differentialgleichungen; klarer Text, leider keine
Behandlung von Optimierung.
• A. Neumaier: Introduction to Numerical Analysis“, Cambridge Univer”
sity Press, Cambridge, 2001:
gutes Buch eines Genies in der Numerischen Mathematik.
• H. R. Schwarz und J. Waldvogel (Hrsg.): Numerische Mathematik“,
”
Teubner-Verlag, 1997:
umfassender Klassiker, aber etwas schwerer zugänglich.
• G. H. Golub und C. F. van Loan: Matrix Computations“, Johns Hop”
kins University Press, 1989, 1993:
Klassiker zur linearen Algebra; ziemlich mathematischer“ Stil; für De”
tailinformationen zu linearen Gleichungssystemen und zum Eigenwertproblem.
• P. E. Gill, W. Murray and M. H. Wright: “Practical Optimization”,
Academic Press, 1981:
Spezialbuch zur Optimierung mit vielen Praxistips; Herleitungen leider
nicht immer selbsterklärend.
5
Numerik für Chemiker • Prof. Dr. B. Hartke, Universität Kiel, [email protected]
1
Minimaleinführung ins Programmieren
1.1
Fortran
siehe separates Fortran-Einführungsskript
1.2
Octave/Matlab
siehe Octave-Einführung in Henrik Larssons Numerikskript WS15/16
1.42
Welche Programmiersprache soll ich nehmen?
Das ist weitestgehend egal, u.a.:
• alle Numerikalgorithmen sind programmiersprachenunabhängig;
• die grundlegenden Sprachstrukturen (Felder, Schleifen, Verzweigungen)
gibt es überall in sehr ähnlicher Form.
Andere Entscheidungshilfen:
• kleines Hilfsprogramm vs. großes software-Projekt
• eigene Entwicklung für Eigenbedarf vs. kollaboratives multi-user-Paket
• Syntax:
– langatmig aber gut lesbar vs. kurz aber kryptisch
?
– frei = versteckte Komplexität
• interpretiert vs. compiliert
• virtual machine vs. OS/hardware-spezifische compiler/interpreter
• Verfügbarkeit ausgefeilter Entwicklungsumgebungen (Editor mit Syntaxhighlighting und Inhaltshilfen, integrierte debugger/profiler, integrierte
Versionsverwaltung, . . . )
• Verfügbarkeit professioneller Bibliotheken (BLAS, LAPACK, MKL, etc.;
daran hängt letztlich die Laufzeiteffizienz und wieviel code man selbst
schreiben muß)
6
Numerik für Chemiker • Prof. Dr. B. Hartke, Universität Kiel, [email protected]
2
Elementare Grundlagen
2.1
Zahlendarstellung
Grundproblem:
“So gut wie alle” reellen Zahlen haben unendlich viele signifikante Stellen
(egal in welcher Basis). ABER: Der Computerspeicher ist endlich.
Grundsätzliche Folgen für die numerische Praxis:
• begrenzte Anzahl Stellen
• es gibt eine betragsmäßig größte darstellbare Zahl
• miteinander verrechnete Zahlen sollten ähnlich groß sein
Zahlendarstellung im Computer ist binär, aber mit weiteren technischen
Tricks. Alle Details: siehe Skript WS15/16 (Henrik Larsson)
2.1.1
Ganze Zahlen (integers)
# bits
8
16
32
64
8
16
32
64
Vorzeichen octave-Name
unsigned
unsigned
unsigned
unsigned
signed
signed
signed
signed
uint8
uint16
uint32
uint64
int8
int16
int32
int64
min
max
0
255
0
65 535
0
4 294 967 295
0 18 446 744 073 709 551 615
−128
127
−32 768
32 767
−2 147 483 648
2 147 483 647
−9 223 372 036 854 775 808 9 223 372 036 854 775 807
Durch die Zweierkomplementdarstellung (siehe Skript WS15/16 Henrik Larsson) sind vorzeichenbehaftete ganze Zahlen “seltsam angeordnet”:
Binärwert
8-bit-Zweierkomplement
00000000
00000001
···
01111110
01111111
10000000
10000001
···
11111110
11111111
0
1
···
126
127
-128
-127
···
-2
-1
7
Numerik für Chemiker • Prof. Dr. B. Hartke, Universität Kiel, [email protected]
Was bei “Überlauf” des darstellbaren Zahlenbereichs passiert, hängt u.a. ab
von der hardware, der Programmiersprache und ggf. den Compileroptionen:
• ohne geeignete Compileroptionen verhalten sich Sprachen wie C, Fortran
und viele andere so wie dieses C-Programm:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#include<stdio.h>
int main(){
signed char a; //8 bit lang, entspricht int8 in octave
unsigned char b; //entspricht uint8 in octave
a = 127;
b = 255;
printf (”a = %d\n”,a);
printf (”b = %d\n”,b);
a = a + 1;
b = b + 1;
printf (”a + 1 = %d\n”,a);
printf (”b + 1 = %d\n”,b);
a = a + 999;
b = b + 999;
printf (”a + 1000 = %d\n”,a);
printf (”b + 1000 = %d\n”,b);
}
führt nach der Übersetzung in Maschinensprache zur Ausgabe von
a
b
a
b
a
b
=
=
+
+
+
+
127
255
1 = -128
1 = 0
1000 = 103
1000 = 231
Ob und wie das detektiert bzw. verhindert werden kann, hängt sehr
stark von der Programmiersprache und dem Compiler ab. Schwierig ist
auch, daß es nach dem Überlauf i.d.R. für Vorsichtsmaßnahmen zu spät
ist. Machbar und portabel können aber schon einfache Lösungen wie
diese sein:
– Tests der Art if (a+1 > a) ...
– temporäre Verwendung von real-Variablen
(s.u.; Vorsicht: ggf. Genauigkeitsverlust!)
– temporäre Verwendung von integer-Variablen mit mehr bits.
8
Numerik für Chemiker • Prof. Dr. B. Hartke, Universität Kiel, [email protected]
• das Verhalten von octave/matlab ist anders:
– keine Warnung bei Überlauf
– stattdessen wird der größte/kleinste mögliche Wert verwendet
1
2
3
4
5
6
7
8
9
>> a = int8(127) % ganze Zahl mit einer Darstellung von 8 Bits
a = 127
>> a = a + 1 %addiere
a = 127
>> a = int8(−128);
>> a − 1
ans = −128
>> a + 20000
ans = 127
Ob das “besser” ist, ist Geschmackssache. . .
Da ganze Zahlen (direkt oder indirekt) häufig als “Zeiger” auf Speicheradressen
verwendet werden, ist integer-overflow ein Einfallstor für Computerviren.
Selbst Profis vergessen gelegentlich die Endlichkeit der integers:
• 2014 war die Zahl der Klicks des Youtube-Videos “Gangnam Style” auf
einmal negativ, da die Zahl zu groß für die verwendete signed-integerDarstellung geworden war.
• 1996 stürzte eine unbemannte Ariane5-Rakete ab, da eine Gleitkommazahl in eine ganze Zahl konvertiert wurde und dann jenseits des
ganzzahlig darstellbaren Bereichs lag.
2.1.2
Reelle Zahlen (reals)
Binäre Darstellung einer reellen Zahl:
(−1)v · M · 2e
(1)
mit Vorzeichenbit v, m-stelliger Mantisse M und Exponent e.
• Für x 6= 0 wird e so gewählt, dass das erste Bit in der Mantisse ungleich
Null ist (normalisierte Darstellung); dann muß es nicht gespeichert
werden (implizites erstes Bit)
• Ist die darzustellende Zahl zu klein für die normalisierte Form (e < emin ),
so kommt es zum Exponentenunterlauf (underflow) in den subnormalen
Zahlenbereich. Dort sinkt die Darstellungsgenauigkeit stetig, bis alle
Ziffern 0 sind.
9
Numerik für Chemiker • Prof. Dr. B. Hartke, Universität Kiel, [email protected]
• spezielle Zeichen/Formen:
Exponent
normalisierte Form
denormalisierte Form
±0
±inf
NaN
Mantisse
M ∈ [2−1 , 1 − 2−m ]
M ∈ [2−m , 2−1 − 2−m ]
0
0
6= 0
e ∈ [emin + 1, emax − 1]
e = emin + 1
e = emin
e = emax
e = emax + 1
• NaN (not a number ) ergibt sich u.a. bei Division durch Null
• ±inf tritt bei einem Exponentenüberlauf (overflow) auf. Die Zahl ist
zu groß, um dargestellt zu werden.
• Die meisten reellen Zahlen lassen sich nicht exakt darstellen:
1
2
3
4
>>
ans
>>
ans
printf(’%20.17f\n’,0.3) %0.3 kann nicht exakt wiedergegeben werden
= 0.29999999999999999
printf(’%20.17f\n’,0.5) %genaue Darstellung, da 0.5 = 1/2
= 0.50000000000000000
• Dies führt zu entsprechenden Rundungsfehlern:
1
2
3
4
5
6
7
8
>> if 1.0 − 0.8 − 0.2 == 0
disp( ’ 1.0 − 0.8 − 0.2 ist genau Null’);
else
disp( ’ 1.0 − 0.8 − 0.2 ist NICHT genau Null’);
end
1.0 − 0.8 − 0.2 ist NICHT genau Null
>> printf(’%20.17f\n’,1.0 − 0.8 − 0.2);
−0.00000000000000006
Deshalb sollte man bei real-Zahlen nie auf exakte Gleichheit testen:
1
2
3
4
5
6
>> if 1.0 −
disp( ’ 1.0
else
disp( ’ 1.0
end
1.0 − 0.8 −
0.8 − 0.2 < 1.0e−8
− 0.8 − 0.2 ist ziemlich genau Null’);
− 0.8 − 0.2 ist deutlich verschieden von Null’);
0.2 ist ziemlich genau Null
• Aufgrund der halbexponentiellen Darstellung Gl. 1 sind die exakt darstellbaren Zahlen logarithmisch auf der Zahlenskala verteilt. Beispiel für
M bestehend aus drei Bits und e ∈ [−1, 2]:
0
5 7
16 16
1 3 1
4 8 2
5
8
7
8
3
4
7
4
1
5
2
2
3
2
10
7
2
3
Numerik für Chemiker • Prof. Dr. B. Hartke, Universität Kiel, [email protected]
• Maschinengenauigkeit (“Maschinenepsilon”): maximaler relativer Abstand
zweier benachbarter, normalisierter real-Zahlen (m Mantissenstellen,
Unterschied von 1 in der letzten Stelle):
2−m
= 21−m = 2
−1
2
(2)
• Skript berechne_eps.m zum Berechnen von :
1
2
3
4
5
6
7
8
disp( ’Berechne das Maschinenepsilon’);
meps = 1.0;
while 1.0 + 0.5 ∗ meps > 1.0
meps = meps ∗ 0.5;
end
fprintf ( ’Berechnetes Maschinenepsilon:
%20.17e\n’,meps);
fprintf ( ’Analytisch berechnetes Maschinenepsilon: %20.17e\n’,2 ∗ 2ˆ(−53)); %
Mantisse: 52 bits + implizites erste bit = 53
fprintf ( ’ Intern verwendetes Maschinenepsilon: %20.17e\n’,eps); %eps ist eine
Konstante in octave
• Ausgabe:
1
2
3
4
5
>> berechne eps
Berechne das Maschinenepsilon
Berechnetes Maschinenepsilon:
2.22044604925031308e−16
Analytisch berechnetes Maschinenepsilon: 2.22044604925031308e−16
Intern verwendetes Maschinenepsilon: 2.22044604925031308e−16
Gebräuchliche Darstellungen in den meisten Sprachen:
• single precision:
– 32 bit (4 byte):
23(+1) bits Mantisse, 8 bits Exp. (e ∈ [−126, 129]), 1 bit Vorzeichen
– Wertebereich der normalisierten Zahlen: 1.17 · 10−38 − 3.4 · 1038
– Wertebereich der denormalisierten Zahlen: 1.4 · 10−45 − 1.17 · 10−38
– Genauigkeit: = 2−24 = 6 · 10−8
• double precision:
– 64 bit (8 byte):
52(+1) bits Mantisse, 11 bits Exp. (e ∈ [−1022, 1025]), 1 bit Vorz.
– Wertebereich der normalisierten Zahlen: 2.22 · 10−308 − 1.797 · 10308
– Wertebereich der denormalisierten Zahlen: 3.9 · 10−324 − 2.22 · 10−308
– Genauigkeit: = 2−53 = 1.1 · 10−16
11
Numerik für Chemiker • Prof. Dr. B. Hartke, Universität Kiel, [email protected]
Auch bei reals sind schon gravierende Praxisfehler aufgetreten:
• 1992 wurde bei der Schleswig-Holsteiner Landtagswahl aufgrund eines
Rundungsfehlers fälschlicherweise angenommen, daß die Partei Die Grünen die 5 %-Hürde überschritten hat.
• Im ersten Golfkrieg hat eine Patriot-Rakete 28 US-Soldaten getötet, da
die Zeit in Inkrementen von 1/10 gezählt wurde. 1/10 hat allerdings keine
endliche binäre Zahlendarstellung, sodaß Rundungsfehler auftraten.
2.2
Fehlerarten
Es gibt verschiedene Arten von Fehlern:
Modellfehler
• Fehler aufgrund des Unterschiedes zwischen dem realen System und dem
mathematischen Modell
• Beispiele:
– Pendel mit Luftreibung, Corioliskraft, etc. versus Newtonsche Gleichung im Inertialsystem
– Molekül in Lösung versus Molekulardynamiksimulation in der Gasphase mit klassischer Beschreibung der Atomkerndynamik und approximativer quantenmechanischer Beschreibung der Elektronen
Datenfehler
• Abweichung der realen Parameterwerte von den eingegebenen Daten
• Beispiele:
– Signifikante Stellen von Naturkonstanten
– Messungenauigkeiten im Experiment
Verfahrensfehler
• Intrinsischer Fehler des numerischen Verfahrens
• Beispiele:
– Endliche Taylorreihenentwicklung
– Diskretisierungsfehler
12
Numerik für Chemiker • Prof. Dr. B. Hartke, Universität Kiel, [email protected]
• In diesem Zusammenhang heißt ein Verfahren konvergent, wenn der
Verfahrensfehler gegen null gehen kann
• Beispiel: Verfeinerung der Diskretisierung, z.B. bei einer Integration
• Gegenbeispiel: Divergente Reihenentwicklung, z.B. bei quantenmechanischer Vielteilchenstörungstheorie
Rundungsfehler
• Fehler aufgrund der Darstellung von Gleitkommazahlen auf dem Computer
• Beispiele
– Das Distributivgesetz gilt nicht: a × (b + c) 6= a × b + a × c
– Das Assoziativgesetz gilt nicht: a + (b + c) 6= (a + b) + c
Andere nützliche Unterscheidungen:
f (x) sei das mathematische Problem in Abhängigkeit von der Eingabe x, f˜
der numerische Algorithmus und x̃ fehlerbehaftete Eingabedaten:
Kondition: ||f (x̃) − f (x)||: Wie stark schwankt das Problem bei Störung?
Stabilität: ||f˜(x̃) − f˜(x)||: Wie stark schwankt der numerische Algorithmus
bei Störung?
Konsistenz: ||f˜(x) − f (x)||: Wie gut löst der numerische Algorithmus (mit
exakter Eingabe) das Problem?
Konvergenz: ||f˜(x̃) − f (x)||: Wie gut löst der numerische Algorithmus (mit
gestörter Eingabe) das Problem?
13
Numerik für Chemiker • Prof. Dr. B. Hartke, Universität Kiel, [email protected]
2.3
Normen
2.3.1
Vektoren
Die Norm k · k in einem Vektorraum X erfüllt die Bedingungen
1. Definitheit: k~xk ≥ 0, ~x ∈ X; insbes. k~xk = 0 ⇒ ~x = ~0
2. Homogenität: kα~xk = |α|k~xk, α ∈ C
3. Dreiecksungleichung, Subadditivität: k~x + ~y k ≤ k~xk + k~y k
Dies ist für zahlreiche unterschiedliche Normvorschriften gegeben, für X = Rn
(gewöhnliche Vektoren) z.B.:
1-Norm k~xk1 =
Pn
i
|xi |
Euklidische Norm k~xk2 =
pP
p-Norm k~xkp = p i |xi |p
pP
|xi |2
i
Maximums-Norm k~xk∞ = maxi |xi |
Diese Vielfalt stört i.d.R. nicht, weil sich alle Normen gegeneinander abschätzen lassen:
C1 k~xkα ≤ k~xkβ ≤ C2 k~xkα
(3)
Die Konstanten C1 , C2 lassen sich in den meisten Fällen genau angeben.
2.3.2
Matrizen, Abbildungen
Matrixnormen können über Vektornormen definiert werden oder können auch
andere Charakteristika von Matrizen involvieren, die bei Vektoren nicht
auftreten (z.B. Eigenwerte, Singulärwerte).
Sinnvollerweise sollten Matrixnormen k · k mit Vektornormen k · kV verträglich
(kompatibel) sein; das ist dann der Fall, wenn
kA~xkV ≤ kAk k~xkV
(4)
Normen und Eigenwerte hängen jedoch auch zusammen: Ist eine Matrixnorm
mit irgendeiner Vektornorm verträglich, dann gilt für jeden Eigenwert λ einer
quadratischen Matrix A
|λ| ≤ kAk
(5)
weil mit dem zugehörigen Eigenvektor ~x gezeigt werden kann:
|λ| k~xk = kλ~xk = kA~xk ≤ kAk k~xk
14
(6)
Numerik für Chemiker • Prof. Dr. B. Hartke, Universität Kiel, [email protected]
woraus die Behauptung nach Division durch k~xk folgt. Nach Gl. 5 ist der
Spektralradius (Betrag des betragsgrößten Eigenwerts) einer Matrix niemals
größer als ihre Norm.
Beispiele für Matrixnormen:
• basierend auf der Operatornorm:
kA~xk
kAk = max
= max kA~xk
k~xk
k~xk=1
~x6=~0
1-Norm kAk1 = maxj∈[1,n]
(7)
Pn
|Aij | (Spaltensummennorm)
√
Euklidische (Spektral-)Norm kAk2 = λmax ; λmax ist der größte Eigenwert von
A† A (größter Singulärwert von A, siehe SVD)
P
inf-Norm kAk∞ = maxi∈[1,n] nj=1 |Aij | (Zeilensummennorm)
i=1
• basierend auf einer vektorartigen Anneinanderreihung aller Matrixelemente:
Frobeniusnorm kAkF =
qP P
m
n
i
j
|Aij |2
Auch Matrixnormen lassen sich nach Gl. 3 gegeneinander abschätzen.
15
Numerik für Chemiker • Prof. Dr. B. Hartke, Universität Kiel, [email protected]
2.4
Kondition
Aufgrund der finiten Zahlendarstellung auf dem Computer sollte man nicht
von einer exakten Eingabe x ausgehen, die zu einem exakten Resultat f (x),
führt, sondern von einer Eingabemenge E, welche zu einer Resultatsmenge
R = f (E) führt:
E
x
f (x)
R
Die Kondition charakterisiert das Verhältnis zwischen E und R.
• Sei ~y = F (~x) unter der Annahme von exakten Zahlen (ohne Rundungsfehler), sowie
~ eine Zahl mit Rundungsfehler ist.
~y˜ = F (~x˜), wobei ~x˜ = ~x + δx
• Der absolute bzw. relative Fehler sind dann
k~y˜ − ~y k
k~y k
(8)
κabs = inf{α | k~y˜ − ~y k ≤ αk~x˜ − ~xk},
(9)
∆abs = k~y˜ − ~y k ,
∆rel =
• Die absolute Konditionszahl ist
also das kleinstmögliche Verhältnis k~y˜ − ~y k × (k~x˜ − ~xk)−1 .
• Sofern F (~x) differenzierbar ist, gilt
κabs = k∇F (~x)k ≡ kF 0 (~x)k.
(10)
(hier wird die Matrixnorm gebraucht)
• Die relative Konditionszahl ist analog
)
( k~y˜ − ~y k
˜
k
~
x
−
~
x
k
≤α
,
κrel = inf α k~y k
k~xk
das kleinstmögliche Verhältnis
k~
y˜−~
y k/k~
yk
(11)
× (k~x˜−~xk/k~xk)−1 .
• Sofern F (~x) differenzierbar ist, gilt
κrel =
kF 0 (~x)k
k~xk
× k~xk = κabs ×
.
kF (~x)k
kF (~x)k
Im Folgenden: Beschränkung auf κ ≡ κrel
• Ist κ - 1, so ist das Problem gut konditioniert.
– Für κ < 1 gibt es sogar eine Fehlerverringerung
– Für κ = 1 treten nur Rundungsfehler auf
16
(12)
Numerik für Chemiker • Prof. Dr. B. Hartke, Universität Kiel, [email protected]
• Für κ = O(100) ist das Ergebnis typischerweise akzeptabel
• Für κ 104 ist das Ergebnis oft unbrauchbar. Das Problem ist schlecht konditioniert
• Falls das Ergebnis eines numerischen Problems unstetig von den Eingabedaten
abhängt, wird es als unsachgemäß gestellt angesehen.
Die Kondition eines Problems hängt nicht nur vom Problem, sondern auch
von der Eingabemenge E ab.
Beispiele:
• Schnittpunktsberechnung zweier Geraden:
– gut konditioniert:
g
g̃
r̃
r
h
1
h̃
Der Schnittpunkt r̃ variiert hier ähnlich stark wie die Geraden g
und g̃ selbst.
– schlecht konditioniert (schleifender Schnitt):
r
Starke Schnittpunktsvariation
• Addition/Subtraktion:
– Fadd (a, b) = a + b bzw. Fsub (a, b) = a − b
– mit Eingabevektor ~x = (a, b)T ; wähle 1-Norm: k(a, b)T k1 = |a| + |b|
– κabs = kF 0 (a, b)k1 = k(1, 1)T k1 = 1. (Matrixnorm!)
– κrel,add =
|a|+|b|
|a+b| ,
κrel,sub =
|a|+|b|
|a−b|
⇒ Die Addition von Zahlen mit gleichem Vorzeichen ist gut konditioniert:
κrel = 1
Aber: Die Subtraktion ist schlecht konditioniert, wenn
|a + b| |a| + |b|,
also wenn |a| und |b| annähernd gleich sind.
17
(13)
Numerik für Chemiker • Prof. Dr. B. Hartke, Universität Kiel, [email protected]
Zahlenbeispiel:
Rechnung mit 5 Dezimalstellen:
x = 1.2345 · 10−3
y = 1.7899 · 10−3
u = 1.0000 · 100 + x = 1.0012 · 100
v = 1.0000 · 100 + y = 1.0018 · 100
z1 = v − u = 6.000 · 10−4
z2 = y − x = 5.554 · 10−4
Mathematisch ist z1 = z2 . Numerisch kommt es zum Weghebephänomen
und ein erheblicher Rundungsfehler tritt auf.
Subtraktion von annähernd gleichen Zahlen
sollte vermieden werden!
• weitere Beispiele siehe Henrik Larssons Numerikskript WS15/16.
18
Numerik für Chemiker • Prof. Dr. B. Hartke, Universität Kiel, [email protected]
3
Differentiation
Die erste Ableitung einer Funktion f (x) nach x an der Stelle x0 ist definiert
als
f
(x)
−
f
(x
)
df
∆f
0
f 0 (x)|x=x0 =
=
lim
(14)
=
lim
∆x→0 ∆x x=x
dx x=x0 x→x0
x − x0
0
Zu dem analytischen Problem, daß es sich hier um einen unbestimmten
Ausdruck vom Typ “ 00 ” handelt, kommt aus numerischer Sicht das Problem
hinzu, daß mit kleiner werdendem ∆x die Beträge der Zahlenpaare x, x0 und
f (x), f (x0 ) immer ähnlicher werden, während sich die Größenordnung dieser
vier Zahlen selbst nicht ändert.
Algorithmenunabhängige Folgerungen:
• Numerische Differentiation verstößt zwangsläufig gegen die Regel, Subtraktion annähernd gleicher Zahlen zu vermeiden!
• Der Limes in Gl. 14 ist numerisch (bei begrenzter Zahlendarstellung)
nicht ausführbar.
Die abgebrochene Taylorreihe behebt diese Probleme nicht, ermöglicht aber
• Approximationen an Ableitungen, ohne Ausführung des Limes
(finite Differenzen),
• und mit einer Abschätzung des Fehlers.
3.1
Vorwärtsdifferenzen
Taylorentwicklung von f (x) um x0 (mit ∆x = h):
h2 00
f (x0 + h) = f (x0 ) + hf (x0 ) + f (x0 ) + O h3 f (3) (x0 )
2
f (x0 + h) − f (x0 )
1
⇒
= f 0 (x0 ) + hf 00 (x0 ) + O(h2 f (3) (x0 ))
h
2
0
(15)
(16)
Also gilt
f (x0 + h) − f (x0 )
(17)
h
mit einem Fehler linear in h (also vgl.weise schlechte Konvergenz: halb so
großes h halbiert den Fehler).
f 0 (x0 ) ≈
19
Numerik für Chemiker • Prof. Dr. B. Hartke, Universität Kiel, [email protected]
3.2
Zentraldifferenzen
h2 00
h3 000
f (xo + h) = f (x0 ) + hf (x0 ) + f (x0 ) + f (x0 ) + · · ·
2
3!
2
h3
h
f (xo − h) = f (x0 ) − hf 0 (x0 ) + f 00 (x0 ) − f 000 (x0 ) + · · ·
2
3!
2
f (xo + h) − f (xo − h) h 000
⇒ f 0 (x0 ) =
− f (x0 ) + · · ·
2h
3!
0
(18)
(19)
(20)
Fehler nur noch quadratisch in h (halb so großes h ⇒ ein Viertel des Fehlers).
Veranschaulichung:
m2
m1
f
m3
x̄ − h
x̄
x̄ + h
Unterschied zwischen Vorwärts- (gepunktete Linie), Rückwärts(durchgezogene Linie) und Zentraldifferenzen (gestrichelte Linie).
3.3
Höhere Ordnungen
Auf ähnliche Weise sind herleitbar:
• Formeln höherer Ordnungen für die erste Ableitung,
• Formeln unterschiedlicher Ordnungen für höhere Ableitungen.
Siehe z.B. https://en.wikipedia.org/wiki/Finite_difference_coefficient.
Alternativer Weg zu Formeln höherer Ordnung: Richardson-Extrapolation
(eine allgemeinere Idee zur Genauigkeitsverbesserung, wenn man zwei Approximationsformeln mit zwei unterschiedlichen h-Werten hat)
• Gl. 20 kann umgeschrieben werden zu
I : f 0 (x0 ) = D(h) + e2 h2 + e4 h4 + . . .
(21)
D(h) ist der Differenzenquotient und ei die von h unabhängigen Fehleranteile.
20
Numerik für Chemiker • Prof. Dr. B. Hartke, Universität Kiel, [email protected]
• Idee der Extrapolation: Berechne f 0 (x0 ) für Vielfache von h:
II : f 0 (x0 ) = D(2h) + 4e2 h2 + 16e4 h4 + . . .
(22)
4 × I − II
4D(h) − D(2h)
: f 0 (x0 ) =
− 4e4 h4 + . . .
(23)
3
3
−f (x0 + 2h) + 8f (x + h) − 8f (x − h) + f (x − 2h)
⇔ f 0 (x0 ) =
+ O(h4 )
12h
(24)
Der e2 -term fällt weg (ähnlich wie oben bei Zentraldifferenzen), dadurch
steigt die Fehlerordnung nochmals. Diese Methode kann automatisiert werden:
Beliebige Genauigkeit und Fehlerabschätzung möglich.
3.4
Wahl der Schrittweite
Achtung: h und/oder x0 + h ggf. nicht exakt binär darstellbar. Abhilfe:
1
2
temp = x0 + h;
h = temp − x0;
Das erhaltene h ist nun “exakt” in der Binärdarstellung (aufgrund des Fehlers
in der Subtraktion).
h kann sowohl zu groß als auch zu klein gewählt werden. Beispiel Vorwärtsdifferenzen:
• Der Rundungsfehler ist ungefähr ( = Maschinenepsilon)
f (x0 ) r ∼ h (25)
(Der Rundungsfehler ist generell proportional zu 1/h, auch für andere
finite Differenzenformeln.)
• Fehler aufgrund von Trunkierung der Taylorreihe für Vorwärtsdifferenzen:
t ∼ |hf 00 (x)|
Beachte: r ∼
1
h
(26)
aber t ∼ h !
• Minimierung von (h) = r + t liefert
s
f (x0 )
h∼
f 00 (x0 )
(27)
Die optimale Schrittweite hängt von der Maschinengenauigkeit und dem
00
Inversen der relativen Krümmung ff (x(x00)) ab.
21
Numerik für Chemiker • Prof. Dr. B. Hartke, Universität Kiel, [email protected]
3.5
Schlußbemerkungen
• Höhere Ordnung bewirkt nicht immer höhere Genauigkeit.
• Höhere Ordnung bedeutet nicht unbedingt bessere Effizienz.
• Funktionsberechnungen können teuer sein.
Beispiel: Gradienten/Frequenzen in der ab-initio-Quantenchemie.
Goldene Praxisregel: keine finiten Differenzen verwenden, sonderen analytische Ableitungen. Diese müssen jedoch zusätzlich einprogrammiert
werden. Das wird trotzdem gemacht ⇒ das lohnt sich! Beispiel: Anilin:
– eine SCF-Energieberechnung dauere 5 min
– bei 14∗3=42 Freiheitsgraden und Zentraldifferenzen (2 Punkte pro
Freiheitsgrad) braucht der komplette Gradientenvektor
42∗2∗5 min = 420 min = 7 h
– ⇒ eine konvergierte Geometrieoptimierung braucht 1 Tag!
– mit “analytischen Gradienten” braucht der komplette Gradientenvektor nur ca. 5–10 min und die konvergierte Geometrieoptimierung
ca. 1 h.
• Es existieren weitere Alternativen zur Ableitungsberechnung, z.B. via
Fouriertransformation:
dn
1
√
f
(x)
=
dxn
2π
Z∞
−∞
dn ikx
1
F(k) n e dk = √
dx
2π
Z∞
F(k) (ik)n eikx dk = f (n) (x)
−∞
(28)
22