“x”、“y”和“u”是表示下面网格的每个节点的x坐标、y坐标和速度的2D矩阵(图)。我想对(x_q,y_q)进行内插,以求出任意点(Q)的u_q。
我的网格不是矩形的,“interp2”错误是:“输入网格不是有效的MESHGRID”。
有什么理想吗?我能做些什么?
谢谢。
最小可重现示例:
x=[0.0482114583977891,0.0482201588072998,0.0482288592168105;0.0513027685854806,0.0512573490659834,0.0512119412024664;0.0550957532853860,0.0550195888619688,0.0549437786953572;0.0589706773586289,0.0589051888951395,0.0588397004316502];
y=[-0.0481475644832381,-0.0450026617243515,-0.0418577589654650;-0.0454644879533678,-0.0426002662557475,-0.0397360636257961;-0.0434988768053532,-0.0408400599208391,-0.0381819554721181;-0.0414343539900984,-0.0389341351227583,-0.0364339162554183];
u=[1.52583130467469,14.3816671073665,58.5433654462735;108.677373003789,124.842139940676,145.468567077514;110.206733380171,111.157308056414,111.709609403516;135.414711548714,138.843419308648,147.988201447309];
xq=0.065;
yq=0.035;
uq = interp2(x,y,u,xq,yq,'cubic',0);
2条答案
按热度按时间pkbketx91#
interp2
函数需要一个规则的网格(例如,由meshgrid
创建的网格)。在您的情况下,您有分散的数据,在这种情况下,您必须使用griddata
进行插补:(请注意,在您的MCVE中,您的查询点远远超出了定义的输入点,因此只有
'nearest'
才能真正作为一种方法工作。)u7up0aaq2#
根据有关
interp2
函数的Matlab文档,三次样条线插补的要求如下:在您的代码中,这两个条件都不满足。
您需要确保x点和y点均匀分布,理想情况下使用
meshgrid
来生成点,并且需要使指定点(当前为3x4)至少为4x4。有关该函数的文档可在此处找到:https://www.mathworks.com/help/matlab/ref/interp2.html
这里有一个类似问题的答案:https://www.mathworks.com/matlabcentral/answers/866695-input-grid-is-not-a-valid-meshgrid