matlab 对曲面网格进行速度内插

ih99xse1  于 2022-11-15  发布在  Matlab
关注(0)|答案(2)|浏览(233)

“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);
pkbketx9

pkbketx91#

interp2函数需要一个规则的网格(例如,由meshgrid创建的网格)。在您的情况下,您有分散的数据,在这种情况下,您必须使用griddata进行插补:

uq = griddata(x,y,u,xq,yq, 'nearest');

(请注意,在您的MCVE中,您的查询点远远超出了定义的输入点,因此只有'nearest'才能真正作为一种方法工作。)

u7up0aaq

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

相关问题