MATLAB 使用离散数据点实现三维曲面插值

发布时间 2023-11-03 15:45:22作者: CollinsLi

依靠若干离散点实现三维曲面插值是工程应用中的常见问题,也是数据处理工作的常见需求。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)