曲线网格速度插值问题:interp2无效网格错误的解决方法
非矩形网格插值解决方案
问题原因
interp2仅支持规则矩形网格(即由meshgrid生成的网格,每行x值相同、每列y值相同),你的网格属于非结构化/非矩形网格,因此触发"Input grid is not a valid MESHGRID"错误。
替代方案
针对非结构化网格,Matlab提供了两个专门的插值工具:
1. 使用griddata函数
适合单次或少量插值场景,直接处理散乱点数据:
- 先将二维矩阵
x、y、u展平为一维数组(通过(:)操作) - 调用
griddata指定插值方法和外插填充值
示例代码:
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; % 展平网格数据并执行插值,cubic方法+外插填充0 uq = griddata(x(:), y(:), u(:), xq, yq, 'cubic', 0);
2. 使用scatteredInterpolant类
适合需要多次插值的场景,先创建插值对象,后续可重复调用,效率更高:
- 展平数据创建插值对象
- 设置外插规则(如填充值)
- 调用对象获取插值结果
示例代码:
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; % 创建散乱点插值对象,采用cubic方法 F = scatteredInterpolant(x(:), y(:), u(:), 'cubic'); % 设置超出网格范围时的填充值 F.ExtrapolationMethod = 0; % 计算插值结果 uq = F(xq, yq);
注意事项
- 你的查询点
(0.065, 0.035)完全在现有网格范围外(现有x最大约0.0589,y最小约-0.0481),因此会触发外插逻辑,返回设置的填充值0。若需要合理外插,可更换为linear方法(默认支持外插)或调整填充值。 - 若网格是结构化非矩形网格(如曲线网格),也可尝试
interpn配合ndgrid,但griddata和scatteredInterpolant的适用性更广。
内容的提问来源于stack exchange,提问作者Hosein Bashi
相关产品推荐
相关产品推荐

