@TOC 本文已参与「新人创作礼」活动,一起开启掘金创作之路。
1、原理
对某个多项式函数有已知的k+1个点,假设任意两个不同的都互不相同,那么应用拉格朗日插值公式所得到的拉格朗日插值多项式为:
L(x)=j=0∑kyjℓj(x)
其中每个ℓj(x)为拉格朗日基本多项式(或称插值基函数),其表达式为:
ℓj(x)=i=0,i=j∏kxj−xix−xi=(xj−x0)(x−x0)⋯(xj−xj−1)(x−xj−1)(xj−xj+1)(x−xj+1)⋯(xj−xk)(x−xk)
例如:当k=3时,上面的公式变为:
f(x)=(x0−x1)(x0−x2)(x0−x3)(x−x1)(x−x2)(x−x3)y0+(x1−x0)(x1−x2)(x1−x3)(x−x0)(x−x2)(x−x3)y1+(x2−x0)(x2−x1)(x2−x3)(x−x0)(x−x1)(x−x3)y2+(x3−x0)(x3−x1)(x3−x2)(x−x0)(x−x1)(x−x2)y3
2、涉及的Python库
主要依赖于scipy,
from scipy.interplotate import lagrange
直接调用lagrange(x,y)这个函数即可,返回 一个对象。参数x,y分别是对应各个点的x值和y值:例如
(1,2) (3,5) (5,9)这三个点的x,y分别是: x =[1,3,5]; y =[2, 5, 9]
a = lagrange(x,y),直接输出该对象,就能看到插值的函数。
利用该对象,能得到很多特性。具体参见:docs.scipy.org/doc/numpy-1…+docs.scipy.org/doc/scipy-1…
继续上面的例子:
a.order得到阶
a[]得到系数
a()得到对应函数值
- 此外可以对其进行
加减乘除运算
3、例子
from scipy.interpolate import lagrange
x=[1,2,3,4,7]
y=[5,7,10,3,9]
a=lagrange(x,y)
print('插值函数\n',a)
print('\n==============================\n插值函数的阶数',a.order)
print('\n==============================\nx=1对应函数y值{},\nx=2对应函数y值{},\nx=3对应函数y值{}'.format(a(1),a(2),a(3)))
print('\n==============================\n常数项系数{},\n二阶项系数{},\n三阶项系数{}'.format(a[0],a[2],a[3]))
尝试同时输出多个y值
x=[1,2,3,4,7]
a(x)
