MATLAB 中的二维数组插值
在本文中,我们将借助linspace()和interp2() 两个函数在 MATLAB 中讨论“二维数组插值”。
使用的功能
空格( )
linspace()函数用于生成线性间隔的向量。
Syntax:
linspace(a, b)
linspace(a, b, n)
这里,
linspace(a, b)用于返回“a”和“b”之间的 100 个均匀间隔点的行向量。
linspace(a, b, n)用于返回“n”个点的行向量,点之间的间距为(x2-x1)/(n-1)。
参数:该函数接受三个参数,如下图所示:
- a:这是指定的第一个值。
- b:这是指定的第二个值。
- n:这是生成的行向量中包含的指定点数。
返回值:它返回生成的“n”个点的行向量,这些点在“a”和“b”之间线性间隔并包括“a”和“b”。
例子:
Matlab
% MATLAB code for Calling the linspace()
% to generate a row vector of
% 100 evenly spaced points in
% between 0 to 10
linspace(0, 10)
Matlab
% MATLAB code for interp2()
% Specifying a 2-D grid
[X,Y] = meshgrid(-4:4);
% Sampling the peaks() function
V = peaks(X,Y);
[Xq,Yq] = meshgrid(-4:0.25:4);
% Calling the interp2() function
title('Linear Interpolation Using Finer Grid');
Vq = interp2(X,Y,V,Xq,Yq);
Matlab
% MATLAB code for linespace() to generate
% row vectors of 4 points
% Initializing a 2d array of dimensions 3*3
A=[1 2 3
4 5 6
7 8 9];
% Calling the linspace() function to
% generate the row vectors of 4 points
% in between and including 1 to 2
x = linspace(1, 2, 4);
% Calling the interp2() function for
% interpolation of above specified 2d array
result = interp2(A, x(:), x)
Matlab
% MATLAB code for linespace() and interp2()
% Initializing a 2d array of dimensions 4*4
A=[0.69 1.76 0.089 2.0012;
5.89 1.25 0.47 0.55;
1.06 1.25 1.134 4.163;
2 1.7 0 2.4];
% Calling the linspace() function to
% generate the row vectors of 7 points
% in between and including 1 to 3
x = linspace(1, 3, 7);
% Calling the interp2() function for
% interpolation of above specified 2d array
result = interp2(A, x(:), x)
输出:
interp2( )
interp2()函数用于以网格格式对二维网格数据进行插值。
Syntax:
interp2(X,Y,V,Xq,Yq)
interp2(V,Xq,Yq)
interp2(V)
interp2(V,k)
interp2(___,method)
interp2(___,method,extrapval)
这里,
interp2(X, Y, V, Xq, Yq)函数用于使用线性插值返回特定查询点的两个变量的指定函数的插值。其结果通过函数的原始采样。这里样本点的坐标位于“X”和“Y”,“V”包含每个样本点对应的函数值,“Xq”、“Yq”包含查询点的坐标。
interp2(V, Xq, Yq)函数用于采样点的默认网格。这些点覆盖矩形区域,X=1:n 和 Y=1:m,其中 [m,n] = size(V)。
interp2(V)函数用于返回通过在每个维度上将样本值之间的间隔除以一次而形成的细化网格上的插值值。
interp2(V, k)函数用于在通过将每个维度的间隔重复减半 k 次而形成的细化网格上返回插值。这导致样本值之间有 2^k-1 个插值点。
interp2(___, method)函数指定替代插值函数,例如“线性”、“最近”、“立方”、“makima”或“样条”。它的默认值为“线性”。
interp2(___, method, extrapval)函数指定“extrapval”,这是一个标量值,分配给位于样本点域之外的所有查询。
参数:此函数接受一些参数,如下所示:
- X:采样点的第一个坐标。
- Y:采样点的第二个坐标。
- V:用作 size(V),相当于 [m, n]。
- Xq:这包含查询点的坐标,相当于 X=1:n
- Yq:这包含查询点的坐标,相当于 X=1:m
- k:是区间。
- 方法:它指定一个替代插值函数,例如“线性”、“最近”、“三次”、“makima”或“样条”。它的默认值为“线性”。
- extrapval:它是分配给位于样本点域之外的所有查询的标量值。
返回值:它返回插入的二维数组。
例子:
MATLAB
% MATLAB code for interp2()
% Specifying a 2-D grid
[X,Y] = meshgrid(-4:4);
% Sampling the peaks() function
V = peaks(X,Y);
[Xq,Yq] = meshgrid(-4:0.25:4);
% Calling the interp2() function
title('Linear Interpolation Using Finer Grid');
Vq = interp2(X,Y,V,Xq,Yq);
输出:
二维阵列插值
示例 1:
MATLAB
% MATLAB code for linespace() to generate
% row vectors of 4 points
% Initializing a 2d array of dimensions 3*3
A=[1 2 3
4 5 6
7 8 9];
% Calling the linspace() function to
% generate the row vectors of 4 points
% in between and including 1 to 2
x = linspace(1, 2, 4);
% Calling the interp2() function for
% interpolation of above specified 2d array
result = interp2(A, x(:), x)
输出:
示例 2:
MATLAB
% MATLAB code for linespace() and interp2()
% Initializing a 2d array of dimensions 4*4
A=[0.69 1.76 0.089 2.0012;
5.89 1.25 0.47 0.55;
1.06 1.25 1.134 4.163;
2 1.7 0 2.4];
% Calling the linspace() function to
% generate the row vectors of 7 points
% in between and including 1 to 3
x = linspace(1, 3, 7);
% Calling the interp2() function for
% interpolation of above specified 2d array
result = interp2(A, x(:), x)
输出: