Tablas trigonométricas
En matemáticas, las tablas de funciones trigonométricas son útiles en varias áreas. Antes de la existencia de las calculadoras de bolsillo, las tablas trigonométricas eran esenciales para la navegación, la ciencia y la ingeniería. El cálculo de tablas matemáticas fue un área de estudio importante, que condujo al desarrollo de los primeros dispositivos informáticos mecánicos.
Las computadoras modernas y las calculadoras de bolsillo ahora generan valores de funciones trigonométricas bajo demanda, utilizando bibliotecas especiales de código matemático. A menudo, estas bibliotecas usan tablas precalculadas internamente y calculan el valor requerido usando un método de interpolación apropiado. La interpolación de tablas de búsqueda simples de funciones trigonométricas todavía se usa en gráficos por computadora, donde solo se puede requerir una precisión modesta y la velocidad a menudo es primordial.
Otra aplicación importante de las tablas trigonométricas y los esquemas de generación son los algoritmos de transformada rápida de Fourier (FFT), donde los mismos valores de función trigonométrica (llamados factores de giro) deben evaluarse muchas veces en una transformada dada, especialmente en el caso común donde se calculan muchas transformadas del mismo tamaño. En este caso, llamar a las rutinas de la biblioteca genérica cada vez es inaceptablemente lento. Una opción es llamar a las rutinas de la biblioteca una vez, para crear una tabla de los valores trigonométricos que se necesitarán, pero esto requiere una memoria significativa para almacenar la tabla. La otra posibilidad, dado que se requiere una secuencia regular de valores, es usar una fórmula de recurrencia para calcular los valores trigonométricos sobre la marcha. Se ha dedicado una importante investigación a encontrar esquemas de recurrencia precisos y estables para preservar la precisión de la FFT (que es muy sensible a los errores trigonométricos).
Cálculo bajo demanda
Las computadoras y calculadoras modernas usan una variedad de técnicas para proporcionar valores de funciones trigonométricas a pedido para ángulos arbitrarios (Kantabutra, 1996). Un método común, especialmente en procesadores de gama alta con unidades de coma flotante, es combinar una aproximación polinomial o racional (como la aproximación de Chebyshev, la mejor aproximación uniforme, la aproximación de Padé y, por lo general, para precisiones más altas o variables, series de Taylor y Laurent) con reducción de rango y una tabla de búsqueda: primero buscan el ángulo más cercano en una tabla pequeña y luego usan el polinomio para calcular la corrección. Mantener la precisión mientras se realiza dicha interpolación no es trivial, pero para este propósito se pueden usar métodos como las tablas precisas de Gal, la reducción del rango de Cody y Waite y los algoritmos de reducción de radianes de Payne y Hanek. En dispositivos más simples que carecen de un multiplicador de hardware, existe un algoritmo llamado CORDIC (así como técnicas relacionadas) que es más eficiente, ya que solo usa cambios y sumas. Todos estos métodos se implementan comúnmente en hardware por motivos de rendimiento.
El polinomio particular que se usa para aproximar una función trigonométrica se genera con anticipación usando alguna aproximación de un algoritmo de aproximación minimax.
Para cálculos de muy alta precisión, cuando la convergencia de expansión en serie se vuelve demasiado lenta, las funciones trigonométricas pueden aproximarse mediante la media aritmético-geométrica, que a su vez aproxima la función trigonométrica mediante la integral elíptica (compleja) (Brent, 1976).
Las funciones trigonométricas de ángulos que son múltiplos racionales de 2π son números algebraicos. Los valores para a/b·2π se pueden encontrar aplicando la identidad de De Moivre para n = a a bth raíz de la unidad, que también es raíz del polinomio xb - 1 en el plano complejo. Por ejemplo, el coseno y el seno de 2π ⋅ 5/37 son las partes real e imaginaria, respectivamente, de la 5.ª potencia de la 37.ª raíz de la unidad cos(2π/37) + sin(2π/37)i, que es una raíz del polinomio de grado 37 x37 − 1. Para este caso, un algoritmo de búsqueda de raíces como el método de Newton es mucho más simple que la aritmética: algoritmos de media geométrica anteriores mientras convergen a una tasa asintótica similar. Sin embargo, los últimos algoritmos son necesarios para las constantes trigonométricas trascendentales.
Fórmulas de medio ángulo y suma de ángulos
Históricamente, el método más antiguo mediante el cual se calculaban las tablas trigonométricas, y probablemente el más común hasta la llegada de las computadoras, era aplicar repetidamente las identidades trigonométricas de medio ángulo y suma de ángulos a partir de un valor conocido (como sin(π/2) = 1, cos(π/2) = 0). Este método fue utilizado por el antiguo astrónomo Ptolomeo, quien lo derivó en el Almagesto, un tratado de astronomía. En forma moderna, las identidades que derivó se expresan de la siguiente manera (con signos determinados por el cuadrante en el que se encuentra x):
- # ()x2)=± ± 12()1+# x){displaystyle cos left({frac {x}{2}right)=pm {fnMicroc} {1}{2} {1+cos x)}}}
- pecado ()x2)=± ± 12()1− − # x){displaystyle sin left({frac {x}{2}right)=pm {fnMicroc} {fnMicroc} {fnMicrosoft Sans Serif}}} {fnMicroc}} {fnMicroc}} {fnMicrosoft Sans Serif}}} {fnK}}}}} {fnMicroc {fnMicroc}} {f}}}} {f}}}}}}}}}}} {f}}}}}}} {f} {f}}}}}}}} {f}}}} {f}}}}}} {f} {f}}}}}}}}}}}}}}}}}}}}}} {f} {f} {f}}}} {f}}}}}}}}}}}}}}}}}}} {f}}}}}} {f}}}}} {f}}}}}}}}}}}}}}}}}}}}
- pecado ()x± ± Sí.)=pecado ()x)# ()Sí.)± ± # ()x)pecado ()Sí.){displaystyle sin(xpm y)=sin(x)cos(y)pmcos(x)sin(y),}
- # ()x± ± Sí.)=# ()x)# ()Sí.)∓ ∓ pecado ()x)pecado ()Sí.){displaystyle cos(xpm y)=cos(x)cos(y)mp sin(x)sin(y),}
Estos se usaron para construir la tabla de cuerdas de Ptolomeo, que se aplicó a problemas astronómicos.
Son posibles varias otras permutaciones de estas identidades: por ejemplo, algunas de las primeras tablas trigonométricas no usaban seno y coseno, sino seno y verseno.
Una aproximación rápida, pero imprecisa
Un algoritmo rápido, pero inexacto, para calcular una tabla de N aproximaciones sn para sin(2πn/N) y cn para cos(2π n/N) es:
- s0 = 0
- c0 = 1
- sn+ 1 = sn + d × cn
- cn+ 1 = cn − d × sn
para n = 0,...,N − 1, donde d = 2π/N.
Este es simplemente el método de Euler para integrar la ecuación diferencial:
- ds/dt=c{displaystyle ds/dt=c}
- dc/dt=− − s{displaystyle dc/dt=-s
con condiciones iniciales s(0) = 0 y c(0) = 1, cuya solución analítica es s = sin(t) y c = cos(t).
Desafortunadamente, este no es un algoritmo útil para generar tablas de senos porque tiene un error significativo, proporcional a 1/N.
Por ejemplo, para N = 256 el error máximo en los valores del seno es ~0,061 (s202 = −1,0368 en lugar de − 0,9757). Para N = 1024, el error máximo en los valores del seno es ~0,015 (s803 = −0,99321 en lugar de −0,97832), alrededor de 4 veces más pequeño. Si se representaran gráficamente los valores de seno y coseno obtenidos, este algoritmo dibujaría una espiral logarítmica en lugar de un círculo.
Una fórmula de recurrencia mejor, pero todavía imperfecta
Una fórmula de recurrencia simple para generar tablas trigonométricas se basa en la fórmula de Euler y la relación:
- ei()Silencio Silencio +Δ Δ )=eiSilencio Silencio × × eiΔ Δ Silencio Silencio {displaystyle e^{i(theta ##############Delta]}=e^{itheta }times e^{i Delta theta }
Esto lleva a la siguiente recurrencia para calcular los valores trigonométricos sn y cn como arriba:
- c0 = 1
- s0 = 0
- cn+ 1 = wr cn − wi sn
- sn+ 1 = wi cn + wr sn
para n = 0,..., N − 1, donde wr = cos(2π/N) y wi = sin(2π/ n). Estos dos valores trigonométricos iniciales generalmente se calculan usando funciones de biblioteca existentes (pero también se pueden encontrar, por ejemplo, empleando el método de Newton en el plano complejo para resolver la raíz primitiva de zN − 1).
Este método produciría una tabla exacta en aritmética exacta, pero tiene errores en la aritmética de punto flotante de precisión finita. De hecho, los errores crecen como O(ε N) (tanto en el peor de los casos como en el promedio), donde ε es la precisión de coma flotante.
Una mejora significativa es usar la siguiente modificación a la anterior, un truco (gracias a Singleton) que se usa a menudo para generar valores trigonométricos para implementaciones de FFT:
- c0 = 1
- s0 = 0
- cn+ 1 = cnα cn+ β sn)
- sn+ 1 = sn+ (βcnαsn)
donde α = 2 sin2(π/N) y β = sin(2π/N). Los errores de este método son mucho más pequeños, O(ε √N) en promedio y O(ε N) en el peor de los casos, pero todavía es lo suficientemente grande como para degradar la precisión de las FFT de gran tamaño.
Contenido relacionado
Esquema axiomático de reemplazo
Clase de conjugación
Número de potencia