MATLAB 使用离散数据点实现三维曲面插值
依靠若干离散点实现三维曲面插值是工程应用中的常见问题,也是数据处理工作的常见需求。MATLAB 实现上述功能主要依靠 griddata 函数,该函数支持基于三角形的三次插值(仅支持内插值,估计是一种保形插值)和双调和样条插值(支持外插值)来实现上述功能。
案例数据及空间分布如下图所示:
案例代码如下所示:
clear,clc %% 离散点曲面插值标准案例 data=readmatrix('data.xlsx'); x=data(:,1); y=data(:,2); z=data(:,3); [X,Y,Z]=griddata(x,y,z,linspace(min(x),max(x))',linspace(min(y),max(y)),'cubic'); % 基于三角形的三次插值 仅支持内插值 % [X,Y,Z]=griddata(x,y,z,linspace(min(x),max(x))',linspace(min(y),max(y)),'v4'); % 双调和样条插值 支持外插值 figure,pcolor(X,Y,Z);shading interp %伪彩色图 figure,contourf(X,Y,Z) %等高线图 figure,surf(X,Y,Z); %三维曲面 figure,meshc(X,Y,Z); %s三维曲面(浅色)+等高线
该案例默认使用 'cubic' 插值方式,可见有效数据范围只涵盖数据点(x,y)在x-y坐标平面的凸包,效果如下:
图1. 伪彩色图
图2. 等高线图
图3. 三维曲面
图4. 剖面图(三维曲面+等高线)
如果要使插值数据完整覆盖设定区域,则需要支持外插值的 'v4' 插值方式,效果如下:
图5. 伪彩色图
图6. 等高线图
图7. 三维曲面
图8. 剖面图(三维曲面+等高线)
参考资料:
Interpolate 2-D or 3-D scattered data - MATLAB griddata (mathworks.com)