为什么这个Matlab错误与实际测试不一致?

时间:2013-05-28 19:38:20

标签: matlab error-handling grid interpolation

当我运行interp2并使用MESHGRID定义我的数组时,它不会产生错误,当使用NDGRID定义时会产生错误。但是,这没有任何意义,因为错误(如下所示)声称需要NDGRID格式。请随意为自己尝试,代码如下。这种不一致的原因是什么?如果有办法检测格式,为什么interp2只处理两种格式?我正在运行Matlab 2012b。

这是错误(由测试2触发):

Error using griddedInterpolant

Data is in MESHGRID format, NDGRID format is required.
Convert your data as follows:
   X = X'; Y = Y'; V = V'; F = griddedInterpolant(X,Y,V)

测试1 - 没有错误

clear
x = linspace(0,2*pi,10);
y = linspace(0,2*pi,10);
[X1,Y1] = meshgrid(x,y);
x = linspace(0,2*pi,4);
y = linspace(0,2*pi,4);
[X2,Y2] = meshgrid(x,y);
u = sin(X1).*cos(Y1);
a = interp2(X1,Y1,u,X2,Y2)

测试2 - 触发错误

clear
x = linspace(0,2*pi,10);
y = linspace(0,2*pi,10);
[X1,Y1] = ndgrid(x,y);
x = linspace(0,2*pi,4);
y = linspace(0,2*pi,4);
[X2,Y2] = ndgrid(x,y);
u = sin(X1).*cos(Y1);
a = interp2(X1,Y1,u,X2,Y2)

1 个答案:

答案 0 :(得分:3)

由于interp2在内部使用griddedInterpolant,因此需要在meshgrid调用之前调换griddedInterpolant格式输入(显示在帮助中)。 meshgrid griddedInterpolant显然没有验证输入数组。

由于大多数工具箱函数(包括interp2)本身都是Matlab函数,因此只需键入edit interp2或在调试时单步执行函数,就可以很容易地看到正在发生的事情。