corregir: Jack Ganssle tiene una discusión decente en su libro sobre sistemas integrados, "The Firmware Handbook".
FYI: Si tiene limitaciones de precisión y rendimiento, las series de Taylor deben ser no se utilizarán para aproximar funciones con fines numéricos. (Guárdelos para sus cursos de Cálculo). Utilizan el analyticity de una función en un solo punto, p. el hecho de que todas sus derivadas existen en ese punto. No necesariamente convergen en el intervalo de interés.A menudo hacen un pésimo trabajo al distribuir la precisión de la aproximación de función para ser "perfectos" justo cerca del punto de evaluación; el error generalmente aumenta hacia arriba a medida que te alejas de él. Y si tiene una función con cualquier derivado no continuo (por ejemplo, ondas cuadradas, ondas triangulares y sus integrales), una serie de Taylor le dará la respuesta incorrecta.
La mejor solución "fácil", cuando se utiliza un polinomio de grado máximo N para aproximar una función dada f (x) sobre un intervalo de x0 < x < x1, es de Chebyshev approximation; ver Recetas numéricas para una buena discusión. Tenga en cuenta que el Tj (x) y Tk (x) en el artículo de Wolfram que vinculé para usar cos y coseno inverso, estos son polinomios y en la práctica se usa una fórmula de recurrencia para obtener los coeficientes. Nuevamente, vea Recetas Numéricas.
editar: Wikipedia tiene un artículo semi-decente en approximation theory. Una de las fuentes que citan (Hart, "Computer Approximations") está agotada (& las copias usadas tienden a ser caras) pero entra en muchos detalles sobre cosas como esta. (Jack Ganssle menciona esto en el número 39 de su boletín The Embedded Muse.)
edición 2: Aquí hay algunas métricas de error tangibles (ver más abajo) para Taylor vs. Chebyshev para sin (x). Algunos puntos importantes a tener en cuenta:
- que el error máximo de una serie aproximación de Taylor en un rango dado, es mucho mayor que el error máximo de una aproximación de Chebyshev del mismo grado. (Por casi el mismo error, puede salirse con un término menos con Chebyshev, lo que significa un rendimiento más rápido)
- La reducción de alcance es una gran victoria. Esto se debe a que la contribución de polinomios de orden superior se reduce cuando el intervalo de la aproximación es más pequeño.
- Si no puede salirse con la reducción del alcance, sus coeficientes necesitan almacenarse con más precisión.
No me malinterpreten: series de Taylor funcionará correctamente para el seno/coseno (con una precisión razonable para el rango-pi/2 a + pi/2; técnicamente, con suficientes términos, se puede llegar a cualquier desear precisión para todas las entradas reales, pero trate de calcular cos (100) usando la serie de Taylor y no puede hacerlo a menos que use aritmética de precisión arbitraria). Si estuviera atrapado en una isla desierta con una calculadora no científica, y tuviera que calcular el seno y el coseno, probablemente usaría series de Taylor ya que los coeficientes son fáciles de recordar. Pero las aplicaciones del mundo real para escribir sus propias funciones sin() o cos() son lo suficientemente raras que sería mejor utilizar una implementación eficiente para alcanzar la precisión deseada, que la serie de Taylor es , no.
Rango = pi/2 a + pi/2, el grado 5 (3 términos)
- Taylor: error max alrededor de 4.5E-3, f (x) = xx /6 + x /120
- Chebyshev: error max alrededor 7e-5, f (x) = 0.9996949x-0.1656700x + 0.0075134x
Rango = pi/2 a + pi/2, d egree 7 (4 términos)
- Taylor: error máximo de alrededor de 1.5e-4, f (x) = xx /6 + x /120-x /5040
- Chebyshev: error max alrededor 6E-7, f (x) = 0.99999660x-0.16664824 x + 0.00830629x -0.00018363x
Rango = pi/4 a + pi/4, grado 3 (2 términos)
- Taylor: error max alrededor de 2.5e-3, f (x) = xx /6
- Chebyshev: max error alrededor de 1.5E-4, f (x) = 0.999x-0.1603x
Rango = pi/4 a + pi/4, el grado 5 (3 términos)
- Taylor: error max alrededor de 3.5E-5, f (x) = xx /6 + x
- Chebyshev: error max alrededor de 6e-7, f (x) = 0.999995x-0.1666016x + 0.0081215x
Rango = pi/4 a + pi/4, grado 7 (4 términos)
- Taylor: error max alrededor 3e-7, f (x) = xx /6 + x /120-x /5040
- Chebyshev: max error alrededor 1.2e-9, f (x) = 0.999999986x-0.166666367x + 0.008331584x -0.000194621x
¿Está confundido acerca de qué funciones trigonométricas son o cómo se implementan? –
Sé lo que son. Sé lo que hacen. Sé cómo determinar qué necesito para qué propósito. Puedo contarte sobre la relación entre ángulos y distancias. Lo que estaba buscando era más parecido a la respuesta de John D. Cook.Y todos los demás que mencionaron los algoritmos reales –
Esta es una buena pregunta. Por ejemplo, el seno, el coseno y la tangente son funciones trascendentales y son difíciles de resolver ... Por otro lado, se pueden definir mediante una simple expansión de la serie Taylor que le dará la respuesta correcta hasta un grado finito de precisión necesario. – Alex