Main Content

本页的翻译已过时。点击此处可查看最新英文版本。

interp2

meshgrid 格式的二维网格数据的插值

说明

示例

Vq = interp2(X,Y,V,Xq,Yq) 使用线性插值返回双变量函数在特定查询点的插入值。结果始终穿过函数的原始采样。XY 包含样本点的坐标。V 包含各样本点处的对应函数值。XqYq 包含查询点的坐标。

Vq = interp2(V,Xq,Yq) 假定一个默认的样本点网格。默认网格点覆盖矩形区域 X=1:nY=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);

绘制粗略采样。

figure
surf(X,Y,V)
title('Original Sampling');

Figure contains an axes. The axes with title Original Sampling contains an object of type surface.

创建间距为 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');

Figure contains an axes. The axes with title Linear Interpolation Using Finer Grid contains an object of type surface.

对 peaks 函数进行粗略采样。

[X,Y] = meshgrid(-3:3);
V = peaks(7);

绘制粗略采样。

figure
surf(X,Y,V)
title('Original Sampling');

Figure contains an axes. The axes with title Original Sampling contains an object of type surface.

创建间距为 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');

Figure contains an axes. The axes with title Cubic Interpolation Over Finer Grid contains an object of type surface.

在工作区中加载一些图像数据。

load flujet.mat
colormap gray

隔离图像的一个小区域并将其转换为单精度。

V = single(X(200:300,1:25));

显示该图像区域。

imagesc(V);
axis off
title('Original Image')

Figure contains an axes. The axes with title Original Image contains an object of type image.

将每个维度上网格点之间的间隔重复分割细化五次来插入插值。

Vq = interp2(V,5);

显示结果。

imagesc(Vq);
axis off
title('Linear Interpolation')

Figure contains an axes. The axes with title Linear Interpolation contains an object of type image.

[-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')

Figure contains an axes. The axes with title Original Sampling contains an object of type surface.

XY 域范围以外延伸,创建查询网格。

[Xq,Yq] = meshgrid(-3:0.2:3);

XY 域内进行三次插值,并对域外的所有查询赋零值。

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');

Figure contains an axes. The axes with title Cubic Interpolation with Vq=0 Outside Domain of X and Y contains an object of type surface.

输入参数

全部折叠

样本网格点,指定为实矩阵或向量。样本网格点必须是唯一的。

示例: [X,Y] = meshgrid(1:30,-10:10)

数据类型: single | double

样本值,指定为实矩阵或复矩阵。V 的大小要求取决于 XY 的大小:

  • 如果 XY 是表示完整网格(meshgrid 格式)的矩阵,则 V 的大小必须与 XY 相同。

  • 如果 XY 是网格向量,则 V 必须是一个包含 length(Y) 行、length(X) 列的矩阵。

如果 V 包含复数,则 interp2 将分别对实部和虚部插值。

示例: rand(10,10)

数据类型: single | double
复数支持:

查询点,指定为实数标量、向量、矩阵或数组。

  • 如果 XqYq 是标量,则为单个查询点的坐标。

  • 如果 XqYq 是方向不同的向量,则 XqYq 将被视作网格向量。

  • 如果 XqYq 是大小和方向均相同的向量,则 XqYq 将被视作二维空间中的散点

  • 如果 XqYq 是矩阵,则表示由多个查询点构成的一个完整网格(meshgrid 格式)或是多个散点。

  • 如果 XqYq 是 N 维数组,则表示二维空间中的散点。

示例: [Xq,Yq] = meshgrid((1:0.1:10),(-5:0.1:0))

数据类型: single | double

细化因子,指定为非负实整数标量。此值指定对每个维度上网格点之间的间隔重复分割优化的次数。这将在样本值之间生成 2^k-1 个插值点。

如果 k0,则 VqV 相同。

interp2(V,1)interp2(V) 相同。

下面的插图展示了插入值(以红色表示)在 k=2 的九个样本值(以黑色表示)之间的插入位置。

示例: interp2(V,2)

数据类型: single | double

插值方法,指定为下表中的选项之一。

方法说明连续性注释
'linear'对查询点插值基于各维中邻点网格点处数值的线性插值。这是默认插值方法。C0
  • 每个维度需要至少两个网格点

  • 'nearest' 需要更多内存

'nearest'在查询点插入的值是距样本网格点最近的值。 不连续
  • 每个维度需要两个网格点。

  • 内存要求最低,计算速度最快

'cubic'对查询点的插值基于各维中邻点网格点处数值的三次插值。插值基于三次卷积。C1
  • 每个维度中的网格必须有均匀间距,但并非所有维度的网格间距都必须相同

  • 每个维度需要至少四个点

  • 'linear' 需要更多内存和计算时间

'makima'修正 Akima 三次 Hermite 插值。对查询点的插值基于次数最大为 3 的多项式的分段函数,使用各维中相邻网格点的值进行计算。为防过冲,已修正 Akima 公式。C1
  • 每一维需要至少 2 个点。

  • 产生的波动比 'spline'

  • 计算时间通常少于 'spline',但内存要求类似

'spline'对查询点的插值基于各维中邻点网格点处数值的三次插值。插值基于使用非结终止条件的三次样条。C2
  • 每个维度需要四个点

  • 'cubic' 需要更多内存和计算时间

XY 域范围外的函数值,指定为实数或复数标量。interp2XY 域范围外的所有点返回此常量值。

示例: 5

示例: 5+1i

数据类型: single | double
复数支持:

输出参数

全部折叠

插入的值,以实数或复数标量、向量或矩阵的形式返回。Vq 的大小和形状取决于所用的语法以及(某些情况下)输入参数的大小和值。

语法特殊条件Vq 的大小示例
interp2(X,Y,V,Xq,Yq)
interp2(V,Xq,Yq)
以及包含 methodextrapval 的这些语法的变体
XqYq 是标量标量XqYq 作为标量传递时,size(Vq) = [1 1]
同上XqYq 是大小和方向都相同的向量大小和方向与 XqYq 相同的向量如果 size(Xq) = [100 1]
size(Yq) = [100 1]
size(Vq) = [100 1]
同上XqYq 是混合方向的向量行数为 length(Yq),列数为 length(Xq) 的矩阵如果 size(Xq) = [1 100]
size(Yq) = [50 1]
size(Vq) = [50 100]
同上XqYq 是大小相同的矩阵或数组大小与 XqYq 相同的矩阵或数组如果 size(Xq) = [50 25]
size(Yq) = [50 25]
size(Vq) = [50 25]
method 以及包含 extrapvalinterp2(V,k)
的此语法的变体

行数为
2^k * (size(V,1)-1)+1

列数为
2^k * (size(V,2)-1)+1 的矩阵

如果 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];

扩展功能

在 R2006a 之前推出