Как метод Чебышева используется в JPL?

В пакетах DE НАСА дает нам ряд коэффициентов для приближения Чебышева. Насколько я понимаю, эти приближения задаются рядом полиномов Т н для интервала [ 1 , 1 ] . Затем мы считаем ф ( т ) быть я а я Т я ( т ) (куда т нормированное время). Что такое а я и каковы его значения?

Затем мы рассмотрим аппроксимацию с помощью ряда Тейлора, определяемого как ф ( т ) знак равно я б я т я . Что такое б я ? Является ли это функцией Бесселя?

Последние два соотношения представляют алгоритм Кленшоу. Вот я не совсем понимаю, как это работает. Также имеет ли число 13 коэффициентов какое-то отношение к феномену Рунге?

Ниже приведены уравнения с 3.52 по 3.59 из раздела 3.3.3 (аппроксимация Чебычева) в книге Де Оливера Монтенбрука и Эберхарда Гилла Спрингера « Спутниковые орбиты: модели, методы и приложенияISBN 978-3-642-58351-3 » * , 2000 г., которую можно просмотреть на books.google.com.

изображение12323

введите описание изображения здесь

введите описание изображения здесь

введите описание изображения здесь

Было бы здорово, если бы вы добавили ссылку на источник, который вы читаете.
Между прочим, это фантастическая книга!

Ответы (2)

The а я — коэффициенты чебышевского приближения. Как вы говорите, НАСА дает нам их. Это то, что вы найдете в файлах DE, например, de430.bsp . (Не нажимайте на нее, если не хотите загрузить файл >100 МБ.) НАСА/Лаборатории реактивного движения нуждался в способе обеспечить функции времени с высоким разрешением и высокой точностью для положений планет, и самым компактным способом были коэффициенты Чебышева. многочлены. Функции разбиваются на небольшие интервалы, в пределах которых действуют коэффициенты и результирующие функции.

Нет, б я не являются функциями Бесселя. Это коэффициенты ряда Тейлора, который оценивает ф над т для этого интервала. Это уравнение было вырвано из контекста, поскольку в этом контексте обсуждалось, почему многочлены Чебышева, Т н ( т ) используются для аппроксимации вместо ряда Тейлора, в котором используются многочлены т н . Причина в том, что приближение Чебышева потребует меньше членов для той же точности.

Алгоритм Кленшоу — это просто способ генерировать полиномы Чебышева и умножать на а я и складывайте их одновременно, чтобы свести к минимуму количество необходимых операций. Это хорошо описано на связанной странице Википедии и может быть легко получено из рекуррентного соотношения для полиномов Чебышева в верхней части вашего изображения.

Ошибка в приближении Чебышева не является плоской. Он осциллирует и близок к минимаксному многочлену того же порядка. Разница между хорошей функцией ф ( т ) и минимаксный полином порядка н который аппроксимирует эту функцию на этом интервале, показывает н + 2 экстремумы, где н - порядок многочлена, при этом абсолютное значение разности на каждом экстремуме одинаково. Нет никакой гарантии того, как ведет себя функция ошибок для ряда Тейлора или даже для аппроксимации ошибки методом наименьших квадратов. ...
Пользователь аппроксимации обычно заботится о худшем, что аппроксимация может сделать с ними, а не о поведении методом наименьших квадратов. То, что многочлены Чебышева близки к идеальному минимаксному многочлену, объясняет, почему они так широко используются.

В статье « Формат файлов эфемерид JPL » подробно описано, как использовать эфемериды разработки, включая пример пошагового руководства и пример исходного кода.

Я думаю, что у вас много лишней информации, все, что вам действительно нужно, это:

я знак равно 1 н а я Т я ( Икс )

Где а я коэффициенты, Икс - временная переменная, нормированная на интервал [ 1 , 1 ] , и Т я ( Икс ) определяется следующим образом:

Т 0 ( Икс ) знак равно 0

Т 1 ( Икс ) знак равно Икс

Т н + 1 ( Икс ) знак равно 2 Икс Т н ( Икс ) Т н 1 ( Икс )

Код в Javascript для выполнения этого вычисления:

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;
}   

Обратите внимание, что суммирование всех переменных выполняется в обратном порядке, от наименьшего к наибольшему, чтобы избежать округления с плавающей запятой.

Репозиторий Github gmiller123456/jpl-development-ephemeris содержит неоптимизированный исходный код на нескольких языках, реализующих весь процесс.