Интерполяционный многочлен Лагранжа на Python

Пусть функция f(x) задана таблицей
x  x0   x1     xn
y  y0   y1     yn

Интерполяционным многочленом Лагранжа называется многочлен
Ln(x)=i=0nyi(x-x0)(x-xi-1)(x-xi+1)(x-xn)(xi-x0)(xi-xi-1)(xi-xi+1)(xi-xn).

Объявляем функцию для организации вычислений по формуле интерполяционного многочлена Лагранжа

     def lagranz(x,y,t):
         z=0
         for j in range(len(y)):
             p1=1; p2=1
             for i in range(len(x)):
                 if i==j:
                     p1=p1*1; p2=p2*1	
                 else: 
                     p1=p1*(t-x[i])
                     p2=p2*(x[j]-x[i])
             z=z+y[j]*p1/p2
         return z


Пример. Написать программу для вычисления значений интерполяционного многочлена Лагранжа для функции, заданной таблицей
x     2 5  -6   7   4  3 8   9   1  -2
f(x) -1	77 -297 249 33 9 389 573 -3 -21

Решение

     import numpy as np
     import matplotlib.pyplot as plt
     x=np.array([2,5,-6,7,4,3,8,9,1,-2], dtype=float)
     y=np.array([-1,77,-297,249,33,9,389,573,-3,-21], dtype=float)
     def lagranz(x,y,t):
         z=0
         for j in range(len(y)):
             p1=1; p2=1
             for i in range(len(x)):
                 if i==j:
                     p1=p1*1; p2=p2*1	
                 else: 
                     p1=p1*(t-x[i])
                     p2=p2*(x[j]-x[i])
             z=z+y[j]*p1/p2
         return z
     xnew=np.linspace(np.min(x),np.max(x),100)
     ynew=[lagranz(x,y,i) for i in xnew]
     plt.plot(x,y,'o',xnew,ynew)
     plt.grid(True)
     plt.show()


Результат:
Интерполяционные многочлен Лагранжа

Для построения графика использовалась библиотека matplotlib. Некоторые примеры использования этой библиотеке можно посмотреть здесь:
  • avatar
  • 0

0 комментариев

Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.