一维数据插值 (interp1)
vq = interp1(x, v, xq, 'linear') ;
线性插值是一种曲线拟合方法,它使用线性多项式在一组离散的已知数据点的范围内构造新的数据点。
如果两个已知点 (x0, y0)和(x1, y1),线性插值是这些点之间的直线。对于区间x = (x0, x1)中的值,沿直线的y值由斜率方程给出:
(y-y0)/(x-x0) = (y1-y0)/(x1-x0);
可以从几何上推导出来,如下图所示。它是一种特殊的情况,多项式内插法与Ñ = 1:
为求解y这个方程,即x处的未知值,给出:
y = y0 + (x-x0)*(y1-y0)/(x1-x0) = [y0(x1-x) + y1(x-x0)]/(x1-x0)
这是区间x = (x0, x1)内线性插值的公式。在此区间之外,公式与线性外推相同。
这个公式也可以理解为加权平均。权重与端点到未知点的距离成反比;较近的点比较远的点影响更大。因此,权重为 1 - (x-x0)/(x1-x0)
和 1 - (x1-x)/(x1-x0)
,这是未知点和每个端点之间的归一化距离。因为这些总和为 1:
y = y0*[1 - (x-x0)/(x1-x0)] + y1*[1 - (x1-x)/(x1-x0)] = y0*[1 - (x-x0)/(x1-x0)] + y1*[(x-x0)/(x1-x0)]
产生了上面给出的线性插值公式。
在此几何可视化中,绿色圆圈处的值乘以红色和蓝色圆圈之间的水平距离,等于红色圆圈处的值乘以绿色和蓝色圆圈之间的水平距离,以及蓝色圆圈处的值乘以绿色和红色圆圈之间的水平距离之和。
- Matlab
vq = interp1(x, v, xq, method)
method 默认方法为 ‘linear’。
method 可以指定备选插值方法:‘linear’、‘nearest’、‘next’、‘previous’、‘pchip’、‘cubic’、‘v5cubic’、‘makima’ 或 ‘spline’。
vq = interp1(x, v, xq, method, extrapolation)
用于指定外插策略,来计算落在 x 域范围外的点。如果希望使用 method 算法进行外插,可将 extrapolation 设置为 ‘extrap’。也可以指定一个标量值,这种情况下,interp1 将为所有落在 x 域范围外的点返回该标量值。