Heuristische Überprüfung der numerischen Stabilität

12

Angenommen, ich habe eine reelle Wertefunktion einiger Variablen die ich numerisch auswerten möchte. Im Allgemeinen kann die Formel für Produkte, Rationalitäten, Trancendentalfunktionen usw. enthalten und wird zu lang sein, um ihre numerische Stabilität analytisch zu untersuchen. Oder es wird zumindest zu zeitaufwändig sein, dies in der Praxis zu tun. Angenommen, ich habe kein kürzeres Äquivalent mit garantierter Stabilität. Gibt es ein methodisches Verfahren zur Analyse der numerischen Stabilität vonf(x1,,xN)xichff. Ich denke daran, es mit willkürlichen Präzisionsergebnissen zu vergleichen, die mit einem Computeralgebrasystem erhalten wurden. Angenommen, die Funktion wird in C mit stdlib-Funktionen und einfacher oder doppelter Genauigkeit implementiert. Welche Größen sollte ich vergleichen, um die Qualität der Approximation bei endlicher Präzision zu quantifizieren? Wie bestimme ich kritische Werte der Variablen? Wie kann ich den Compiler und die Compileroptimierungen auswählen, damit andere Benutzer die Ergebnisse problemlos reproduzieren können? ... Ich weiß, dass die Problemeinstellung wahrscheinlich zu allgemein ist, um gute Antworten zu geben. Aber ich denke immer noch, dass dies ein verbreitetes Problem in der Informatik ist, und frage mich, ob es Referenzen gibt, die Standards für die Durchführung solcher Analysen vorschlagen.

highsciguy
quelle

Antworten:

7

Was Sie suchen, ist das, was als "Automatische Fehleranalyse" bezeichnet wird und das Thema von Kapitel 26 von Highams Buch "Genauigkeit und Stabilität numerischer Algorithmen", 2. Auflage, SIAM Publishers.

Eine von ihm beschriebene Technik ist die Verwendung der Direktsuchoptimierung: Versuchen Sie, Ihr Problem als Optimierungsproblem zu formulieren, und verwenden Sie den Optimierungsalgorithmus, um Koeffizienten oder Parameterwerte zu finden, die eine Menge maximieren oder minimieren, die mit der Genauigkeit Ihres Algorithmus / Ihrer Formel zusammenhängt. Er verwendet das Beispiel des Wachstumsfaktors in der Gaußschen Elimination (welche Matrix maximiert diesen Wachstumsfaktor) oder die Wurzeln eines Kubikwerts (wie ich in einer Ihrer vorherigen Fragen beantwortet habe).

Ich würde vorschlagen, dass Sie eine Kopie dieses Buches erhalten, die einleitenden Kapitel und dieses Kapitel 26 und die darin enthaltenen Verweise lesen.

GertVdE
quelle
3

Bewerten Sie Ihre Funktion einige Male (3 ist normalerweise ausreichend), wobei alle Eingaben durch ulp leicht zufällig gestört werden . Die Standardabweichung der drei Ergebnisse gibt Ihnen ein grobes (aber normalerweise ausreichendes) Maß für die numerische Empfindlichkeit. Sie können dies mit der erwarteten Empfindlichkeit aus der Linearisierung vergleichen und den Quotienten bilden, um eine Stabilitätsschätzung zu erhalten.±1

Beachten Sie, dass die numerische Stabilität fragt, um wie viel schlechter der tatsächliche Fehler bei der Auswertung eines bestimmten mit dem Fehler verglichen wird, der bei der Sensitivitätsanalyse beim Ändern der Eingaben um ulp erwartet wird. Der letztere Fehler, ausgedrückt in ulps, definiert den Problemzustand. Für einen stabilen Algorithmus kann die Bedingung sehr schlecht sein (Beispiel: Nähe von ), und für eine sehr gut konditionierte Funktion kann die Stabilität schlecht sein (Beispiel: nahe ).x±11/xx=01/(1-x)-1/(1+x)x=0

Arnold Neumaier
quelle
0

|f(x+ε)-f(x)|C|ε|
Cfx,ϵ
Wolfgang Bangerth
quelle
Und was kann getan werden, wenn die Funktionen über ihre Domäne stark variieren oder wenn keine realisierbare Ableitung verfügbar ist? Gibt es andere Techniken oder würden wir am Ende einen Monte-Carlo-Ansatz verfolgen?
André
1
-1: Sie erklären den Begriff der Bedingung, nicht der numerischen Stabilität.
Arnold Neumaier