拉格朗日插值数学原理:
根据数学知识,对于平面上已知的n个点(无两点在一条直线上)可以找到一个 n-1 次多项式:
为了进行根据新的x, 求出对应的 y值,需要求出上式中的系数 a0,a1,a2....an−1
因为n个点
(x1,y1),(x2,y2)...(xn,yn)
在以上多项式上,代入每个点,得
以上方程组中,n个方程,n个未知数
a0,a1...an−1
,所以方程可解,可以利用线性代数中的行列式求解。
解出的拉格朗日插值多项式为:
实例:
假设一个2次多项行式
f
, 按照前面的介绍,取三个点为
l0(3)=(x−6)(x−9)(3−6)(3−9)
l1(6)=(x−3)(x−9)(6−3)(6−9)
l2(9)=(x−3)(x−6)(9−3)(9−6)
L(x)=f(3)l0(3)+f(6)l1(6)+f(9)l2(9)
=10(x−6)(x−9)(3−6)(3−9)+8(x−3)(x−9)(6−3)(6−9)+4(x−3)(x−6)(9−3)(9−6)
=−x2+3x+909
插值 f(10)=209
python 实现
from scipy.interpolate import lagrange
x = [3, 6, 9]
y = [10, 8, 4]
lagrange(x,y)
#poly1d([ -0.11111111, 0.33333333, 10. ])
以上
lagrange(x,y)
的输出值
poly1d([−0.11111111,0.33333333,10.])
值的是多项式的三个系数
即:
a0=−0.11111,a1=0.3333333,a2=10.
如果要进行插值操作,可以:
lagrange(x, y)(10)
# 2.222222