Calculadora de aproximación de Chebyshev
(stuffmatic.com)- Chebyshev approximation calculator es una herramienta que genera en la web código de aproximación para funciones matemáticas
- El usuario puede especificar la función a aproximar, el intervalo y la cantidad de términos mediante
f(x),x min,x maxyTerms - La opción
Match x min x maxy el área Coefficients ofrecen un flujo para revisar o ajustar los límites del intervalo y los valores de los coeficientes - En el área Generated code, el resultado del cálculo se muestra en forma de código; en la pantalla de ejemplo se ven los coeficientes desde
c0hastac10 - Tiene conectado un repositorio de GitHub, por lo que se puede consultar directamente el código de implementación de la herramienta web
Generador de código de aproximación de Chebyshev
- Chebyshev approximation calculator genera código para aproximar de forma eficiente funciones matemáticas
- En la UI web se ingresan las condiciones de aproximación
f(x): función a aproximarx min: valor mínimo del intervalox max: valor máximo del intervaloTerms: cantidad de términos a usarMatch x min x max: opción relacionada con los límites del intervalo
Revisión de coeficientes y código generado
- La pantalla se divide en las áreas Coefficients y Generated code
- Los coeficientes mostrados como ejemplo se pueden revisar desde
c0hastac10c0 = 0.16793649417016518c1 = -0.12411164956092625c2 = -0.09756341588422193c3 = 0.1800765790518846c4 = -0.06972963647223016c5 = -0.09250127939333941c6 = 0.18076946080324185c7 = 0.15990613621816677c8 = -0.028659588693985123c9 = -0.09494966104347571c10 = -0.04980429834982578
- En la pantalla también aparecen elementos de coeficientes desde
c11hastac39
Repositorio de código
- Repositorio de GitHub relacionado: stuffmatic/chebyshev-calculator
1 comentarios
Comentarios en Hacker News
Está genial. Por ahí de 1974 me pagaron por escribir una función para calcular raíces cuadradas en ensamblador de IBM 360
Era mi último año de licenciatura, y me pidieron que la hiciera lo más eficiente posible. Escalé la entrada al rango entre 0 y 1, luego usé una aproximación de Chebyshev para la estimación inicial y apliqué 2 o 3 iteraciones desplegadas del método de Newton para obtener la solución. Fue el primer dinero que gané escribiendo código
Está realmente muy bien hecho. Me fascinó lo eficientes que pueden ser estas aproximaciones, y también me ayudó a entender mucho mejor por qué las implementaciones de funciones trigonométricas y otras funciones matemáticas en computadoras de 8 bits eran así
También hay un gran documento original de 1969 del BBC Research Department sobre por qué este enfoque es tan bueno: https://downloads.bbc.co.uk/rd/pubs/reports/1969-10.pdf
Si solo has visto aproximaciones de Taylor, al principio esto puede parecer casi magia
Antes obtuve buenos resultados con Sollya: https://www.sollya.org/
Eso sí, aunque los resultados eran buenos, el software en sí es algo incómodo de usar
Si aproximas
Math.sin(x)/x, o sea la función sinc, con 7 términos en el intervalo[-3,3], todos los coeficientesc0...c6salen comoNaN. ¿Es un bug?Como solución temporal, simplemente forcé
1.0cuandoxestá cerca de 0if(Math.abs(x) > 1e-8 ){ Math.sin(x)/x } else { 1.0 }x_j = (xmin) + (xmax - xmin)/2(1 + cos(pi[0..j-1]/(j-1)), y si uno de ellos cae exactamente en 0, entonces termina evaluandoMath.sin(0)/0, lo que daNaNOtra forma de evitarlo es usar un rango ligeramente asimétrico, como
[-3,+3.0000001]x=0, y parece que el código de aproximación tropieza justo ahí. Está un poco chafaLos polinomios de Chebyshev son tan potentes y versátiles para aproximación que a la gente le encantan tanto que cree que es trampa y termina sin usarlos
Chebyshev debería ser el primer método a intentar. Las redes neuronales deberían quedar como último recurso
Excelente. Hace poco quería hacer algo así, pero fue sorprendentemente difícil encontrar código para calcular aproximaciones
Lo dejo guardado para la próxima vez que necesite aproximar una función rápido
Chebyshev se siente como magia negra. Lo sigo sintiendo así incluso después de haber visto la derivación en una clase de posgrado
También hay que mencionar Chebfun, de Nick Trefethen y otros. Es una herramienta que llevó esta idea en casi todas las direcciones imaginables
Los
Chebfunspueden verse como el equivalente para funciones de lo que son los números de punto flotante para los números matemáticos reales. Es software realmente impresionantehttps://www.chebfun.org
Eso permite hacer muchas cosas, como encontrar soluciones de ecuaciones diferencial-algebraicas con precisión de máquina o hallar mínimos y máximos globales de funciones unidimensionales
Según entiendo, ahora usan otros algoritmos, pero la metodología base que Chebfun usaba antes se puede ver en el capítulo 6 del libro de Trefethen
Spectral Methods in Matlab. La metodología más reciente con funciones ultrasféricas está en el artículo de SIAM Review de Olver y TownsendA Fast and Well-Conditioned Spectral MethodTengo curiosidad y no sé si este sea el lugar para preguntar. Vi una vez un video que decía que la Nintendo 64 no tenía capacidad para calcular la función seno, así que usaba una tabla de consulta de 0 a 2π, además de algunos trucos ingeniosos para reducir el tamaño de la tabla
¿Habría sido posible entrenar una red neuronal y guardar los pesos, o construir una función y guardar coeficientes para calcular seno y coseno?
Si te sobran algunos ciclos de CPU, podrías usar una aproximación híbrida: tomar los valores de una tabla dispersa como estimación inicial y luego hacer unas cuantas iteraciones de un método de aproximación numérica. O bien, como en la publicación original, basta con guardar unos cuantos coeficientes iniciales de una aproximación polinómica
Las redes neuronales pueden servir cuando tienes muestras de alguna función pero no sabes cómo aproximarla; aquí no es ese caso
Las redes neuronales son una gran solución cuando necesitas evaluar algo que no es fácil de analizar matemáticamente, pero ya existen muchas técnicas conocidas para calcular y aproximar funciones trigonométricas
Entrenar una red neuronal para calcular el seno sería la versión matemática de usar un LLM para invertir cadenas. Se puede hacer, pero es una idea que solo surge cuando no sabes que el problema ya se resuelve esencialmente con un enfoque más directo
Antes de usar técnicas de IA/ML, siempre vale la pena buscar si los matemáticos ya tienen una solución. Hoy en día probablemente se esté gastando mucho esfuerzo en aplicar IA/ML a problemas para los que ya existe una solución conocida, eficiente e incluso óptima, aunque los desarrolladores no la conozcan
La principal fortaleza de las redes neuronales aparece cuando tienes muchísimas entradas, no solo unas pocas. Para algo tan simple como
sin(x), hay otros métodos, como la herramienta publicada aquíEstá muy padre. Me dio curiosidad juguetear para ver qué tan rápido podía encontrar una función que no se aproximara bien
Hasta ahora, la mejor que encontré fue
Math.cos(x * Math.exp(Math.cos(x * x))). Tiene mucha composición, así que aparecen oscilaciones rápidas y pendientes pronunciadas, lo que hace que sea difícil de aproximar fácilmente con Chebyshev