对于我的项目,我必须编写一个C ++代码,相当于Matlab的ScatteredInterpolant()函数。我的数据点是三维分散的数据。我能够使用TetGen库计算Delaunay四面体。我使用从TetGen和Matlab自己的delaunay()函数中找到的四面体来比较插值结果,只要查询点在凸包内,结果就相同。
在我的项目中,我必须使用线性外推法推算凸包外的点。我查看了Matlab文档,并说明了基于边界渐变的线性外推法。"根据我的文献调查,我无法找到使用边界梯度进行线性外推的良好文档。如果您向我提供有关线性外推如何为scatInterpolant()工作的信息,我将非常感激。
我已经查看了分散数据外推文档页面,其中说明了#34; '线性'外推法基于凸包边界处的梯度的最小二乘近似。它为凸包外部的查询点返回的值基于边界处的值和梯度。"为了验证,我编写了以下代码(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);
从我的理解,斜率是2,但为什么外推值不同?我可能会遗漏一些东西。我真的很感激一些见解。
谢谢