第三十五篇 拉格朗日多项式插值
插值多项式
首先考虑一个函数的推导,该函数精准地通过一系列np离散数据点。虽然有无限多的函数具备这个条件,但我们将专注于最简单的一个,一个n阶多项式,其中n = np?1。我们称这个函数为“插值多项式”
因此,如果有n + 1个点为(xi, yi)当i = 0,1,2,…, n,然后
在这篇和下篇中,将描述推导Qn(x)的两种方法;这两种方法都非常通用,适用于任何一组初始数据点,但是,如果x数据间隔相等,差分方法将具有很多优点。
拉格朗日多项式
这种方法适用于任意n + 1个数据点(xi, yi), i = 0,1,2,…,n,可以得到下面形式的插值多项式
Li(x), i = 0,1,2,…,n本身就是n次多项式,定义为“拉格朗日多项式”
由上式可知,拉格朗日多项式具有这样的性质
拉格朗日多项式的另一个性质是它们的和为单位1,因此
计算实例
使用拉格朗日去推导通过下面点的多项式,然后去计算x=4.5时候的y
有三个(np = 3)数据点,因此n = 2,需要的插值多项式将是二阶的,因此
三个拉格朗日多项式将会计算得到,
通过对应的y值“加权”到每个拉格朗日多项式,然后进行化简得到
作为检验,可以将x的三个值代入插值多项式得到
如下图所示。得到需要值得结果
可见看出,拉格朗日多项式方法中的x值不需要等距,也不需要排列成任何特定的顺序。
拉格朗日方法的一个缺点是,为了计算一个插值,必须执行大量的算术等差运算。,另一个问题涉及到拉格朗日方法的效率,如果添加新数据点集,不能从已经计算得拉格朗日多项式中换的任何方便,整个过程必须从头开始。
程序如下:
import numpy as np
npo=4;xi=4.5
x=np.array([1,3,6,5])
y=np.array([1,5,10,9])
print('使用拉格朗日多项式得插值法')
print('数据点',' x y')
for i in range(1,npo+1):print('{:13.4e}'.format(x[i-1]),end='')print('{:13.4e}'.format(x[i-1]))
yi=0
for i in range(1,npo+1):term=1.0for j in range(1,npo+1):if j!=i:term=term*(xi-x[j-1])/(x[i-1]-x[j-1])yi=yi+term*y[i-1]
print('插值点',' x y')
print('{:13.4e}'.format(xi),end='')
print('{:13.4e}'.format(yi))
终端输出结果如下