Evaluación de seno y coseno de un múltiplo entero de un ángulo


8

Al evaluar los armónicos cilíndricos, uno debe evaluar las funciones trigonométricas y , potencialmente para enteros grandes y . ¿Cuál es la mejor manera de hacer esto en código C? Actualmente, solo evalúo en el ángulo , pero sospecharía que las bibliotecas estándar pierden precisión con argumentos grandes. Estaba considerando usar fórmulas de doble ángulo y similares para reducir recursivamente la magnitud de los argumentos, pero me pregunto si eso termina incurriendo en más errores.sin ( m θ ) m θ [ - π , π ] m θcos(mθ)sin(mθ)mθ[π,π]mθ

Respuestas:


4

Si lo hace de forma iterativa, calculando y desde y , luego flotando los errores puntuales no explotarán por acumulación. Esto se debe a que la matriz de transición es ortonormal. Es una matriz de rotación simple.cos ( n θ ) sin ( ( n - 1 ) θ ) cos ( ( n - 1 ) θ )sin(nθ)cos(nθ)sin((n1)θ)cos((n1)θ)


Hm, ese es un buen punto. Sin embargo, incluso si el error no explota, ¿tengo alguna seguridad de que el resultado no se ha alejado de cuál debería ser la respuesta "exacta"?
Victor Liu

Dudo que los resultados sean muy diferentes en comparación con la respuesta exacta. Puede probar para y para que sepa qué esperar. θ = π / mm=1000θ=π/m

Siempre que sea ​​par, usaría la fórmula de doble ángulo para cortar el exponente por la mitad. Esto corresponde a computar el ésima potencia de la matriz de rotación con el algoritmo. n O ( log ( n ) )nnO(log(n))
Erik P.

Tienes razón. Mi respuesta se basó en el supuesto de que también se usarán todos los valores intermedios ( ). 1,...,m1

7

Me he encontrado con un problema similar antes, pero estaba más preocupado por la velocidad que por la precisión (ver el documento aquí ). Si su ángulo es el resultado de un , que suele ser el caso en los cálculos geométricos, puede usar polinomios de Chebyshev que se definen comoϑarccos()

Tk(x)=cos(karccos(x)),orTk(cos(ϑ))=cos(kϑ)

y puede evaluarse de forma rápida y estable utilizando la relación de recurrencia de tres términos

Tk(x)=2xTk1(x)Tk2(x),T0(x)=1,T1(x)=x.

Por lo tanto, para su problema, puede evaluar en multiplicaciones y adiciones, siempre que tenga .m + 1 cos ( ϑ )cos(mϑ)m+1cos(ϑ)


2

coskxsinkx

La recurrencia (efectivamente la misma que en el ejemplo 4 en Bulirsch / Stoer, vea que para un análisis detallado) continúa así:

cos(θ+ε)=cosθ(pcosθ+qsinθ)sin(θ+ε)=sinθ(psinθqcosθ)

donde tenemos las constantes precalculadas

p=2sin2ε2,q=sinε

ε

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.