Швидке (приблизне) оцінювання многочлена Чебишева


9

Чи є кращий спосіб, як здійснити швидку (приблизну) оцінку інтерполяційного полінома Чебишева на рівномірній сітці (з урахуванням значень функції у вузлах Чебишева)? Моя проблема полягає в тому, що інтерполяція стає повільною, коли ступінь інтерполяційного полінома зростає.

На думку мені прийшли такі ідеї:

  • Спробуйте адаптувати нерівномірні методи FFT (NFFT)
  • Використовуйте FFT для обчислення похідних у вузлах Чебишева, можливо, після першого переходу до тоншої сітки (Чебишева). Потім використовуйте кусково-кубічну інтерполяцію для (приблизної) оцінки.
  • Використовуйте певну формулу, яка використовує лише значення функцій (і потенційно похідних) у "сусідніх" вузлах Чебишева (це пов'язано з конкретною технікою NFFT).

Погляньте на chebfun ! Це ціла бібліотека, яка ґрунтується на функціональних уявленнях за допомогою многочленів Чебишева. Це відкритий код, високо оптимізований і доглянутий, і я думаю, що якщо існує кращий спосіб точної оцінки полінома, то ви його знайдете там.
січня

Відповіді:


11

Чи думали ви використовувати баріцентричну інтерполяцію ? Детальний опис того, як це зробити ефективно для вузлів Чебишева, наведений у розділі 5 цього документу.

Це насправді точна оцінка Чебишевського інтерполянта. Якщо ви оцінюєте многочлен ступеняn у m вузлів, вартість в O(nm).

Оновлення

Іншою альтернативою, якщо у вас є коефіцієнти Чебишева вашого інтерполяційного многочлена, є використання алгоритму Кленшоу . Якщо у вас є лише значення функцій у вузлах Чебишева, але вам доводиться кілька разів оцінювати поліном, ви можете обчислити коефіцієнти з FFT.

Алгоритм Кленшо є дещо швидшим, ніж баріцентрична інтерполяція, оскільки він вимагає лише додавання та множення, а також він векторизується досить непогано.


В даний час я це роблю, попередньо обчислюючи ваги відносно значень функцій у вузлах Чебишева для конкретної точки оцінювання, потім оцінюйте цю точку для всіх інтерполяцій, які я маю робити (їх багато, усі з однаковими вузлами Чебишева та однаковими точками оцінки) , а потім перейдіть до наступної точки оцінювання.
Томас Клімпель

@ThomasKlimpel: Як ви обчислюєте ваги? Якщо ви використовуєте вузли Чебишева[1,1], вони просто ±1, або ±1/2по краях Якщо швидкість насправді суть, я додав у свою відповідь алгоритм Кленшоу. На мій досвід, у складеному коді це приблизно в чотири рази швидше.
Педро
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.