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θ

Victor Liu
fuente

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)θ)


fuente
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(ϑ)

Pedro
fuente
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ε

ε

JM
fuente