Tablas trigonométricas

Una página de un libro de tablas matemáticas del astrónomo alemán Matthias Bernegger de 1619. Como era costumbre entonces, los valores de las funciones trigonométricas se expresan en el texto como números enteros de hasta 8 dígitos.

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.[1]​ El cálculo de las tablas matemáticas fue un área de estudio importante, que condujo al desarrollo de los primeros dispositivos de computación mecánica.[2]

En este artículo se describen resumidamente las técnicas de programación y los algoritmos informáticos que permiten calcular los valores de funciones trigonométricas de gran precisión que requieren algunos cálculos matemáticos. Para las tradicionales tablas impresas en papel, véase el artículo Tabla matemática.

Introducción

Las computadoras modernas y las calculadoras de bolsillo ahora generan valores de funciones trigonométricas de forma inmediata, utilizando bibliotecas especiales de código matemático. A menudo, estas bibliotecas usan tablas precalculadas internamente y obtienen el valor requerido mediante el uso de 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 de computadora, donde solo se requiere una precisión modesta y la velocidad a menudo es primordial.[3]

Otra aplicación importante de las tablas trigonométricas y de los esquemas de generación es para los algoritmos de la transformada rápida de Fourier (TRF),[4]​ donde los mismos valores de una función trigonométrica (los llamados factores twiddle)[5]​ deben evaluarse muchas veces en una transformación dada, especialmente en el caso común donde se calculan muchas transformaciones del mismo tamaño. En este caso, llamar a rutinas genéricas de la biblioteca cada vez es inaceptablemente lento. Una opción es llamar a las rutinas de la biblioteca una vez, para construir una tabla de los valores trigonométricos que se necesitarán, pero esto requiere una memoria considerable 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 han dedicado importantes investigaciones para 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 a demanda

Las computadoras y calculadoras modernas utilizan una distintas técnicas para obtener valores de funciones trigonométricas a demanda 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 polinómica o racional (como la aproximación de Chebyshev,[6]​ la mejor aproximación uniforme y la aproximación de Padé, y típicamente para precisiones más altas o variables, series de Taylor y Laurent) con reducción de rango y búsqueda de tabla, que primero buscan el ángulo más cercano en una tabla pequeña y luego usan el polinomio para calcular la corrección. Sin embargo, mantener la precisión mientras se realiza dicha interpolación no es trivial; y métodos como las tablas precisas de Gal,[7]​ la reducción de Cody y Waite, y los algoritmos de reducción de Payne y Hanek se pueden usar para este propósito. En los dispositivos más simples, que carecen de un coprocesador multiplicador, existe un algoritmo llamado CORDIC[8]​ (así como técnicas relacionadas) que es más eficiente, ya que solo utiliza cambios y adiciones. Todos estos métodos comúnmente se instalan en el hardware por razones de rendimiento.

El polinomio particular utilizado para aproximar una función trigonométrica se genera con anticipación utilizando alguna simulació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 ser aproximadas por la media aritmético-geométrica, que a su vez se aproxima a la función trigonométrica por una integral elíptica (compleja) (Brent, 1976).[9]

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 mediante la aplicación de la fórmula de De Moivre[10]​ para n = desde a hasta una bésima raíz de la unidad, que también es una 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 quinta potencia de la raíz 37 de la unidad cos (2π/37) + sen (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 los algoritmos aritmético-geométricos medios anteriores, mientras convergen a una tasa asintótica similar. Sin embargo, estos últimos algoritmos son necesarios para las constantes trigonométricas trascendentes.

Fórmulas del ángulo mitad y suma de ángulos

Históricamente, el primer método por el cual se calcularon las tablas trigonométricas, y probablemente el más común hasta el advenimiento de las computadoras, fue aplicar repetidamente las identidades trigonométricas del ángulo mitad y adición de ángulos a partir de un valor conocido (como sen (π/2) = 1, cos (π/2) = 0). Este método fue utilizado por el antiguo astrónomo Ptolomeo, quien lo dedujo en el Almagesto,[11]​ un tratado sobre astronomía. En forma moderna, las identidades que obtuvo se expresan de la siguiente manera (con signos determinados por el cuadrante en el que se encuentra x);

Estas fórmulas se usaron para construir la tabla de cuerdas de Ptolomeo, que se aplicó a problemas astronómicos.

Son posibles otras permutaciones en estas identidades: por ejemplo, en algunas de las primeras tablas trigonométricas no se usaron seno y coseno, sino seno y verseno.

Aproximación rápida pero imprecisa

Un algoritmo rápido, pero impreciso, para calcular una tabla de N aproximaciones sn para sen(2πn/N) y cn para cos(2π n/N) es:

s 0 = 0
c 0 = 1
s n +1 = s n + d × c n
c n +1 = c nd × s n

para n = 0,..., N − 1, donde d = 2π/N.

Este es simplemente el método de Euler para integrar la ecuación diferencial:[12]

con condiciones iniciales s(0) = 0 y c(0) = 1, cuya solución analítica es s = sen (t) y c = cos(t).

Desafortunadamente, este no es un algoritmo útil para generar tablas sinusoidales, porque produce errores significativos, proporcionales a 1/N.

Por ejemplo, para N = 256, el error máximo en los valores seno es ~0.061 (s202 = − 1.0368 en lugar de −0.9757). Para N = 1024, el error máximo en los valores seno es ~0.015 (s803 = −0.99321 en lugar de −0.97832), aproximadamente 4 veces menor. Si los valores del seno y del coseno obtenidos se representaran gráficamente, este algoritmo dibujaría una espiral logarítmica en lugar de un círculo.

Una fórmula de recurrencia mejor, pero aún imperfecta

Una fórmula de recurrencia simple para generar tablas trigonométricas se basa en fórmula de Euler y la relación:

Esto lleva a la siguiente recurrencia para calcular los valores trigonométricos sn y cn como se indica más arriba:

c 0 = 1
s 0 = 0
c n +1 = w r c nw i s n
s n +1 = w i c n + w r s n

para n = 0, ...., N − 1, donde wr = cos(2π/N) y wi = sen(2π/N). Estos dos valores trigonométricos iniciales generalmente se calculan utilizando 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 aritmética de punto flotante de precisión finita. De hecho, los errores crecen como O(εN ) (tanto en el peor caso como en el promedio), donde ε es la precisión de coma flotante.

Una mejora significativa es usar la siguiente modificación a lo anterior, un truco (debido a Singleton, 1967) que se usa a menudo para generar valores trigonométricos para calcular TRF:[13]

c 0 = 1
s 0 = 0
c n +1 = c n   −   α c n   +   β s n )
s n +1 = s n + ( β cn − α sn )

