9.4    Optimale Schrittweite

Bisher wurde die Schrittweite h als frei wählbar betrachtet, was sie ja in gewissem Sinne auch ist. Je kleiner sie gewählt wird, desto genauer wird das Ergebnis ausfallen, so die Erwartung. Kann die Verkleinerung beliebig fortgesetzt werden?

Wenn wir uns an die Ausführungen in Kapitel 1 erinnern, müssen wir die Frage verneinen. Dort wurde eine Maschinengenauigkeit von etwa 1.1e-16 ermittelt. Es muss also ein Optimum für die Schrittweite h geben.

Im Falle von Funktionen, deren Differenzialquotienten wir kennen oder symbolisch berechnen können, lässt sich dieses Optimum anhand der Differenz aus dem Differenzenquotienten und dem Differenzialquotienten innerhalb einer for-Schleife ermitteln, indem die Schrittweite h sukzessive verkleinert wird. Der Fehler E (engl. error), der bei den verschiedenen Schrittweiten auftritt, wird mit folgender Formel berechnet:

formula

Die Formel berechnet den Verfahrensfehler (Diskretisierungsfehler). Das ist hier der Fehler, der bei der numerischen Berechnung der Ableitung entsteht.

Listing 9.4 ermittelt die optimale Schrittweite für den Vorwärtsdifferenzenquotienten und den zentralen Differenzenquotienten. Als Testfunktion dient wieder die Funktion y = x4/32. Die Steigung wird an der Stelle x0 = 2 berechnet (Zeile 15).

01  #04_schrittweite.py
02 #Funktionsdefinition
03 def f(x):
04 return x**4/32
05 #1. Ableitung genau
06 def df1(x):
07 return x**3/8
08 #Vorwärtsdifferenzenquotient
09 def vDiff(f,x,h=1e-1):
10 return (f(x+h)-f(x))/h
11 #zentraler Differenzenquotient
12 def zDiff(f,x,h=1e-1):
13 return (f(x+h)-f(x-h))/(2*h)
14 #Hauptprogramm
15 x0=2
16 print("h\tFehler Ev\tFehler Ez")
17 for n in range(1,11):
18 h=10**(-n)
19 E1=abs(df1(x0) - vDiff(f,x0,h))
20 E2=abs(df1(x0) - zDiff(f,x0,h))
21 print("%1.e %1.12f %1.12f" %(h,E1,E2))

Listing 9.4     Berechnung der optimalen Schrittweite

Ausgabe

h       Fehler Ev      Fehler Ez
1e-01 0.077531250000 0.002500000000
1e-02 0.007525031250 0.000025000000
1e-03 0.000750250031 0.000000250000
1e-04 0.000075002502 0.000000002501
1e-05 0.000007500029 0.000000000032
1e-06 0.000000750095 0.000000000001
1e-07 0.000000073859 0.000000000249
1e-08 0.000000005025 0.000000003302
1e-09 0.000000082740 0.000000082740
1e-10 0.000000082740 0.000000082740

Analyse

In Zeile 04 können Sie einen anderen mathematischen Funktionsterm eintragen. Dann müssen Sie in Zeile 07 den Ableitungsterm dieser Funktion entsprechend anpassen.

In Zeile 15 können Sie die Stelle ändern, an der die Steigung berechnet werden soll.

In den Zeilen 09 und 10 wird der Vorwärtsdifferenzenquotient definiert. Die Definition des zentralen Differenzenquotienten erfolgt in den Zeilen 12 und 13.

Innerhalb der for-Schleife (Zeilen 17 bis 21) werden die Fehler E1 (Zeile 19) und E2 (Zeile 20) aus den Differenzen der Differenzenquotienten und dem Differenzialquotienten berechnet. In Zeile 18 wird für jeden Schleifendurchlauf eine neue Schrittweite h=10**(-n) festgelegt. Die Ausgabe erfolgt zweispaltig formatiert in Zeile 21.

Für den Vorwärtsdifferenzenquotienten vDiff beträgt die optimale Schrittweite h=1e-8, und für den zentralen Differenzenquotienten zDiff beträgt sie h=1e-6. Es empfiehlt sich also, für zukünftige Berechnungen von Ableitungen den zentralen Differenzenquotienten zu benutzen.

Bei der Analyse der Ausgaben fällt auf, dass sich mit zunehmender Verkleinerung der Schrittweite h auch der Fehler verringert. Ab einem bestimmten Wert von h wird der Fehler größer. Solche Verfahren werden als instabil bezeichnet.

Fazit: Die numerische Differenziation ist ein instabiles Verfahren.

Verfahrens- und Auslöschungsfehler

Bei näherer Betrachtung der Ausgaben fällt auf, dass mit der Verkleinerung der Schrittweite h der Verfahrensfehler kontinuierlich bis zu einem Optimum abnimmt. Die danach folgenden Werte steigen kontinuierlich an. Das sind die Auslöschungsfehler, die entstehen, wenn die Schrittweite zu klein wird (siehe Abbildung 1.8 in Kapitel 1). Die Fehleranalyse mit Listing 9.4 gilt nur für die Ableitung der Testfunktion y = x4/32. Für jede andere mathematische Funktion muss man eine neue Fehleranalyse durchführen, was sehr aufwendig wäre und deshalb in der Praxis auch nicht durchgeführt wird.

[Knorrenschild: 110, 165] leitet für den Vorwärtsdifferenzenquotienten und für den zentralen Differenzenquotienten jeweils eine Formel her, mit der näherungsweise die optimalen Schrittweiten berechnet werden können.

Für die 1. Ableitung des Vorwärtsdifferenzenquotienten gilt näherungsweise die optimale Schrittweite:

formula

Bei der Konstanten EPS unter der Wurzel handelt es sich um die Maschinengenauigkeit (EPS ≈ 1,1 ⋅ 10-16, siehe Abschnitt 1.4.1).

Für die 1. Ableitung des zentralen Differenzenquotienten sollte die optimale Schrittweite folgenden Wert haben:

formula

Für die 2. Ableitung des zentralen Differenzenquotienten beträgt die optimale Schrittweite:

formula

Diese Formeln dienen nur zur theoretischen Orientierung, um auf das Problem der optimalen Schrittweitenwahl hinzuweisen. In der Praxis sind sie nicht anwendbar, weil in der Regel die Ableitungen nicht bekannt sind.

Faustformel

Wenn Sie den zentralen Differenzenquotienten verwenden, dann können Sie einen Orientierungswert für die optimale Schrittweite h aus der dritten Wurzel der Maschinenkonstanten EPS ≈ 1,1 ⋅ 10-16 berechnen.