Dada la función real de las variables reales, ¿existe un software disponible que pueda generar automáticamente un código numérico exacto para calcular la función sobre todas las entradas en una máquina equipada con aritmética IEEE 754?
Por ejemplo, si la función real a evaluar fuera:
El software consideraría la cancelación catastrófica y posiblemente la búsqueda de tablas de salida para ciertos conjuntos de entradas para evitar una pérdida en la precisión computacional.
Alternativamente, ¿hay algún software que pueda generar una rutina de búsqueda pura basada en tablas para calcular una función dada con alta precisión?
software
floating-point
accuracy
Daniel Trebbien
fuente
fuente
Respuestas:
La mejor solución que conozco es programar las expresiones simbólicas en Mathematica , Maple o SymPy ; Todos los enlaces van directamente a la documentación de generación de código. Todos los programas anteriores pueden generar código en C o Fortran.
Ninguno de los programas anteriores menciona precisión en aritmética IEEE 754; en general, sería difícil anticipar todas las fuentes de cancelación catastrófica, como señala @dmckee. Es difícil reemplazar la experiencia humana en análisis numérico.
Para proporcionar un ejemplo concreto, considere calcular las funciones trigonométricas con alta precisión para entradas arbitrarias en . Hay muchas estrategias para hacerlo, algunas incluso dependen del hardware, como se ve en el artículo de Wikipedia Trigonometric Tables . Todos los algoritmos requieren ingenio y análisis numérico, incluso los algoritmos que dependen de tablas de búsqueda y series o interpolación de Taylor (consulte el artículo de Wikipedia The Table-Maker's Dilemma ). Para obtener más detalles, consulte la pregunta relacionada sobre el desbordamiento de pila ¿ Cómo funcionan las funciones trigonométricas? .[ 0 , 2 π]
El software que generó código o rutinas para calcular funciones arbitrarias con alta precisión no solo necesitaría tener en cuenta los errores de cancelación, sino también las aproximaciones de series (Taylor, Padé, Chebyshev, racionales, etc.) para calcular funciones que no están definidas en términos de un número finito de sumas, restas, multiplicaciones, divisiones y cambios de bits. (Ver Teoría de la aproximación ).
fuente
Si desea tener una idea de cuán lejos estamos de un paquete de software de este tipo, consulte la nota de trabajo LAPACK 2001 sobre computación. Da rotaciones de manera confiable y eficiente . Esperaría que la mayoría de los no especialistas (¡y muchos especialistas!) En análisis numérico se sorprendan de cuánto análisis se llevó a cabo para resolver un problema tan aparentemente simple:
Dado , encuentre y modo que c ∈ R s ∈ Cf,g∈C c∈R s∈C
donde es unitario. Equilibrar la confiabilidad con la eficiencia computacional junto con problemas más sutiles como la continuidad es altamente no trivial y es poco probable que se automatice en el futuro previsible.R(c,s)
fuente
La generación de código y la precompilación de expresiones matemáticas se está volviendo más popular.
Si bien los paquetes simbólicos como SymPy, Mathematica y Maple pueden incluir generación de código, no estoy seguro de que ninguno de ellos también piense mucho en los números.
Hay un par de otros proyectos en los que uno podría estudiar y que están interesados tanto en simbólicos como en numéricos.
Theano es un proyecto de este tipo centrado en operaciones de matriz. Identifican y reemplazan algunas operaciones que se sabe que están numéricamente mal acondicionadas. No estoy seguro de que esto incluya su caso específico, pero vale la pena analizarlo.
Espiral también puede ser interesante para usted. También precompilan un árbol de sintaxis abstracta y también buscan problemas numéricos. Están más preocupados con las operaciones escalares (como su ejemplo). Sin embargo, también están bastante especializados en un dominio particular.
Sin embargo, el crecimiento en este campo es alentador. Uno puede ser optimista de que su pregunta tendrá una mejor respuesta en unos años.
fuente
No en general, puedo decir con seguridad que el implementador del generador de código en SymPy ni siquiera intentó = P.
Paolo Bientinesi desarrolló un método para generar pruebas de estabilidad de algoritmos de álgebra lineal, que se generan utilizando la notación FLAME de Robert van de Geijn.
Vea este documento , o una versión más larga de notas de trabajo .
fuente
Sage le permite expresar fórmulas en Cython (una variante de python que genera código C); sin embargo, en respuesta a su pregunta más general: no. Considere el teorema de Rice .
fuente