donde α = 2   sen 2(π/N) y β = sen(2π/N). Los errores de este método son mucho menores, O(ε √N) en promedio y O(ε N) en el peor de los casos, pero aún es lo suficientemente grande como para degradar sustancialmente la precisión de las TRF de tamaños grandes.

Véase también

Referencias

  1. Miquel Grau Sánchez, Miquel Noguera Batlle (2001). Cálculo numérico. Univ. Politèc. de Catalunya. pp. 13 de 360. ISBN 9788483014554. Consultado el 24 de noviembre de 2019. 
  2. Sociología de la ciencia y la tecnología. Editorial CSIC - CSIC Press. 1995. pp. 356 de 468. ISBN 9788400074630. Consultado el 24 de noviembre de 2019. 
  3. VLSI. BoD – Books on Demand. 2010. pp. 199 de 466. ISBN 9789533070490. Consultado el 24 de noviembre de 2019. 
  4. Samuel Kotz (2005). Encyclopedia of Statistical Sciences, Volumen 5. Wiley. p. 724. ISBN 9780471743781. Consultado el 24 de noviembre de 2019. 
  5. Embedded Computer Systems: Architectures, Modeling, and Simulation: 7th International Workshop, SAMOS 2007, Samos, Greece, July 16-19, 2007, Proceedings. Springer. 2007. pp. 65 de 470. ISBN 9783540736257. Consultado el 24 de noviembre de 2019. 
  6. Press, WH; Teukolsky, SA; Vetterling, WT; Flannery, BP (2007), «Section 5.8. Chebyshev Approximation», Numerical Recipes: The Art of Scientific Computing (3rd edición), New York: Cambridge University Press, ISBN 978-0-521-88068-8 .
  7. Gal, Shmuel (1986). «Computing elementary functions: A new approach for achieving high accuracy and good performance». En Miranker; Toupin, eds. Accurate Scientific Computations (1 edición). Proceedings of Computations, Symposium, Bad Neuenahr, Federal Republic of Germany, March 12-14, 1985: Springer-Verlag Berlin Heidelberg. p. 1–16. ISBN 978-3-540-16798-3. 
  8. Ashutosh Gupta (2010). Cordic Implementation of Sine-Cosine Functions. Lambert Academic Publishing. p. 72. ISBN 9783838398853. Consultado el 24 de noviembre de 2019. 
  9. J.L. Berggren, Jonathan Borwein, Peter Borwein (2013). Pi: A Source Book. Springer Science & Business Media. pp. 553 de 716. ISBN 9781475727364. Consultado el 24 de noviembre de 2019. 
  10. Evguenii Kurmyshev (2003). Fundamentos De Metodos Matematicos Para Fisica E Ingenieria / Basis of Mathematic Methods for Physic and Engineering. Editorial Limusa. pp. 65 de 300. ISBN 9789681863661. Consultado el 24 de noviembre de 2019. 
  11. Claudio Ptolomeo, Luis A. Sáiz Montes (2003). ALMAGESTO SOBRE LAS MEDIDAS DE LAS LINEAS RECTAS. Editorial MAXTOR. pp. 37 de 90. ISBN 9788497610728. Consultado el 24 de noviembre de 2019. 
  12. Encyclopedia of Trigonometry Malestrom
  13. R.W Hockney, C.R Jesshope (1988). Parallel Computers 2: Architecture, Programming and Algorithms. CRC Press. pp. 495 de 642. ISBN 9780852748114. Consultado el 24 de noviembre de 2019. 

Bibliografía

  • Carl B. Boyer (1991) A History of Mathematics, 2nd edition, John Wiley & Sons.
  • Manfred Tasche and Hansmartin Zeuner (2002) "Improved roundoff error analysis for precomputed twiddle factors", Journal for Computational Analysis and Applications 4(1): 1–18.
  • James C. Schatzman (1996) "Accuracy of the discrete Fourier transform and the fast Fourier transform", SIAM Journal on Scientific Computing 17(5): 1150–1166.
  • Vitit Kantabutra (1996) "On hardware for computing exponential and trigonometric functions," IEEE Transactions on Computers 45(3): 328–339 .
  • R. P. Brent (1976) "Fast Multiple-Precision Evaluation of Elementary Functions", Journal of the Association for Computing Machinery 23: 242–251.
  • Singleton, Richard C. (1967) "On computing the fast Fourier transform", Communications of the ACM 10: 647–654.
  • Gal, Shmuel and Bachelis, Boris (1991) "An accurate elementary mathematical library for the IEEE floating point standard", ACM Transactions on Mathematical Software.