5

私のプロジェクトでは、Matlab の ScatteredInterpolant() 関数に相当する C++ コードを書かなければなりません。私のデータ ポイントは、3 次元の散在データです。TetGen ライブラリを使用して Delaunay 四面体を計算できます。TetGen と Matlab 独自の delaunay() 関数から見つかった四面体を使用して補間結果を比較しました。クエリ ポイントが凸包内にある限り、結果は同じです。

私のプロジェクトでは、線形外挿を使用して凸包の外側の点を外挿する必要があります。Matlab のドキュメントを調べたところ、「境界勾配に基づく線形外挿」と書かれています。私の文献調査から、境界勾配を使用して線形外挿がどのように機能するかについての適切なドキュメントを見つけることができませんでした。線形外挿がscatteredInterpolant()でどのように機能するかについての洞察を提供していただければ、本当に感謝しています。

私は、「「線形」外挿法は、凸包の境界における勾配の最小二乗近似に基づいています。凸包は、境界での値と勾配に基づいています。」確認するために、次のコード (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 ですが、外挿値が異なるのはなぜですか? 私は何かが欠けているかもしれません。いくつかの洞察をいただければ幸いです。

ありがとうございました

4

0 に答える 0