Gibt es eine Software, die bei einer reellen Funktion von reellen Variablen automatisch numerisch genauen Code generiert, um die Funktion für alle Eingaben auf einer Maschine mit IEEE 754-Arithmetik zu berechnen?
Wenn zum Beispiel die zu bewertende reale Funktion wäre:
Die Software würde eine katastrophale Löschung und möglicherweise eine Suche nach Ausgabetabellen für bestimmte Sätze von Eingaben in Betracht ziehen, um einen Verlust an Rechengenauigkeit zu vermeiden.
Alternativ gibt es eine Software, die eine reine tabellenbasierte Suchroutine generiert, um eine gegebene Funktion mit hoher Genauigkeit zu berechnen?
software
floating-point
accuracy
Daniel Trebbien
quelle
quelle
Antworten:
Die beste mir bekannte Lösung besteht darin, die symbolischen Ausdrücke in Mathematica , Maple oder SymPy zu programmieren . Alle Links führen direkt zur Dokumentation der Codegenerierung. Alle oben genannten Programme können Code in C oder Fortran generieren.
Keines der obigen Programme erwähnt die Genauigkeit in der IEEE 754-Arithmetik; Im Allgemeinen ist es schwierig, alle Quellen für eine katastrophale Annullierung vorherzusehen, wie @ dmckee feststellt. Es ist schwer, die Erfahrung des Menschen in der numerischen Analyse zu ersetzen.
Um ein konkretes Beispiel zu liefern, sollten Sie erwägen, die trigonometrischen Funktionen für beliebige Eingaben in mit hoher Genauigkeit zu berechnen . Dazu gibt es viele Strategien, einige sogar hardwareabhängig, wie im Wikipedia-Artikel Trigonometrische Tabellen beschrieben . Alle Algorithmen erfordern Einfallsreichtum und numerische Analyse, auch Algorithmen, die von Nachschlagetabellen und Taylor-Reihen oder Interpolation abhängen (siehe Wikipedia-Artikel Das Dilemma des Tischmachers ). Weitere Informationen finden Sie in der verwandten Frage zum Stapelüberlauf. Wie funktionieren trigonometrische Funktionen? .[ 0 , 2 & pgr;]
Software, die Code oder Routinen generiert, um beliebige Funktionen mit hoher Genauigkeit zu berechnen, müsste nicht nur Löschfehler berücksichtigen, sondern auch Serienapproximanten (Taylor, Padé, Chebyshev, Rational usw.) zur Berechnung von Funktionen, die nicht im Sinne von definiert sind eine endliche Anzahl von Additionen, Subtraktionen, Multiplikationen, Divisionen und Bitverschiebungen. (Siehe Approximationstheorie .)
quelle
Wenn Sie eine Vorstellung davon haben möchten, wie weit wir von einem solchen Softwarepaket entfernt sind, lesen Sie bitte die LAPACK-Arbeitshinweise von 2001 zur zuverlässigen und effizienten Berechnung von Givens-Rotationen . Ich würde erwarten, dass die meisten Nichtspezialisten (und viele Spezialisten!) In der numerischen Analyse erstaunt sind, wie viel Analyse in die Lösung eines scheinbar einfachen Problems gesteckt hat:
quelle
Die Codegenerierung und Vorkompilierung mathematischer Ausdrücke wird immer beliebter.
Während symbolische Pakete wie SymPy, Mathematica und Maple möglicherweise die Codegenerierung beinhalten, bin ich nicht sicher, dass sich auch eines von ihnen Gedanken über Numerik macht.
Es gibt noch einige andere Projekte, die sich sowohl für Symbolik als auch für Numerik interessieren.
Theano ist ein solches Projekt, das sich auf Array-Operationen konzentriert. Sie identifizieren und ersetzen einige Operationen, von denen bekannt ist, dass sie numerisch schlecht konditioniert sind. Ich bin mir nicht sicher, ob dies Ihren speziellen Fall einschließt, aber es lohnt sich, darüber nachzudenken.
Spirale könnte Sie auch interessieren. Sie kompilieren auch einen abstrakten Syntaxbaum vor und achten auf numerische Probleme. Sie befassen sich eher mit skalaren Operationen (wie in Ihrem Beispiel). Sie sind jedoch auch ziemlich auf eine bestimmte Domäne spezialisiert.
Das Wachstum in diesem Bereich ist jedoch ermutigend. Man kann optimistisch sein, dass Ihre Frage in ein paar Jahren eine bessere Antwort haben wird.
quelle
Nicht generell kann ich mit Sicherheit sagen, dass der Implementierer des Codegenerators in SymPy nicht einmal = P ausprobiert hat.
Paolo Bientinesi entwickelte eine Methode zur Erzeugung von Stabilitätsnachweisen für lineare Algebra-Algorithmen, die unter Verwendung der FLAME-Notation von Robert van de Geijn erstellt werden.
Lesen Sie dieses Papier oder eine längere Arbeitsnotizversion .
quelle
Mit Sage können Sie Formeln in Cython (einer Variante von Python, die C-Code generiert) ausdrücken. Zur Beantwortung Ihrer allgemeineren Frage: Nein. Betrachten wir den Satz von Rice .
quelle