интерполяция (полином Лагранжа, теорема отсчетов)

eiyawii
Сообщения: 60
Зарегистрирован: 20 окт 2011, 07:38

интерполяция (полином Лагранжа, теорема отсчетов)

Сообщение eiyawii »

Есть несколько нюансов в интерполировании полиномами Лагранжа, с которыми я не разобрался.
приведу барицентрическую формулу:
Изображение
где
1. Как лучше составить алгоритм вычисления интерполянты?
Есть обычная формула, которая приведена в википедии и барицентрическая. Я написал код по одной и другой формуле. При вычислении иногда возникают выбросы большой величины, как-будто происходит деление на величину близкую к нулю. Код такой:

Код: Выделить всё

def bf(t):
    D=[]; d=0; interpolyant=[]; ZZ=[]
    while d<len(t)-1:
        C=0; Z=0
        for j in range(0,len(t)):
            Aj=1
            for i in range(0,len(t)):
                try:
                #if j<>i:
                    Aj*=1./(j-i)
                #else: pass
                except ZeroDivisionError: pass
            #try:
            if d<>j:
                C+=(Aj*t[j])/(d-j)
                Z+=Aj/(d-j)
            else:
                Z=1; C=t[j]; break
            #except ZeroDivisionError: pass
        interpolyant.append(C/Z)
        D.append(d)
        ZZ.append(Z)
        d+=0.1
    return D, interpolyant, ZZ
работает. Когда я исследовал как это работает, попытался вывести ряд значений ZZ, который является знаменателем в барицентрической формуле. Показывает вот что(это о выбросах, при i=j):

Изображение

то есть эти выбросы происходят, когда в знаменателе дроби одинаковые слагаемые, то есть деление на нуль. Как обычно поступают в таких ситуациях?

Где можно посмотреть алгоритм (код) вычисления полинома Лагранжа?

2. Применяется ли интерполирование таким способом на практике? В статье на экспоненте утверждается, что с увеличением числа точек растут как вычислительные трудности, так и ошибка интерполирования и поэтому на практике вроде как не применяется.

Аватара пользователя
Бахурин Сергей
Администратор
Сообщения: 1114
Зарегистрирован: 05 окт 2010, 19:55
Контактная информация:

Re: интерполяция (полином Лагранжа, теорема отсчетов)

Сообщение Бахурин Сергей »

вашу формулу не использовал никогда, но если результат отличается от полиномиальной интерполяции значит ошибка или в формуле или в реализации. Ваш пример на каком языке? Я рекомендую использовать матлаб или его аналог октаву для теста и отладки. Код на матлабе я могу хотя-бы проверить. Лагранжева интерполяции используется очень широко о чем можете почитать здесь http://www.dsplib.ru/content/farrow/farrow.html

Ответить