与拟合不同的是,它要求曲线通过所有的已知数据。
python中:scipy的interpolate模块提供了许多插值运算的函数
1、B样条曲线插值:
一维数据的插值运算通过interp1d()完成:
interp1d(x,y,kind = 'linear', ... )
参数x和y是一系列已知的数据点,kind是插值类型,有以下候选值:
- 'zero'、'nearest':阶梯插值,相当于0阶B样条曲线。
- 'slinear'、'linear':线性插值,用一条直线连接所有的取样点,相当于1阶B样条曲线,其中'slinear'使用扩展库中的相关函数进行计算,'linear'使用python编写的函数进行运算,它们的结果一样。
- 'quadratic'、'cubic':2阶和3阶B样条曲线,更高阶的曲线可以直接使用整数值指定。
- interp1d 对象可以计算x的取值范围之内任意点的函数值。它可以像函数一样直接调用,像numpy的ufunc函数一样能对数组中的每个元素进行计算,并返回一个新的数组。
本例中:
决定插值曲线的数据点一共有11个,插值之后的曲线数据点有101个。
问题:
该类要求其参数x是一个递增序列,只能在x的取值范围之内进行内插计算。
2、外推和Spline拟合:
UnivariateSpline类的插值运算比inter1d更高,它支持外推运算:
UnivariateSpline(x,y, w= None, bbox = [None,None], k = 3, s= None)
- x,y是保存数据点的x-y坐标的数组,其中x必须是递增序列。
- w是为每个数据点指定的权重值。
- k为样条曲线的阶数
- s是平滑参数,它使得最终生成的样条曲线满足条件,即当s>0时,样条曲线并不一定通过各个数据点。为了让曲线通过所有数据点,必须将s参数设置为0.
3、二维插值:
使用inter2d()可以进行二维插值运算:
interp2d(x,y,z,kind = 'linear',...)