Main Content
meshgrid 格式的二维网格数据的插值
全页折叠
语法
Vq = interp2(X,Y,V,Xq,Yq)
Vq = interp2(V,Xq,Yq)
Vq = interp2(V)
Vq = interp2(V,k)
Vq = interp2(___,method)
Vq = interp2(___,method,extrapval)
说明
示例
Vq = interp2(X,Y,V,Xq,Yq)
使用线性插值返回双变量函数在特定查询点的插入值。结果始终穿过函数的原始采样。X
和 Y
包含样本点的坐标。V
包含各样本点处的对应函数值。Xq
和 Yq
包含查询点的坐标。
Vq = interp2(V,Xq,Yq)
假定一个默认的样本点网格。默认网格点覆盖矩形区域 X=1:n
和 Y=1:m
,其中 [m,n] = size(V)
。如果您希望节省内存且不在意点之间的绝对距离,则可使用此语法。
Vq = interp2(V)
将每个维度上样本值之间的间隔分割一次,形成细化网格,并基于该网格上返回插入值。
示例
Vq = interp2(V,k)
将每个维度上样本值之间的间隔反复分割 k
次,形成细化网格,并基于该网格上返回插入值。这将在样本值之间生成 2^k-1
个插值点。
示例
Vq = interp2(___,method)
指定备选插值方法:'linear'
、'nearest'
、'cubic'
、'makima'
或 'spline'
。默认方法为 'linear'
。
示例
Vq = interp2(___,method,extrapval)
还指定标量值 extrapval
,此参数会为处于样本点域范围外的所有查询点赋予该标量值。
如果您为样本点域范围外的查询省略 extrapval
参量,则基于 method
参量,interp2
返回下列值之一:
对于
'spline'
和'makima'
方法,返回外插值对于其他内插方法,返回
NaN
值
示例
全部折叠
使用默认方法基于网格进行插值
打开实时脚本
对 peaks
函数进行粗略采样。
[X,Y] = meshgrid(-3:3);V = peaks(X,Y);
绘制粗略采样。
figuresurf(X,Y,V)title('Original Sampling');
创建间距为 0.25 的查询网格。
[Xq,Yq] = meshgrid(-3:0.25:3);
对查询点插值。
Vq = interp2(X,Y,V,Xq,Yq);
绘制结果。
figuresurf(Xq,Yq,Vq);title('Linear Interpolation Using Finer Grid');
使用三次插值方法基于网格进行插值
对 peaks 函数进行粗略采样。
[X,Y] = meshgrid(-3:3);V = peaks(7);
绘制粗略采样。
figuresurf(X,Y,V)title('Original Sampling');
创建间距为 0.25 的查询网格。
[Xq,Yq] = meshgrid(-3:0.25:3);
对查询点插值,并指定三次插值。
Vq = interp2(X,Y,V,Xq,Yq,'cubic');
绘制结果。
figuresurf(Xq,Yq,Vq);title('Cubic Interpolation Over Finer Grid');
优化灰度图像
打开实时脚本
在工作区中加载一些图像数据。
load flujet.matcolormap gray
隔离图像的一个小区域并将其转换为单精度。
V = single(X(200:300,1:25));
显示该图像区域。
imagesc(V);axis offtitle('Original Image')
将每个维度上网格点之间的间隔重复分割细化五次来插入插值。
Vq = interp2(V,5);
显示结果。
imagesc(Vq);axis offtitle('Linear Interpolation')
在 X 和 Y 域范围外计算
打开实时脚本
在 [-2, 2]
的范围内从两个维度对函数进行粗略采样。
[X,Y] = meshgrid(-2:0.75:2);R = sqrt(X.^2 + Y.^2)+ eps;V = sin(R)./(R);
绘制粗略采样。
figuresurf(X,Y,V)xlim([-4 4])ylim([-4 4])title('Original Sampling')
在 X
和 Y
域范围以外延伸,创建查询网格。
[Xq,Yq] = meshgrid(-3:0.2:3);
在 X
和 Y
域内进行三次插值,并对域外的所有查询赋零值。
Vq = interp2(X,Y,V,Xq,Yq,'cubic',0);
绘制结果。
figuresurf(Xq,Yq,Vq)title('Cubic Interpolation with Vq=0 Outside Domain of X and Y');
输入参数
全部折叠
X,Y
— 样本网格点
矩阵 | 向量
样本网格点,指定为实矩阵或向量。样本网格点必须是唯一的。
如果
X
和Y
是矩阵,则包含完整网格(meshgrid 格式)的坐标。使用 meshgrid 函数同时创建X
和Y
矩阵。两个矩阵的大小必须相同。如果
X
和Y
是向量,则它们被视为网格向量。这两个向量中的值必须严格单调递增或递减。
示例: [X,Y] = meshgrid(1:30,-10:10)
数据类型: single
| double
V
— 样本值
矩阵
样本值,指定为实矩阵或复矩阵。V
的大小要求取决于 X
和 Y
的大小:
如果
X
和Y
是表示完整网格(meshgrid
格式)的矩阵,则V
的大小必须与X
和Y
相同。如果
X
和Y
是网格向量,则V
必须是一个包含length(Y)
行、length(X)
列的矩阵。
如果 V
包含复数,则 interp2
将分别对实部和虚部插值。
示例: rand(10,10)
数据类型: single
| double
复数支持: 是
Xq,Yq
— 查询点
标量 | 向量 | 矩阵 | 数组
查询点,指定为实数标量、向量、矩阵或数组。
如果
Xq
和Yq
是标量,则为单个查询点的坐标。如果
Xq
和Yq
是方向不同的向量,则Xq
和Yq
将被视作网格向量。如果
Xq
和Yq
是大小和方向均相同的向量,则Xq
和Yq
将被视作二维空间中的散点。如果
Xq
和Yq
是矩阵,则表示由多个查询点构成的一个完整网格(meshgrid
格式)或是多个散点。如果
Xq
和Yq
是 N 维数组,则表示二维空间中的散点。
示例: [Xq,Yq] = meshgrid((1:0.1:10),(-5:0.1:0))
数据类型: single
| double
k
— 细化因子
1
(默认) | 非负实整数标量
细化因子,指定为非负实整数标量。此值指定对每个维度上网格点之间的间隔重复分割优化的次数。这将在样本值之间生成 2^k-1
个插值点。
如果 k
为 0
,则 Vq
与 V
相同。
interp2(V,1)
与 interp2(V)
相同。
下面的插图展示了插入值(以红色表示)在 k=2
的九个样本值(以黑色表示)之间的位置。
示例: interp2(V,2)
数据类型: single
| double
method
— 插值方法
'linear'
(默认) | 'nearest'
| 'cubic'
| 'spline'
| 'makima'
插值方法,指定为下表中的选项之一。
方法 | 描述 | 连续性 | 注释 |
---|---|---|---|
'linear' | 查询点处的插入值基于各维中邻近网格点处数值的线性插值。这是默认插值方法。 | C0 |
|
'nearest' | 查询点处的插入值是距样本网格点最近的值。 | 不连续 |
|
'cubic' | 查询点处的插入值基于各维中邻近网格点处数值的三次插值。插值基于三次卷积。 | C1 |
|
'makima' | 修正 Akima 三次 Hermite 插值。查询点的插入值使用次数最大为 3 的分段多项式函数基于各维中邻近网格点的值进行计算而得。为防过冲,已修正 Akima 公式。 | C1 |
|
'spline' | 查询点处的插入值基于各维中邻近网格点处数值的三次插值。插值基于使用非节点终止条件的三次样条。 | C2 |
|
extrapval
— X
和 Y
域范围外的函数值
标量
X
和 Y
域范围外的函数值,指定为实数或复数标量。interp2
为 X
和 Y
域范围外的所有点返回此常量值。
示例: 5
示例: 5+1i
数据类型: single
| double
复数支持: 是
输出参量
全部折叠
Vq
— 插入的值
标量 | 向量 | 矩阵
插入的值,以实数或复数标量、向量或矩阵的形式返回。Vq
的大小和形状取决于所用的语法以及(某些情况下)输入参量的大小和值。
语法 | 特殊条件 | Vq 的大小 | 示例 |
---|---|---|---|
interp2(X,Y,V,Xq,Yq) interp2(V,Xq,Yq) 以及包含 method 或 extrapval 的这些语法的变体 | Xq 和 Yq 是标量 | 标量 | 将 Xq 和 Yq 作为标量传递时,size(Vq) = [1 1] 。 |
同上 | Xq 和 Yq 是大小和方向都相同的向量 | 大小和方向与 Xq 和 Yq 相同的向量 | 如果 size(Xq) = [100 1] 且 size(Yq) = [100 1] ,则 size(Vq) = [100 1] 。 |
同上 | Xq 和 Yq 是混合方向的向量 | 行数为 length(Yq) ,列数为 length(Xq) 的矩阵 | 如果 size(Xq) = [1 100] 且 size(Yq) = [50 1] ,则 size(Vq) = [50 100] 。 |
同上 | Xq 和 Yq 是大小相同的矩阵或数组 | 大小与 Xq 和 Yq 相同的矩阵或数组 | 如果 size(Xq) = [50 25] 且 size(Yq) = [50 25] ,则 size(Vq) = [50 25] 。 |
method 以及包含 extrapval 或 interp2(V,k) 的此语法的变体 | 无 | 行数为 列数为 | 如果 size(V) = [10 20] 且 k = 2 ,则 size(Vq) = [37 77] 。 |
详细信息
全部折叠
严格单调
一组始终递减或递增且无反转的值。例如,序列 a = [2 4 6 8]
便是一个严格单调递增的序列。序列 b = [2 4 4 6 8]
则非严格单调,因为 b(2)
与 b(3)
之间的值无变化。而序列 c = [2 4 6 8 6]
在 c(4)
与 c(5)
之间包含反转,因此连单调序列也不是。
完整网格(meshgrid 格式)
对 interp2
而言,完整网格是一对矩阵,其元素表示矩形区域内的网格点。一个矩阵包含 x 坐标,另一个矩阵包含 y 坐标。x 矩阵中的值沿行方向严格单调递增。列方向上表现为常量。y 矩阵中的值沿列方向严格单调递增。行方向上表现为常量。使用 meshgrid 函数创建可传递至 interp2
的完整网格。
例如,以下代码便为区域 –1 ≤ x ≤ 3 和 1 ≤ y ≤ 4 创建了一个完整网格:
[X,Y] = meshgrid(-1:3,(1:4))
X = -1 0 1 2 3 -1 0 1 2 3 -1 0 1 2 3 -1 0 1 2 3Y = 1 1 1 1 1 2 2 2 2 2 3 3 3 3 3 4 4 4 4 4
网格向量是一种比完整网格更紧凑的网格表示格式。两种格式之间的关系和示例值矩阵 V
是
网格向量
对 interp2
而言,网格向量由一对定义网格 x 和 y 坐标的向量组成。行向量定义 x 坐标,列向量定义 y 坐标。
例如,以下代码便创建了一个用于指定区域 –1 ≤ x ≤ 3 和 1 ≤ y ≤ 4 的网格向量:
x = -1:3;y = (1:4)';
散点
对 interp2
而言,散点由一对定义二维空间散点集合的数组组成。一个数组包含 x 坐标,另一个数组包含 y 坐标。
例如,以下代码便指定了点 (2,7)、(5,3)、(4,1) 和 (10,9):
x = [2 5; 4 10];y = [7 3; 1 9];
扩展功能
C/C++ 代码生成
使用 MATLAB® Coder™ 生成 C 代码和 C++ 代码。
用法说明和限制:
Xq
和Yq
的大小必须相同。使用meshgrid
进行网格计算。为了获得最佳结果,请以向量的形式提供
X
和Y
。这些向量的值必须严格单调递增。代码生成不支持
'makima'
插值方法。对于
'cubic'
插值方法,如果网格没有均匀间距,将会出现错误。这种情况下,请使用'spline'
插值方法。使用
'spline'
插值方法时,为了获得最佳结果,请:使用
meshgrid
创建输入Xq
和Yq
。使用小于
V
维度数的插值点数。对大量散点进行插值可能效率不高。
GPU 代码生成
使用 GPU Coder™ 为 NVIDIA® GPU 生成 CUDA® 代码。
用法说明和限制:
Xq
和Yq
的大小必须相同。使用meshgrid
进行网格计算。为了获得最佳结果,请以向量的形式提供
X
和Y
。这些向量的值必须严格单调递增。代码生成不支持
'makima'
插值方法。对于
'cubic'
插值方法,如果网格没有均匀间距,将会出现错误。这种情况下,请使用'spline'
插值方法。使用
'spline'
插值方法时,为了获得最佳结果,请:使用
meshgrid
创建输入Xq
和Yq
。使用小于
V
维度数的插值点数。对大量散点进行插值可能效率不高。
基于线程的环境
使用 MATLAB® backgroundPool
在后台运行代码或使用 Parallel Computing Toolbox™ ThreadPool
加快代码运行速度。
此函数完全支持基于线程的环境。有关详细信息,请参阅在基于线程的环境中运行 MATLAB 函数。
GPU 数组
通过使用 Parallel Computing Toolbox™ 在图形处理单元 (GPU) 上运行来加快代码执行。
用法说明和限制:
V
必须是双精度或单精度二维数组。V
可以是实数或复数。V
不能是向量。X
和Y
必须:具有相同的类型(双精度或单精度)。
是在对应维度具有递增和非重复元素的有限向量或二维数组。
当
X
和Y
是非向量二维数组时与笛卡尔坐标区对齐(就像它们是由meshgrid
生成的一样)。维度与
V
一致。
Xq
和Yq
必须是具有相同类型的向量或数组(双精度或单精度)。如果Xq
和Yq
为数组,则它们必须具有相同大小。如果它们是具有不同长度的向量,则必须具有不同的方向。method
必须是'linear'
、'nearest'
或'cubic'
。不支持超出边界输入的外插。
有关详细信息,请参阅Run MATLAB Functions on a GPU (Parallel Computing Toolbox)。
分布式数组
使用 Parallel Computing Toolbox™ 在集群的组合内存中对大型数组进行分区。
此函数完全支持分布式数组。有关详细信息,请参阅Run MATLAB Functions with Distributed Arrays (Parallel Computing Toolbox)。
版本历史记录
在 R2006a 之前推出
另请参阅
griddata | interp1 | interp3 | interpn | meshgrid | griddedInterpolant | scatteredInterpolant
MATLAB Command
You clicked a link that corresponds to this MATLAB command:
Run the command by entering it in the MATLAB Command Window. Web browsers do not support MATLAB commands.
Select a Web Site
Choose a web site to get translated content where available and see local events and offers. Based on your location, we recommend that you select: .
You can also select a web site from the following list:
Americas
- América Latina (Español)
- Canada (English)
- United States (English)
Europe
- Belgium (English)
- Denmark (English)
- Deutschland (Deutsch)
- España (Español)
- Finland (English)
- France (Français)
- Ireland (English)
- Italia (Italiano)
- Luxembourg (English)
- Netherlands (English)
- Norway (English)
- Österreich (Deutsch)
- Portugal (English)
- Sweden (English)
- Switzerland
- Deutsch
- English
- Français
- United Kingdom (English)
Contact your local office