¿Cómo utiliza el JPL el método Chebyshev?

En los paquetes DE, la NASA nos da una serie de coeficientes para la aproximación de Chebyshev. Según tengo entendido, esas aproximaciones vienen dadas por una serie de polinomios T norte para el intervalo [ 1 , 1 ] . Entonces consideramos F ( t ) ser i a i T i ( τ ) (donde τ es el tiempo normalizado). Que es a i y cuales son sus valores?

Luego consideramos una aproximación usando una serie de Taylor definida como F ( t ) = i b i τ i . Que es b i ? ¿Es una función de Bessel?

Las dos últimas relaciones representan el algoritmo de Clenshaw. Aquí no entiendo exactamente cómo funciona. ¿También tiene algo que ver el número de 13 coeficientes con el fenómeno de Runge?

A continuación se encuentran las ecuaciones 3.52 a 3.59, de la sección 3.3.3 (Aproximación de Chebychev) en el libro Satellite Orbits: Models, Methods and Applications * de De Oliver Montenbruck y Eberhard Gill Springer 2000, ISBN 978-3-642-58351-3que se puede ver en books.google.com

imagen12323

ingrese la descripción de la imagen aquí

ingrese la descripción de la imagen aquí

ingrese la descripción de la imagen aquí

Sería genial si pudiera agregar un enlace a la fuente que está leyendo.
¡Es un libro fantástico por cierto!

Respuestas (2)

Él a i son los coeficientes para la aproximación de Chebyshev. Como dices, la NASA nos los da. Eso es lo que encuentra en los archivos DE, por ejemplo, de430.bsp . (No haga clic en eso a menos que desee descargar un archivo de más de 100 MB). La NASA/JPL necesitaba una forma de proporcionar funciones de tiempo de alta resolución y alta precisión para las posiciones de los planetas, y la forma más compacta eran los coeficientes de Chebyshev. polinomios. Las funciones se dividen en pequeños intervalos, dentro de los cuales los coeficientes y las funciones resultantes son válidos.

no, el b i no son funciones de Bessel. Son los coeficientes de una serie de Taylor que estima F sobre el τ para ese intervalo. Esa ecuación se sacó de contexto, donde ese contexto discutía por qué los polinomios de Chebyshev, T norte ( τ ) se utilizan para la aproximación en lugar de una serie de Taylor, que utiliza los polinomios τ norte . La razón es que una aproximación de Chebyshev requerirá menos términos para la misma precisión.

El algoritmo de Clenshaw es simplemente una forma de generar los polinomios de Chebyshev y multiplicar por el a i y sumarlos, todo al mismo tiempo para minimizar el número de operaciones requeridas. Está bien descrito en la página de Wikipedia vinculada y se puede derivar fácilmente de la relación de recurrencia de los polinomios de Chebyshev cerca de la parte superior de su imagen.

El error en una aproximación de Chebyshev no es plano. Oscila y es cercano al del polinomio minimax del mismo orden. La diferencia entre una función de buen comportamiento F ( t ) y el polinomio minimax de orden norte que aproxima esta función en ese intervalo exhibe norte + 2 extremos, donde norte es el orden del polinomio, siendo el valor absoluto de la diferencia en cada extremo el mismo. No hay garantía de cómo se comporta la función de error para una serie de Taylor, o incluso para una aproximación de error de mínimos cuadrados. ...
Un usuario de una aproximación generalmente se preocupa por lo peor que la aproximación puede hacerle en lugar del comportamiento de mínimos cuadrados. El hecho de que los polinomios de Chebyshev estén cerca del polinomio minimax ideal es la razón por la que se usan tan ampliamente.

El artículo Formato de los archivos de efemérides JPL tiene un desglose detallado de cómo usar las efemérides de desarrollo, incluido un tutorial de ejemplo y un código fuente de ejemplo.

Creo que tienes mucha información superflua, todo lo que realmente necesitas es:

i = 1 norte a i T i ( X )

Donde a i son los coeficientes, X es la variable de tiempo normalizada al intervalo [ 1 , 1 ] , y T i ( X ) se define de la siguiente manera:

T 0 ( X ) = 0

T 1 ( X ) = X

T norte + 1 ( X ) = 2 X T norte ( X ) T norte 1 ( X )

Código en Javascript para realizar este cálculo:

function computePolynomial(x,coefficients){
   let T=new Array();

   T[0]=1;
   T[1]=x;
   for(let n=2;n<coefficients.length;n++)  {
     T[n]=2*x*T[n-1] - T[n-2];
   }

  let v=0;
  for(let i=coefficients.length-1;i>=0;i--){
    v+=T[i]*coefficients[i];
  }
  return v;
}   

Tenga en cuenta que la suma de todas las variables se realiza en orden inverso, de menor a mayor para evitar el redondeo de punto flotante.

El repositorio de Github gmiller123456/jpl-development-ephemeris tiene código fuente no optimizado en varios idiomas que implementan todo el proceso.