ScateredInterpolant() 的线性外推法在 MATLAB 中如何工作?

gma*_*man 5 c++ matlab extrapolation

对于我的项目,我必须编写 C++ 代码,相当于 Matlab 的 ScatteredInterpolant() 函数。我的数据点是三维的分散数据。我可以使用 TetGen 库计算 Delaunay 四面体。我使用从 TetGen 和 Matlab 自己的 delaunay() 函数找到的四面体比较了插值结果,只要查询点位于凸包内,结果就相同。

在我的项目中,我必须使用线性外推法来外推凸包之外的点。我浏览了 Matlab 文档,它说“基于边界梯度的线性外推”。从我的文献调查中,我找不到很好的文档来说明线性外推如何使用边界梯度进行工作。如果您向我提供有关分散插值()的线性外推如何工作的见解,我将非常感激。

我查看了分散数据外推文档页面,其中写着“‘线性’外推方法基于凸包边界处梯度的最小二乘近似。它为凸包之外的查询点返回的值凸包基于边界处的值和梯度。” 为了验证,我编写了以下代码(2D数据):

clc;clear;close all;

x = [ -1 1 1 -1 0 ]; y = [ -1 -1 1 1 0 ];

v = x.^2 + y.^2;

tri = delaunay(x, y);

F = scatteredInterpolant(x(:), y(:), v(:), 'linear', 'linear');

[xq, yq] = meshgrid( -2 : 0.1 : 2 );

vq = F(xq, yq);

figure; plot(x, y, 'r*');hold on; tri = delaunay(x, y); triplot(tri, x, y); xlabel('x');ylabel('y'); scatter3(x, y, v, 'r', 'filled');hold on; surf(xq, yq, vq); text(x(1), y(1), '1', 'fontsize', 20); text(x(2), y(2), '2', 'fontsize', 20); text(x(3), y(3), '3', 'fontsize', 20); text(x(4), y(4), '4', 'fontsize', 20); text(x(5), y(5), '5', 'fontsize', 20); box on; xlabel('x');ylabel('y'); set(gca, 'fontsize', 16);
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述 在此输入图像描述 根据我的理解,斜率是2,但为什么推断值不同?我可能错过了一些东西。我真的很感激一些见解。

谢谢