interp2
meshgrid 格式的二维网格数据的插值
语法
说明
示例
使用默认方法基于网格进行插值
对 peaks
函数进行粗略采样。
[X,Y] = meshgrid(-3:3); V = peaks(X,Y);
绘制粗略采样。
figure
surf(X,Y,V)
title('Original Sampling');
创建间距为 0.25 的查询网格。
[Xq,Yq] = meshgrid(-3:0.25:3);
对查询点插值。
Vq = interp2(X,Y,V,Xq,Yq);
绘制结果。
figure
surf(Xq,Yq,Vq);
title('Linear Interpolation Using Finer Grid');
使用三次插值方法基于网格进行插值
对 peaks 函数进行粗略采样。
[X,Y] = meshgrid(-3:3); V = peaks(7);
绘制粗略采样。
figure
surf(X,Y,V)
title('Original Sampling');
创建间距为 0.25 的查询网格。
[Xq,Yq] = meshgrid(-3:0.25:3);
对查询点插值,并指定三次插值。
Vq = interp2(X,Y,V,Xq,Yq,'cubic');
绘制结果。
figure
surf(Xq,Yq,Vq);
title('Cubic Interpolation Over Finer Grid');
优化灰度图像
在工作区中加载一些图像数据。
load flujet.mat colormap gray
隔离图像的一个小区域并将其转换为单精度。
V = single(X(200:300,1:25));
显示该图像区域。
imagesc(V); axis off title('Original Image')
将每个维度上网格点之间的间隔重复分割细化五次来插入插值。
Vq = interp2(V,5);
显示结果。
imagesc(Vq); axis off title('Linear Interpolation')
在 X 和 Y 域范围外计算
在 [-2, 2]
的范围内从两个维度对函数进行粗略采样。
[X,Y] = meshgrid(-2:0.75:2); R = sqrt(X.^2 + Y.^2)+ eps; V = sin(R)./(R);
绘制粗略采样。
figure
surf(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);
绘制结果。
figure
surf(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] = 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 3 Y = 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 命令
您点击的链接对应于以下 MATLAB 命令:
请在 MATLAB 命令行窗口中直接输入以执行命令。Web 浏览器不支持 MATLAB 命令。
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:
How to Get Best Site Performance
Select the China site (in Chinese or English) for best site performance. Other MathWorks country sites are not optimized for visits from your location.
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
- United Kingdom (English)