Chebyshev polinomunun hızlı (yaklaşık) değerlendirilmesi


9

Tekdüze ızgara üzerinde Chebyshev enterpolasyon polinomunun (Chebyshev düğümlerindeki fonksiyon değerleri verildiğinde) hızlı (yaklaşık) bir değerlendirmenin nasıl uygulanacağının tercih edilen bir yolu var mı? Benim sorunum, enterpolasyon polinomunun derecesi arttığında enterpolasyonun yavaşlamasıdır.

Aklıma şu fikirler geldi:

  • Düzgün olmayan FFT (NFFT) tekniklerini uyarlamaya çalışın
  • Potansiyel olarak daha ince (Chebyshev) bir ızgaraya gittikten sonra Chebyshev düğümlerindeki türevleri hesaplamak için FFT'yi kullanın. Ardından (yaklaşık) değerlendirme için parçalı bir kübik enterpolasyon kullanın.
  • "Yakındaki" Chebyshev düğümlerinde yalnızca işlev değerlerini (ve muhtemelen türevlerini) kullanan bir formül kullanın (bu, belirli bir NFFT tekniğiyle ilişkilidir).

Chebfun'a bir göz atın ! Chebyshev polinomları aracılığıyla fonksiyon temsillerine dayanan bütün bir kütüphanedir. Açık kaynak, yüksek derecede optimize edilmiş ve bakımlıdır ve sanırım bir polinomun noktasal değerlendirmesi için tercih edilen bir yol varsa, o zaman orada bulacaksınız.
Ocak

Yanıtlar:


11

Barycentric Interpolation kullanmayı düşündünüz mü? Chebyshev düğümleri için verimli bir şekilde nasıl yapılacağına dair ayrıntılı bir açıklama bu makalenin 5. Bölümünde verilmiştir .

Bu aslında Chebyshev interpolantının tam bir değerlendirmesidir. Diploma bir polinom değerlendiren ediyorsanız en düğümlerinde, maliyet olduğu .nmÖ(nm)

Güncelleme

İnterpolatuar polinomunuzun Chebyshev katsayılarına sahipseniz başka bir alternatif, Clenshaw algoritmasını kullanmaktır . Sadece Chebyshev düğümlerinde fonksiyon değerlerine sahipseniz, ancak polinomu birkaç kez değerlendirmeniz gerekiyorsa, katsayıları bir FFT ile hesaplayabilirsiniz.

Clenshaw algoritması Barycentric enterpolasyonundan biraz daha hızlıdır, çünkü sadece eklemeler ve çarpmalar gerektirir ve ayrıca oldukça güzel bir şekilde vektörleşir.


Şu anda, belirli bir değerlendirme noktası için Chebyshev düğümlerindeki fonksiyon değerlerine göre ağırlıkları önceden hesaplayarak yapıyorum, sonra bu noktayı yapmam gereken tüm enterpolasyonlar için değerlendiriyorum (hepsi var, hepsi Chebyshev düğümleri ve özdeş değerlendirme noktaları ile) ve ardından bir sonraki değerlendirme noktasına geçin.
Thomas Klimpel

@ThomasKlimpel: Ağırlıkları nasıl hesaplıyorsunuz? üzerinde Chebyshev düğümlerini kullanıyorsanız , kenarlarda sadece veya . Hız gerçekten çok önemliyse, cevabıma Clenshaw algoritmasını ekledim. Deneyimlerime göre, derlenmiş kodda yaklaşık dört kat daha hızlı. [-1,1]±1±1/2
Pedro
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.