interp1
一维数据插值(查表)
语法
描述
例子
粗采样正弦函数的插值
定义样本点,x
,和对应的样本值,v
.
X = 0:pi/4:2*pi;V = sin(x);
将查询点定义为范围内的更细抽样x
.
Xq = 0:pi/16:2*pi;
在查询点插入函数并绘制结果。
图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 2 1.41 0 -1.41 -2 -1.41 0];
定义一组位于默认点之间的查询点,1:9
.在本例中,默认点为1:9
因为v
包含9
值。
Xq = 1.5:8.5;
评估v
在xq
.
Vq = interp1(v,xq);
画出结果。
图绘制((1:9),v,“o”xq矢量量化,‘*’);传奇(“v”,矢量量化的);
复值插值
定义一组样本点。
X = 1:10;
定义函数的值, ,在样本点上。
V = (5*x)+(x.^2*1i);
将查询点定义为范围内的更细抽样x
.
Xq = 1:0.25:10;
插入v
在查询点。
Vq = interp1(x,v,xq);
用红色表示结果的实部,用蓝色表示虚部。
图绘制(x,真正的(v),“* r”xq,真实(vq),“- r”);持有在情节(x,图像放大(v),‘* b”xq,图像放大(vq),“- b”);
日期和时间插值
插值时间戳数据点。
考虑一个包含每四小时测量一次的温度读数的数据集。用一天的数据创建一个表并绘制数据图。
x = (datetime(2016、1、1):小时(4):datetime(2016年1、2)';x.Format =“MMM dd, HH:mm”;T = [31 25 24 41 43 33 31]';天气数据=表(x,T,“VariableNames”, {“时间”,“温度”})
WeatherData =7×2表时间温度_____________ ___________ 1月1日,1月31日00:00,1月25日04:00,1月24日08:00,1月01日12:00,1月41日16:00 43日,1月02日20:00 33日,00:00 31
情节(WeatherData。时间,WeatherData。温度,“o”)
插值数据集来预测一天中每分钟的温度读数。由于数据是周期性的,所以使用样条的
插值方法。
Xq = (datetime(2016,1,1):minutes(1):datetime(2016,1,2))';V = interp1(天气数据。时间,WeatherData。温度,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];
评估v
在xq
使用“pchip”
方法。
Vq1 = interp1(x,v,xq,“pchip”)
vq1 =1×519.3684 13.6316 13.2105 7.4800 12.5600
接下来,评估v
在xq
使用“线性”
方法。
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域之外的所有查询指定常量值
定义样本点,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];
现在评估v
在xq
使用“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:5)';
在定义的点处选取三个不同的抛物线函数x
.
V1 = x.^2;V2 = 2*x。^2 + 2;V3 = 3*x。^2 + 4;
创建矩阵v
,它的列是向量,v1
,v2
,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 = gca;h.XTick = -5:5;
图中的圆圈表示v
,实线表示矢量量化
.
输入参数
x
- - - - - -采样点
向量
抽样点,指定为实数的行向量或列向量。中的值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
- - - - - -样本值
向量|矩阵|数组
样例值,指定为向量、矩阵或实数或复数数组。如果v
是一个矩阵或数组,那么每一列包含一组单独的一维值。
如果v
那么,它包含复数interp1
分别插值实部和虚部。
例子:兰德(10)
例子:兰特(10,1)
例子:兰特(10,3)
数据类型:单
|双
|持续时间
|datetime
复数支持:金宝app是的
xq
- - - - - -查询点
标量|向量|矩阵|数组
查询点,指定为标量、向量、矩阵或实数数组。
例子:5
例子:1:0.05:10
例子:(1:0.05:10) '
例子:[0 1 2 7.5 10]
数据类型:单
|双
|持续时间
|datetime
方法
- - - - - -插值法
“线性”
(默认)|“最近的”
|“下一个”
|“以前”
|“pchip”
|“立方”
|“v5cubic”
|“makima”
|样条的
插值方法,指定为本表中的选项之一。
方法 |
描述 |
连续性 |
评论 |
---|---|---|---|
|
线性插值。查询点上的插值值基于每个维度上相邻网格点上的值的线性插值。这是默认的插值方法。 |
C0 |
|
|
最近邻插值。查询点上的插值值是最近的样本网格点上的值。 |
不连续 |
|
|
下一个邻居插值。查询点的内插值是下一个样本网格点的值。 |
不连续 |
|
|
以前的邻居插值。查询点上的插值值是前一个样例网格点上的值。 |
不连续 |
|
|
保形分段三次插值。查询点上的插值值基于相邻网格点上的值保持形状的分段三次插值。 |
C1 |
|
|
三次卷积在MATLAB中的应用®5. |
C1 |
|
|
一样 |
C1 |
|
|
改进的Akima立方Hermite插值。在查询点上的插值值基于阶最多为3的多项式分段函数。Akima公式被修改以避免超调。 |
C1 |
|
|
样条插值使用非结结束条件。查询点上的插值值基于每个维度中相邻网格点上的值的三次插值。 |
C2 |
|
外推法
- - - - - -外推的策略
“extrap”
|标量值
外推策略,指定为“extrap”
或者一个实标量。
指定
“extrap”
当你想要interp1
用它用于插值的相同方法来计算域外的点。需要时指定标量值
interp1
为域外的点返回特定的常数值。
默认行为取决于输入参数:
如果您指定
“pchip”
,样条的
,或“makima”
插值方法,则默认行为为“extrap”
.所有其他插值方法返回
南
默认情况下,用于域外的查询点。
例子:“extrap”
例子:5
数据类型:字符
|字符串
|单
|双
输出参数
矢量量化
-插值值
标量|向量|矩阵|数组
内插值,返回为标量、向量、矩阵或数组。的大小矢量量化
取决于形状v
而且xq
.
v形 | xq的形状 | Vq大小 | 例子 |
---|---|---|---|
向量 | 向量 | 大小(xq) |
如果尺寸(v) = [1 100] 而且 Size (xq) = [1 500] ,然后 Size (vq) = [1 500] . |
向量 | 矩阵 或N-D数组 |
大小(xq) |
如果尺寸(v) = [1 100] 而且 Size (xq) = [5030] ,然后 Size (vq) = [50 30] . |
矩阵 或N-D数组 |
向量 | [长度(xq)大小(v, 2),…,大小(v, n)) |
如果尺寸(v) = [100 3] 而且 Size (xq) = [1 500] ,然后 Size (vq) = [500 3] . |
矩阵 或N-D数组 |
矩阵 或N-D数组 |
(尺寸(xq, 1),…,大小(xq, n),…大小(v, 2),…,大小(v, m)] |
如果尺寸(v) = [4 5 6] 而且 Size (xq) = [2 3 7] ,然后 Size (vq) = [2 3 7 5 6] . |
页
-分段多项式
结构
分段多项式,作为结构返回,你可以传递给ppval
用于求值的函数。
更多关于
Akima和样条插值
的Akima算法对于一维插值,在[1]而且[2],执行三次插值生成连续一阶导数分段多项式(C1)。该算法保留了坡度,避免了平坦区域的波动。当有三个或更多的连续共线点时,就会出现平坦区域,算法将它们与一条直线连接起来。为了确保两个数据点之间的区域是平坦的,在这两个数据点之间插入一个额外的数据点。
当两个具有不同斜率的平坦区域相遇时,对原始Akima算法的修改使斜率更接近于零的一侧得到更多的权重。这种修改优先考虑更接近水平的一侧,更直观,避免了超调。(原来的Akima算法给两边的点赋予了相等的权重,从而均匀地划分波动。)
的样条算法,另一方面,执行三次插值,以产生连续二阶导数的分段多项式(C2)。该结果与正则多项式插值相当,但不太容易受到高程度数据点之间剧烈振荡的影响。不过,这种方法可能容易受到数据点之间的超调和振荡的影响。
与样条算法相比,Akima算法产生的波动更少,更适合处理平坦区域之间的快速变化。下面使用连接多个平面区域的测试数据说明了这种差异。
参考文献
[1]秋岛,浩。“一种基于局部程序的插值平滑曲线拟合新方法。”美国ACM杂志(JACM)《中国科学》,1970年第17期,第589-602页。
[2]秋岛,浩。一种基于局部程序的二元插值和光滑曲面拟合方法。ACM通信, 17.1, 1974,第18-20页。
扩展功能
C/ c++代码生成
使用MATLAB®Coder™生成C和c++代码。
使用注意事项和限制:
输入参数
x
(样本点)必须严格增加或严格减少。索引不会被重新排序。如果输入参数
v
(样本值)是一个变长向量(1 × -):
或:
-by-1),然后输出形状矢量量化
在MATLAB中匹配形状。如果输入参数
v
是可变大小的,不是可变长度的向量,并且在运行时变成行向量,则会发生错误。如果样例值或查询点包含
正
或负
时,生成代码的输出可能与MATLAB中的输出不匹配。如果输入参数
xq
(查询点)是可变大小的,不是可变长度的向量,并且在运行时变成行或列向量,则会发生错误。看到工具箱函数代码生成的可变大小限制(MATLAB编码器).
GPU代码生成
使用GPU Coder™为NVIDIA®GPU生成CUDA®代码。
使用注意事项和限制:
输入参数
x
(样本点)必须严格增加或严格减少。索引不会被重新排序。如果输入参数
v
(样本值)是一个变长向量(1 × -):
或:
-by-1),然后输出形状矢量量化
在MATLAB中匹配形状。如果输入参数
v
是可变大小的,不是可变长度的向量,并且在运行时变成行向量,则会发生错误。如果输入参数
xq
(查询点)是可变大小的,不是可变长度的向量,并且在运行时变成行或列向量,则会发生错误。看到工具箱函数代码生成的可变大小限制(MATLAB编码器).
线程环境
使用MATLAB®在后台运行代码backgroundPool
或使用并行计算工具箱™加速代码ThreadPool
.
这个函数完全支持基于线程的环境。金宝app有关更多信息,请参见在线程环境中运行MATLAB函数.
GPU数组
通过使用并行计算工具箱™在图形处理单元(GPU)上运行来加速代码。
分布式阵列
使用并行计算工具箱™跨集群的组合内存对大型数组进行分区。
该函数完全支持分布式数组。金宝app有关更多信息,请参见运行MATLAB函数与分布式阵列(并行计算工具箱).
版本历史
R2006a之前介绍R2020b:“立方”
的方法interp1
执行三次卷积
在R2020b中,“立方”
插值方法interp1
进行三次卷积。的“v5cubic”
而且“立方”
插值方法现在执行相同类型的插值,这与的行为是一致的interp2
,interp3
,interpn
.三次卷积插值方法是针对等间距数据的插值方法样条的
不规则间隔数据的插值。
在以前的版本中,“立方”
就像“pchip”
,只有“v5cubic”
进行三次卷积。
MATLAB命令
你点击了一个对应于这个MATLAB命令的链接:
在MATLAB命令窗口中输入该命令来运行该命令。Web浏览器不支持MATLAB命令。金宝app
您也可以从以下列表中选择一个网站:
如何获得最佳的网站性能
选择中国站点(中文或英文)以获得最佳站点性能。其他MathWorks国家站点没有针对您所在位置的访问进行优化。