2008-12-05 13 views
91

Entonces en matemáticas de la escuela secundaria, y probablemente en la universidad, se nos enseña cómo usar las funciones trigonométricas, qué hacen y qué tipo de problemas resuelven. Pero siempre me han sido presentados como una caja negra. Si necesitas el seno o el coseno de algo, presionas el botón de pecado o cos en tu calculadora y estás listo. Lo cual está bien.¿Cómo funcionan las funciones trigonométricas?

Lo que me pregunto es cómo se implementan típicamente las funciones trigonométricas.

+0

¿Está confundido acerca de qué funciones trigonométricas son o cómo se implementan? –

+13

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 –

+0

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

Respuesta

134

En primer lugar, tiene que hacer algún tipo de reducción de rango. Las funciones Trig son periódicas, por lo que debe reducir los argumentos a un intervalo estándar. Para empezar, puedes reducir los ángulos entre 0 y 360 grados. Pero al usar algunas identidades, te das cuenta de que podrías arreglártelas con menos. Si calcula los senos y los cosenos para ángulos entre 0 y 45 grados, puede iniciar su camino para calcular todas las funciones trigonométricas para todos los ángulos.

Una vez que haya reducido su argumento, la mayoría de los chips utilizan un algoritmo CORDIC para calcular los senos y los cosenos. Puede escuchar a la gente decir que las computadoras usan series de Taylor. Eso suena razonable, pero no es verdad. Los algoritmos de CORDIC son mucho más adecuados para la implementación eficiente del hardware . (Software las bibliotecas pueden usar series de Taylor, por ejemplo, en hardware que no admite funciones trigonométricas). Puede haber algún procesamiento adicional, usando el algoritmo CORDIC para obtener respuestas bastante buenas pero luego haciendo algo más para mejorar la precisión.

Hay algunos detalles sobre lo anterior. Por ejemplo, para ángulos muy pequeños theta (en radianes), sin (theta) = theta con toda la precisión que tiene, por lo que es más eficiente simplemente devolver theta que usar algún otro algoritmo. En la práctica, hay una gran cantidad de lógica de casos especiales para exprimir todo el rendimiento y la precisión posible. Las fichas con mercados más pequeños pueden no tener tanto esfuerzo de optimización.

+4

Excelente respuesta, aunque el CORDIC realmente no necesita reducción de rango per se (de hecho, es esencialmente un algoritmo de reducción de rango en sí mismo); funciona bien para ángulos entre -pi/2 y + pi/2, por lo que solo tiene que hacer una rotación vectorial de 180 grados para ángulos fuera de ese rango. –

+2

Las implementaciones que usan una aproximación polinomial ** a menudo ** pueden usar series de Taylor, pero típicamente ** deben ** usar coeficientes que se han determinado con el algoritmo de Remez. http://lolengine.net/blog/2011/12/21/better-function-approximations –

+1

Tenga en cuenta que la tabla de valores utilizada por CORDIC debe precalcularse. Por lo tanto, Taylor todavía podría usarse en "tiempo de compilación". – Rhubbarb

14

Creo que se calculan usando Taylor Series o CORDIC. Algunas aplicaciones que hacen un uso intensivo de las funciones trigonométricas (juegos, gráficos) construyen tablas trigonométricas cuando se inician para que puedan buscar valores en lugar de volver a calcularlos una y otra vez.

6

Consulte the Wikipedia article en las funciones trigonométricas. Un buen lugar para aprender sobre su implementación en el código es Numerical Recipes.

No soy muy matemático, pero mi comprensión del origen del pecado, el cos y el bronceado es que, en cierto sentido, se observan cuando se trabaja con triángulos en ángulo recto. Si tomas medidas de las longitudes de los lados de un grupo de triángulos en ángulo recto diferentes y trazas los puntos en un gráfico, puedes sacar pecado, cos y tan de eso. Como señala Harper Shelby, las funciones simplemente se definen como propiedades de triángulos en ángulo recto.

Se logra una comprensión más sofisticada al comprender cómo estas proporciones se relacionan con la geometría del círculo, lo que conduce a radianes y toda esa bondad. Está todo allí en la entrada de Wikipedia.

44

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:

  1. 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)
  2. 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.
  3. 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
+2

Este comentario es incorrecto. Hay un tiempo y un lugar para cada aproximación. Si no conoce suficiente análisis para determinar la región de convergencia para CUALQUIER aproximación de serie, NO debe utilizarlo. Eso vale para las series de Taylor, Chebyshev, Padé, etc. Las series de Taylor a menudo son lo suficientemente buenas. – kquinn

+0

Voto a favor por uso inapropiado de "nunca". Sí, las series de Taylor son peores que los polinomios minimax en intervalos, pero a veces * estás * interesado en la precisión asintótica alrededor de un único punto. Además, las series de Taylor suelen ser el camino a seguir para la aritmética de precisión arbitraria. –

+4

: encogimiento de hombros: No sé ustedes, pero nunca he estado interesado en evaluar una función en un vecindario pequeño en torno a un solo punto. Incluso un ajuste rápido de mínimos cuadrados en un intervalo es bastante fácil de hacer. Cualquiera que esté usando la serie de Taylor simplemente está perdiendo el punto. –

-5

Si su pidiendo una explicación más física de seno, coseno, y fuego considerar cómo se relacionan con triángulos rectángulos. El valor numérico real de cos (lambda) se puede encontrar formando un triángulo en ángulo recto con uno de los ángulos que es lambda y que divide la longitud del lado de los triángulos adyacente a lambda por la longitud de la hipotenusa. Similarmente para el pecado usa el lado opuesto dividido por la hipotenusa. Para tangente use el lado opuesto dividido por el lado adyacente. El clásico memonic para recordar esto es SOHCAHTOA (pronunciado socatoa).

1

Más comúnmente para computadoras, la representación de la serie de potencia se utiliza para calcular los senos y los cosenos y estos se utilizan para otras funciones trigonométricas. La ampliación de estas series a aproximadamente 8 términos computa los valores necesarios para una precisión cercana al épsilon de la máquina (el número más pequeño de punto flotante distinto de cero que se puede mantener).

El método CORDIC es más rápido ya que se implementa en hardware, pero se usa principalmente para sistemas integrados y no para computadoras estándar.

Cuestiones relacionadas