使用MATLAB我有一个表,比方说x(大小(100x1)),y(大小(100x1))和z(大小(100x100)),我使用:
z1 = interp2(x,y,z,x1,x2)
找到我以后需要计算的值。是否有更有效/更快的方式来实现这一点?我尝试用scatInterpolant实现它没有成功。
答案 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函数根本没有效率。