5

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

在我的项目中,我必须使用线性外推法推断凸包外的点。我浏览了 Matlab 文档,上面写着“基于边界梯度的线性外推”。从我的文献调查中,我找不到很好的文档,线性外推是如何使用边界梯度工作的。如果您能向我提供有关线性外推法如何作用于scatteredInterpolant() 的见解,我将不胜感激。

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

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

在此处输入图像描述 在此处输入图像描述 据我了解,斜率为 2,但为什么外推值不同?我可能会遗漏一些东西。我真的很感激一些见解。

谢谢

4

0 回答 0