interp1

1-D数据插值(查表)

描述

矢量量化= interp1(Xvxq使用线性插值返回在特定查询点的一维函数的插值值。向量X包含样本点,和v包含相应的值,vX)。向量xq包含查询点的坐标。

如果在同一点坐标上采样了多组数据,则可以通过v作为一个数组。数组的每一列v包含一组不同的1-D样本值。

矢量量化= interp1(Xvxq方法指定的替代的内插方法:“线性”“最近的”“下一个”“以前”“pchip”“立方”“v5cubic”“makima”,或样条的。默认方法是“线性”

矢量量化= interp1(Xvxq方法外推法指定评估点的战略摆在外面的域X。集外推法“extrap”当你想使用方法算法外推。或者,你可以指定一个标值,在这种情况下,interp1的域之外的所有点返回该值X

矢量量化= interp1(vxq返回内插值,并假定采样点坐标的缺省设置。默认的点号从序列1ñ,在那里ñ取决于的形状v

  • 当v是一个向量时,默认点是1:长度(v)

  • 当v是一个数组,默认点是1:尺寸(V,1)

当您不关心点之间的绝对距离时,请使用此语法。

矢量量化= interp1(vxq方法指定任何可选的插值方法并使用默认的样例点。

矢量量化= interp1(vxq方法外推法指定外推策略并使用默认示例点。

= interp1(Xv方法“页”)返回的分段多项式的形式vX) 使用方法算法。

注意

不推荐使用这种语法。用griddedInterpolant代替。

例子

全部收缩

定义取样点,X,对应的样本值,v

X = 0:PI / 4:2 * PI;V =的sin(x);

将查询点定义为范围内的更细采样X

xq = 0:π/ 16:2 *π;

在查询点插入函数并绘制结果。

图vq1 = interp1(x,v,xq);图(X,V,'O',XQ,VQ1,“:”。);xlim([0 2 *π]);标题((默认)线性插值的);

现在评价v在使用相同点样条的方法。

图vq2 = interp1(x,v,xq,样条的);图(X,V,'O',XQ,VQ2,“:”。);xlim([0 2 *π]);标题(样条插值的);

定义一组函数值。

V = [0 1.41 1.41 2 0 -1.41 -1.41 -2 0];

定义一组查询点落在预设点之间,书1:9。在本例中,默认点为书1:9因为v包含9值。

xq = 1.5:8.5;

评估vxq

vq = interp1 (v, xq);

策划的结果。

图绘制((1:9),v,'O',XQ,VQ,‘*’);传奇('V'矢量量化的);

定义一组样本点。

x = 1:10;

定义函数的值, v X = X + X 2 一世 在采样点。

v = (5 * x) + (x ^ 2 * 1);

将查询点定义为范围内的更细采样X

XQ = 1:0.25:10;

插入v在查询点。

vq = interp1 (x, v, xq);

绘制的结果以红色和蓝色的虚部的实部。

图绘制(x,真正的(v),“* r”xq,真实(vq),'-r');保持图(X,IMAG(V),'* B'xq,图像放大(vq),“- b”);

插入带有时间戳的数据点。

考虑包含所测量每四小时的温度读数的数据集。创建具有某一天的数据表,并绘制数据。

X =(日期时间(2016,1,1):小时(4):日期时间(2016,1,2))';x.Format =“嗯dd, HH: mm”;T = [31 25 24 41 43 33 31]';WeatherData =表(x T“VariableNames”,{'时间''温度'})
WeatherData =7×2表时间温度_________________⒈1月1日00:00 31日1月1日1月25日(内01,喂饲24日1月1日12点41 1月1日16:00时43 1月1日20:00 33 1月2日00:00 31
图(WeatherData.Time,WeatherData.Temperature,'O'

插入数据集以预测一天中每分钟的温度读数。由于数据是周期性的,使用样条的插值方法。

XQ =(日期时间(2016,1,1):分钟(1):日期时间(2016,1,2))';V = interp1(WeatherData.Time,WeatherData.Temperature,XQ,样条的);

绘制插值点。

保持图(XQ,V,'R'

定义取样点,X,对应的样本值,v

X = [1 2 3 4 5];V = [12 16 31 10 6];

指定查询点,xq,延伸超过的域X

XQ = [0 0.5 1.5 5.5 6];

评估vxq使用“pchip”方法。

vq1 = interp1 (x, v, xq,“pchip”
vq1 =1×519.3684 13.6316 13.2105 7.4800 12.5600

接下来,评估vxq使用“线性”方法。

vq2 = interp1 (x, v, xq,“线性”
vq2 =1×5南南14南南

现在,使用“线性”方法与“extrap”选择。

VQ3 = interp1(X,V,XQ,“线性”“extrap”
VQ3 =1×58 10 14 4 2

“pchip”默认的推断,但是“线性”没有。

定义取样点,X,对应的样本值,v

X = [-3 -2 -1 0 1 2 3];V = 3 * X ^ 2。

指定查询点,xq,延伸超过的域X

XQ = [-4 -2.5 -0.5 0.5 2.5 4];

现在评价vxq使用“pchip”方法和分配的域之外的任何值X为值,27

vq = interp1 (x, v, xq,“pchip”,27)
VQ =1×627.0000 18.6562 0.9375 0.9375 18.6562 27.0000

定义取样点。

x = (5)”;

在所定义的点的采样三个不同的抛物线函数X

V1 = X ^ 2。V2 = 2 * X ^ 2 + 2。V3 = 3 * X ^ 2 + 4。

创建矩阵v,其列是向量,v1v2,v3

v = [v1 v2 v3];

定义一组查询点,xq的范围内的更细采样X

XQ = -5:0.1:5;

计算三个函数的值xq得出结果。

vq = interp1 (x, v, xq,“pchip”);图图(X,V,'O'xq, vq);甘氨胆酸h =;h。XTick = 5;

图中的圆圈表示v和实线表示矢量量化

输入参数

全部收缩

采样点,指定为实数的行或列向量。中的数值X必须是不同的。的长度X必须符合下列要求之一:

  • 如果v是矢量,然后长度(x)必须等于长度(v)

  • 如果v是数组吗长度(x)必须等于大小(V,1)

例子:[1 2 3 4 5 6 7 8 9 10]

例子:1:10

例子:[3 7 11 15 19 23 27 31]”

数据类型:||持续时间|datetime

样本值,指定为向量、矩阵或实数或复数数组。如果v是一个矩阵或数组,那么每一列都包含一组单独的1-D值。

如果v包含复数,则interp1插值单独的实部和虚部。

例子:兰特(1,10)

例子:兰特(10,1)

例子:兰特(10,3)

数据类型:||持续时间|datetime
复数支持:金宝app是的

查询点,指定为一个标量,矢量,矩阵,或实数的阵列。

例子:

例子:1:0.05:10

例子:(1:0.05:10)'

例子:[0 1 2 7.5 10]

数据类型:||持续时间|datetime

插值方法,规定为在该表中的选项之一。

方法

描述

连续性

评论

“线性”

线性插值。查询点上的插值值是基于各维相邻网格点上的值的线性插值。这是默认的插值方法。

C0

  • 要求至少2分

  • 比最近邻需要更多的内存和计算时间

“最近的”

最近邻插值。查询点上的内插值为最近的样本网格点上的值。

不连续

  • 要求至少2分

  • 适度的内存需求

  • 最快的计算时间

“下一个”

接下来邻插值。在查询点的插补值是在下一采样网格点的值。

不连续

  • 要求至少2分

  • 相同的内存需求和计算时间“最近的”

“以前”

以前的邻居插值。查询点上的内插值是上一个样本网格点上的值。

不连续

  • 要求至少2分

  • 相同的内存需求和计算时间“最近的”

“pchip”

保形分段三次插值。查询点上的插值值是基于相邻网格点上的值的保形分段三次插值。

C1

  • 需要至少4个点

  • 需要更多的内存和计算时间比“线性”

“立方”

注意

的行为“立方”interp1 (…)将在未来的版本中更改。在未来的版本中,这个方法将执行立方卷积。

和...一样“pchip”

C1

这种方法目前返回的结果相同“pchip”

“v5cubic”

在MATLAB使用三次卷积®5.

C1

点必须是均匀间隔的。“立方”将取代“v5cubic”在未来的版本中

“makima”

改性阿克玛三次Hermite内插。在查询点的插补值最多三个是基于与多项式的分段函数。所述阿克玛式进行修饰以避免过冲。

C1

  • 要求至少2分

  • 产生的波动比样条的,但不会像以前那样咄咄逼人“pchip”

  • 计算比更贵“pchip”的,但典型地小于样条的

  • 内存要求类似于那些样条的

样条的

使用非结端点条件的样条插值。查询点上的插值值是基于每个相应维度上相邻网格点上的值的三次插值。

C2

  • 需要至少4个点

  • 需要更多的内存和计算时间比“pchip”

外推策略,具体为“extrap”还是真正的标量值。

  • 指定“extrap”当你想要interp1估算使用它使用插值同样的方法外域点。

  • 在需要时指定标量值interp1返回域之外的点上的特定恒定值。

默认行为取决于输入参数:

  • 如果您指定“pchip”样条的,或“makima”插值方法,那么默认行为是“extrap”

  • 所有其他插值方法返回为NaN默认情况下用于域外的查询点。

例子:“extrap”

例子:

数据类型:字符|字符串||

输出参数

全部收缩

内插的值,返回为标量,矢量,矩阵或阵列。的大小矢量量化取决于的形状vxq

v的形状 XQ的形状 矢量的大小
向量 向量 大小(XQ) 如果大小(V)= [1 100]
大小(xq) = [1 500]
然后size(vq) = [1 500]
向量 矩阵
或一天数组
大小(XQ) 如果大小(V)= [1 100]
大小(XQ)= [50 30]
然后size(vq) = [50 30]
矩阵
或一天数组
向量 [长度(xq)大小(v, 2),…,大小(v, n)) 如果size(v) = [100 3]
大小(xq) = [1 500]
然后size(vq) = [500 3]
矩阵
或一天数组
矩阵
或一天数组
[大小(XQ,1),...,尺寸(XQ,正),...的大小(V,2),...,大小(V,M)] 如果size(v) = [4 5 6]
大小(XQ)= [2 3 7]
然后size(vq) = [2 3 7 5 6]

分段多项式,作为结构返回,你可以传递给ppval功能进行评估。

更多关于

全部收缩

Akima和样条插值

Akima算法对于一维插值,在[1][2],执行三次插值以产生具有连续一阶导数(C1)的分段多项式。该算法保留了坡度,避免了平坦区域的波动。当有三个或更多的连续共线点时,即出现平坦区域,该算法将这些点与一条直线连接。为了确保两个数据点之间的区域是平面的,可以在这两个点之间插入一个额外的数据点。

当两个坡度不同的平坦区域相遇时,对原始Akima算法的修改给予坡度接近于零的一侧更多的权值。这一修改优先于接近水平的一侧,这更直观,并避免了超调。(原始的Akima算法给两边的点相同的权重,从而将波动平均划分。)

样条算法,另一方面,执行三次插值产生具有连续二阶导数的分段多项式(C2)。其结果可与常规多项式插值相比较,但对高度数的数据点之间的剧烈振荡不那么敏感。尽管如此,这种方法仍然容易受到数据点之间的过冲和振荡的影响。

与样条算法相比,Akima算法产生的波动更少,更适合处理平面区域之间的快速变化。下面使用连接多个平面区域的测试数据说明了这种差异。

参考

[1]Akima,藤原浩。一种基于局部程序的插值和光滑曲线拟合的新方法。ACM杂志, 1970年17月4日,第589-602页。

[2]阿克玛,宏。“二元插值和表面光滑的方法拟合基于本地程序”。ACM的通信,17.1,1974年,第18-20页。

扩展功能

之前介绍过的R2006a