概念
总之就是找到一条函数,经过题目中给出的所有点,然后通过这条函数预测未知点。
一维插值法
多项式插值
拉格朗日插值法
存在的问题 龙格现象
高次插值函数会在两端产生极大的波动。在数值求解微分方程时,当步长选择过大时会出现误差逐渐增大而不是减小的现象。这种现象导致了数值计算结果的不稳定性,使得我们不能够简单地通过缩小步长来提高求解精度。
2. 牛顿插值法
Newton 插值的优点是:每增加一个节点,插值多项式只增加一项,因而便于递推运算,而且Newton插值的计算量小于Lagrange插值。
分段插值
两点之前构成一条线,然后插值。
分段线性插值因为只用相邻的两个点,可能不精确,所以可以采用分段二次插值。
数学建模常用插值法
分段三次埃尔米特插值法
埃尔米特插值多项式:插值多项式要求在插值节点上函数值相等,有的实际问题还要求在节点上的导数值相等,甚至高阶导数值也相等,满足这种要求的插值多项式成为埃尔米特插值多项式。
该方法对给定数据进行分段处理,并且三次多项式被用来逼近每个段内的函数。
代码实例
from scipy.interpolate import PchipInterpolator as PCHIP
import matplotlib as mpl
import numpy as np
import matplotlib.pyplot as plt
mpl.use ('TkAgg')
#PCHIP stands for Piecewise Cubic Hermite Interpolating Polynomial
# x必须同等间隔
x = np.arange(0,1000,step=10)
# 随机漫步曲线
y = np.random.randn(100).cumsum()
pchip = PCHIP(x,y)
x_new = [324,424,999]
y_new = pchip(x_new)
print(y_new)
#同时执行两个plot,才能将两个图绘制到一个图上
plt.plot(x_new, y_new, 'ro')#插值点为红色圆点
plt.plot(x, y, 'b-')#原始点为蓝色线条
plt.show()
三次样条插值
代码示例
from scipy import interpolate
import matplotlib as mpl
import numpy as np
import matplotlib.pyplot as plt
mpl.use ('TkAgg')
#PCHIP stands for Piecewise Cubic Hermite Interpolating Polynomial
# x必须同等间隔
x = np.arange(0,1000,step=10)
# 随机漫步曲线
y = np.random.randn(100).cumsum()
tck = interpolate.splrep(x,y)
x_new = [324,424,999]
y_new2 = interpolate.splev(x_new,tck)
print(y_new2)
#同时执行两个plot,才能将两个图绘制到一个图上
plt.plot(x_new, y_new2, 'ro')#插值点为红色圆点
plt.plot(x, y, 'b-')#原始点为蓝色线条
plt.show()