如何在MATLAB中对二维阵列进行插值

如何在MATLAB中对二维阵列进行插值,matlab,interpolation,Matlab,Interpolation,如何生成一个包含2个变量的函数,并且给定一个2D数组,它将返回一个插值 我有nxm数组A。我需要插值它,以某种方式获得该曲面的函数,这样我就可以在非整数参数上选取值。 (我需要使用插值作为两个变量的函数) 例如: A[N,M] //my array // here is the method I'm looking for. Returns function interpolatedA interpolatedA(3.14,344.1) //That function returns inter

如何生成一个包含2个变量的函数,并且给定一个2D数组,它将返回一个插值

我有
nxm
数组
A
。我需要插值它,以某种方式获得该曲面的函数,这样我就可以在非整数参数上选取值。 (我需要使用插值作为两个变量的函数)

例如:

A[N,M] //my array
// here is the method I'm looking for. Returns function interpolatedA
interpolatedA(3.14,344.1) //That function returns interpolated value

您看到
interp2
功能了吗

来自MatLab文档:


< ZI=内插2(x,y,z,席,y])/<代码>返回矩阵<代码> ZI/C> >包含元素对应的元素>代码>席<代码>和代码> Y/<代码>,并通过矩阵内指定的二维函数内插,代码<代码> x/COD>,<代码> y>代码>和<代码> z < />代码>code>X和

Y
必须是单调的,并且具有与
meshgrid
生成的相同的格式(“格子”)。矩阵
X
Y
指定给出数据
Z
的点。超出范围的值返回为
NaN
s.

对于常规网格上的数据,请使用。如果您的数据分散,请使用。您可以围绕这些调用创建一个简化的包装器

M = 10;
N = 5;
A = rand(M,N);
interpolatedA = @(y,x) interp2(1:N,1:M,A,x,y);
%interpolatedA = @(y,x) griddata(1:N,1:M,A,x,y); % alternative
interpolatedA(3.3,8.2)

ans =
      0.53955
下面是一个示例,使用:

请注意,可以在任意点计算插值对象:

>> F(3.14,3.41)
ans =
     0.036288
上面的示例使用矢量化调用在网格的所有点进行插值

使用
spline()
命令,如下所示:

% A contains N rows and 2 columns
pp = spline(A(:,1), A(:,2));
ppval(pp,3.44)

ans =

    0.4454

谢谢,但我想那不是我需要的。据我所见,使用这些函数,我只能创建另一个具有曲面值的数组。但我需要使用数组的插值作为函数。(我编辑了这个问题)谢谢,但我想这不是我需要的。据我所见,使用这些函数,我只能创建另一个具有曲面值的数组。但我需要使用数组的插值作为函数。(我已经编辑了这个问题)@Max您可以使用这些函数插值任意数量的点。您可以在所需的特定[x,y]处获得一个值。谢谢!这很简单,我应该自己猜的。我还是个新手,抱歉:)请注意:x和y值对应于
而不是相反。因此,
interpolated(3.3,8.2)
正在返回一个位于
a(8,3)
@geometrical区域的值,谢谢!我更新了匿名函数,使输入按顺序排列(y,x),就像数组索引一样。搜索三次样条曲线的帮助或
spline()
命令。
% A contains N rows and 2 columns
pp = spline(A(:,1), A(:,2));
ppval(pp,3.44)

ans =

    0.4454