6

如何创建 2 个变量的函数并给定一个 2D 数组,它会返回一个插值?

我有N x M数组A。我需要对其进行插值并以某种方式获得该曲面的函数,以便我可以在非整数参数上选择值。(我需要将该插值用作 2 个变量的函数)

例如:

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
4

4 回答 4

6

这是一个使用示例scatteredInterpolant

%# get some 2D matrix, and plot as surface
A = peaks(15);
subplot(121), surf(A)

%# create interpolant
[X,Y] = meshgrid(1:size(A,2), 1:size(A,1));
F = scatteredInterpolant(X(:), Y(:), A(:), 'linear');

%# interpolate over a finer grid
[U,V] = meshgrid(linspace(1,size(A,2),50), linspace(1,size(A,1),50));
subplot(122), surf(U,V, F(U,V))

图片

请注意,您可以在任何时候评估插值对象:

>> F(3.14,3.41)
ans =
     0.036288

上面的示例使用矢量化调用在网格的所有点进行插值

于 2013-05-02T20:36:25.373 回答
4

对于常规网格上的数据,请使用interp2。如果您的数据分散,请使用griddata。您可以创建一个匿名函数作为这些调用的简化包装器。

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
于 2013-05-02T20:03:58.010 回答
0

你见过这个interp2功能吗?

来自 MatLab 文档:

ZI = interp2(X,Y,Z,XI,YI)返回ZI包含与 和 的元素对应的元素的矩阵,这些元素由矩阵、XIYI指定的二维函数内的插值确定。并且必须是单调的,并且具有相同的格式(“格子”),就好像它们是由. 矩阵并指定给出数据的点。超出范围的值作为s 返回。XYZXYmeshgridXYZNaN

于 2013-05-02T20:03:35.837 回答
0

使用如下spline()命令:

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

ans =

    0.4454
于 2013-05-02T20:37:42.080 回答