Biorąc pod uwagę rzeczywistą funkcję rzeczywistych zmiennych, czy jest dostępne oprogramowanie, które może automatycznie generować dokładny numerycznie kod do obliczenia funkcji dla wszystkich danych wejściowych na maszynie wyposażonej w arytmetykę IEEE 754?
Na przykład, jeśli rzeczywistą funkcją do oceny były:
Oprogramowanie rozważyłoby katastrofalne anulowanie i możliwe wyszukiwanie tablic wyników dla niektórych zestawów danych wejściowych, aby uniknąć utraty dokładności obliczeniowej.
Alternatywnie, czy istnieje oprogramowanie, które może wygenerować procedurę wyszukiwania opartą wyłącznie na tabeli, aby obliczyć daną funkcję z dużą dokładnością?
software
floating-point
accuracy
Daniel Trebbien
źródło
źródło
Odpowiedzi:
Najlepszym rozwiązaniem, jakie znam, jest zaprogramowanie wyrażeń symbolicznych w Mathematica , Maple lub SymPy ; wszystkie linki prowadzą bezpośrednio do dokumentacji generowania kodu. Wszystkie powyższe programy mogą generować kod w C lub Fortran.
Żaden z powyższych programów nie wspomina o dokładności arytmetyki IEEE 754; ogólnie rzecz biorąc, trudno byłoby przewidzieć wszystkie źródła katastrofalnego anulowania, jak zauważa @dmckee. Trudno zastąpić ludzką wiedzę fachową w zakresie analizy numerycznej.
Aby podać konkretny przykład, rozważ obliczenie funkcji trygonometrycznych z dużą precyzją dla dowolnych danych wejściowych w . Jest na to wiele strategii, niektóre nawet zależne od sprzętu, jak widać w artykule Wikipedii Tabele trygonometryczne . Wszystkie algorytmy wymagają pomysłowości i analizy numerycznej, nawet algorytmy zależne od tabel odnośników i serii Taylora lub interpolacji (patrz artykuł Wikipedii Dylemat twórcy tabel ). Aby uzyskać więcej informacji, zobacz powiązane pytanie dotyczące przepełnienia stosu Jak działają funkcje trygonometryczne?[ 0 , 2 π] .
Oprogramowanie, które generowało kod lub procedury do obliczania dowolnych funkcji z dużą dokładnością, musiałoby nie tylko być świadomym błędów anulowania, ale także przybliżeń szeregowych (Taylor, Padé, Czebyszew, wymierny itp.) Do obliczania funkcji, które nie są zdefiniowane w kategoriach skończona liczba dodatków, odejmowań, mnożenia, podziałów i przesunięć bitów. (Patrz teoria aproksymacji ).
źródło
Jeśli chcesz się dowiedzieć, jak daleko jesteśmy od takiego pakietu oprogramowania, zapoznaj się z notatką roboczą LAPACK z 2001 r. Na temat obliczania rotacji Givens w sposób niezawodny i wydajny . Spodziewałbym się, że większość niespecjalistów (i wielu specjalistów!) W analizie numerycznej będzie zaskoczona tym, ile analizy poświęcono na rozwiązanie tak pozornie prostego problemu:
Dany , znajdź c ∈ R i s ∈ C takie, żefa,g∈C c∈R s∈C
,
gdzie jest jednostkowe. Równoważenie niezawodności z wydajnością obliczeniową i bardziej subtelnymi kwestiami, takimi jak ciągłość, jest wysoce nietrywialne i jest mało prawdopodobne, że zostanie zautomatyzowane w dającej się przewidzieć przyszłości.R ( c , s )
źródło
Generowanie kodu i wstępna kompilacja wyrażeń matematycznych staje się coraz bardziej popularna.
Podczas gdy pakiety symboliczne, takie jak SymPy, Mathematica i Maple, mogą obejmować generowanie kodu, nie jestem pewien, czy którykolwiek z nich myśli też o numeryce.
Istnieje kilka innych projektów, na które można spojrzeć, które dotyczą zarówno symboliki, jak i liczb.
Theano to taki projekt skoncentrowany na operacjach tablicowych. Identyfikują i zastępują niektóre operacje, o których wiadomo, że są liczbowo źle uwarunkowane. Nie jestem pewien, czy dotyczy to twojego konkretnego przypadku, ale warto przyjrzeć się temu.
Spirala może być dla ciebie interesująca. Wstępnie kompilują również abstrakcyjne drzewo składniowe, a także zwracają uwagę na problemy numeryczne. Są bardziej zainteresowani operacjami skalarnymi (jak twój przykład). Są jednak dość wyspecjalizowane w określonej dziedzinie.
Rozwój w tej dziedzinie jest jednak zachęcający. Można być optymistą, że twoje pytanie będzie miało lepszą odpowiedź za kilka lat.
źródło
Nie ogólnie, mogę spokojnie powiedzieć, że implementator generatora kodu w SymPy nawet nie próbował = P.
Paolo Bientinesi opracował metodę generowania dowodów stabilności algorytmów algebry liniowej, które są generowane przy użyciu notacji FLAME Roberta van de Geijna.
Zobacz ten papier lub dłuższą roboczą wersję notatki .
źródło
Sage pozwala wyrażać formuły w Cython (wariant Pythona, który generuje kod C); jednak w odpowiedzi na bardziej ogólne pytanie: nie. Rozważ Twierdzenie Rice'a .
źródło