interp1( )是最常用的插值函数。
一、基本表达式
vq = interp1(x,v,xq)
vq = interp1(x,v,xq,method)
vq = interp1(x,v,xq,method,extrapolation)
(注:上面显示的是最基本最常用的基本表达式,更多可见MATLAB官方文档。)
其中,x和v是已知样本点,作为插值的基础矩阵,两者必须一一对应;xq是要查询的点,通过插x和v组成的一维表格来得到vq;method为插值方法;extrapolation为外插设置。
二、Method
插值方法 | 说明 | 连续性 | 备注 |
'linear' | 线性插值。查询点处的插值基于每个相应维度中相邻网格点处的值的线性插值。这是默认的插值方法。 | C0 | *至少两个点; *比'nearest'需要更多的内存和计算时间 |
'nearest' | 最近邻插值。查询点处的插值是最近的采样网格点处的值。 | Discontinuous | *至少两个点; *中等内存要求; *最快的计算时间 |
'next' | 下一个邻居插值。查询点处的插值是下一个采样网格点处的值。 | Discontinuous | 同'nearest' |
'previous' | 上一个邻居插值。查询点处的插值是上一个采样栅格点处的值。 | Discontinuous | 同'nearest' |
'pchip' | 保形分段三次插值。查询点处的插值基于相邻网格点处值的保形分段三次插值。 | C1 | *至少4个点; *内存和计算时间与'linear'相同 |
'cubic' | 同'pchip' | C1 | 同'pchip' |
'v5cubic' | MATLAB®5中使用的三次卷积。 | C1 | 点的间距必须均匀。”cubic将在未来版本中取代v5cubic |
'makima' | 改进的Akima三次Hermite插值。查询点处的插值基于次数最多为3的多项式的分段函数。修改了Akima公式以避免过冲。 | C1 | *至少两个点; *产生的波动小于'spline'大于'pchip' |
'spline' | 使用not-a-knot结束条件的样条曲线插值。查询点处的插值基于每个相应维度中相邻网格点处的值的三次插值。 | C2 | *至少4个点; *要求比'pchip'更多的内存空间和计算时间 |
三、内插和外插
内插:插值点位于(x,v)的内部;
外插:插值点落于(x,v)的外部。
外插注意第一点:
-
If you specify the
'pchip'
,'spline'
, or'makima'
interpolation methods, then the default behavior is'extrap'
. -
All other interpolation methods return
NaN
by default for query points outside the domain.
外插注意第二点:
- 如果希望interp1使用插值时使用的相同方法计算域外的点,在“extrapolation”处输入“extrap”。
- 如果希望interp1为域外的点返回特定的常量值,需要给定此标量值。
附:
1、interp1( ) 在x和xq相同但v不同的情况下,可以一次性对多个一维表格进行插值,详情可见MATLAB官方文档。
2、要避免错的离谱的x或者v,如果错的离谱,那样子对插值会造成影响,还是要保证插值的基础点是正确滴。