C++Guns – RoboBlog

27.11.2012

Numerische Stabilität

Filed under: Allgemein — Thomas @ 11:11

Wie betrachten die numerische Stabilität von f(x) = 1 - \sqrt{1-x^2} [1]
Diese Formel ist für x nahe Null numerisch instabil! Es findet eine Auslöschung bei der Rechnung 1 - \sqrt(...) statt.
Rechnen wir es von Hand für  x=5e^{-6} = 0.000005 durch:
 x^2 = 2.5e^{-11} = 0.000000000025
 1-x^2 = 0.999999999975
 \sqrt{1-x^2} =0.9999999999875
 1 - 0.9999999999875 = 0.0000000000125 = 1.25e-11

Im letzten Schritt passiert die Auslöschung. Zwar sieht das Ergebnis 1.25e-11 gut aus. Diese Zahl lässt sich auch problemlos als Gleitkommazahl darstellen, aber die Anzahl der signifikaten Stellen hat sich drastisch reduziert. Von Anfangs 13 auf drei herunter! So etwas passiert immer bei der Subtraktion von recht gleich großen Zahlen (mit gleichem Vorzeichen).

Beispiel mit  \pi :

 3.1415926 
-3.1415925
=0.0000001

So etwas will man möglichst vermeiden. Es gilt also die Formel umzuschreiben. Multipliziert man sie im Zähler wie im Nenner mit f(x) = 1 + \sqrt{1-x^2} , also in einer Form wo das störende - durch ein + ersetzt worden ist, und kürz:
 x^2 \over {1 + \sqrt{1 - x^2} }

Im Bild kann man die beiden Funktionen direkt vergleichen. In der numerisch instabilen Funktion (der roten) treten schnell eine Art "diskretisierungs" Fehler auf. Es fehlen eben die Nachkommastellen ;)

numerische stabilitaet

[1] Beispiel aus der Vorlesung CE - Computer Engineering der TU Darmstadt

No Comments »

No comments yet.

RSS feed for comments on this post.

Leave a comment

You must be logged in to post a comment.

Powered by WordPress