是否有更有效的interp2 MATLAB方法?

时间:2014-10-18 21:59:32

标签: matlab interpolation

使用MATLAB我有一个表,比方说x(大小(100x1)),y(大小(100x1))和z(大小(100x100)),我使用:

 z1 = interp2(x,y,z,x1,x2) 

找到我以后需要计算的值。是否有更有效/更快的方式来实现这一点?我尝试用scatInterpolant实现它没有成功。

2 个答案:

答案 0 :(得分:0)

我不确定你的问题。您是指更好的通话而不是interp2,还是有关元组(x1, x2)的内容?

如果您引用interp2,可以通过输入matlab >>> type interp2来查看,最终matlab会调用griddedInterpolant。我无法在线查找此内置呼叫的代码,但this链接表示interp2速度很快。 interpn为GPU过载,可能interp2现在或将来都可能。

在我看来,interp2功能本身很方便。我已广泛使用interp。存在不同类型的多项式插值和一些用于外推的度量。

如果没有更好的问题定义,我将不得不将其留在那里。希望这可以帮助。

答案 1 :(得分:0)

这取决于您要插入的数据和点。如果数据位于对齐的网格中,则可以使用griddata。 如果数据是分散的并且要插入的点在网格中,那么scatInterpolant就可以了:

%% // scattered data, interpolate at grid
% // random coordinate pair
x = rand(100,1);
y = rand(100,1);
% // function to interpolate
func = sin(x.*y);
% // interp function
F = scatteredInterpolant(x,y,func);
% // grid to interpolate at:
[ix iy] = ndgrid(0:.01:1);
ifunc = F(ix, iy);
% // plot
mesh(ix, iy, ifunc); 

%% // grid data, scattered interpolation
[x y] = ndgrid(1:100);  % // data coordinates
func = sin(x.*y);       % // create some data
ix = rand(100,1)*100;   % // interpolation points
iy = rand(100,1)*100;
ifunc = griddata(x,y,func,ix,iy);   % // interpolate
plot3(ix, iy, ifunc, 'o');  % // plot

如果需要散乱分散插值... 我之前遇到过与matlab相同的问题,我最终做了一个更复杂的解决方案,因为matlab函数根本没有效率。