Main Content

このページの内容は最新ではありません。最新版の英語を参照するには、ここをクリックします。

散布データの外挿

外挿の精度に影響を与える要因

scatteredInterpolant は凸包の外部の点における値を近似する機能を提供します。'linear' 外挿メソッドは、凸包の境界における勾配の最小二乗近似を基にしています。凸包の外にあるクエリ点に対して返される値は、境界での値と勾配を基にしています。解の質はデータのサンプル方法の良否によって変化します。データのサンプリング点が荒いと、外挿の質が劣ります。

さらに、凸包境界の近傍での三角形分割では、細長い小片のような三角形になることがあります。こうした三角形が形成されると、内挿の結果と同様に、外挿の結果も良好でない可能性があります。詳細は、内挿の結果が凸包の近傍で不適切を参照してください。

領域外の動作に関する知識を活用して、可視化された外挿結果を検証してください。

散布データのサンプリングが粗い場合と細かい場合の外挿の比較

この例では、同じ放物線関数から得た 2 つの異なるサンプリングを内挿する方法を示します。また、サンプル点の分布が良好になると外挿の結果も良くなることも示します。

10 個の同心円の周囲に、10 度ずつ離れた点を放射状に分布して作成します。bsxfun を使用して、座標 x=cosθ および y=sinθ を計算します。

theta = 0:10:350;
c = cosd(theta);
s = sind(theta);
r = 1:10;

x1 = bsxfun(@times,r.',c);
y1 = bsxfun(@times,r.',s);

figure
plot(x1,y1,'*b')
axis equal

Figure contains an axes object. The axes object contains 36 objects of type line. One or more of the lines displays its values using only markers

さらに粗く分布した 2 つ目の点集合を作成します。関数 rand を使用して、[-10, 10] の範囲に無作為抽出点を作成します。

rng default;
x2 = -10 + 20*rand([25 1]);
y2 = -10 + 20*rand([25 1]);
figure
plot(x2,y2,'*')

Figure contains an axes object. The axes contains a line object which displays its values using only markers.

この両方の点集合で放物線関数 v(x,y) をサンプリングします。

v1 = x1.^2 + y1.^2;
v2 = x2.^2 + y2.^2;

v(x,y) の各サンプリングに対して scatteredInterpolant を作成します。

F1 = scatteredInterpolant(x1(:),y1(:),v1(:));
F2 = scatteredInterpolant(x2(:),y2(:),v2(:));

各領域の外まで拡張されたクエリ点のグリッドを作成します。

[xq,yq] = ndgrid(-20:20);

F1 を評価し、結果をプロットします。

figure
vq1 = F1(xq,yq);
surf(xq,yq,vq1)

Figure contains an axes object. The axes object contains an object of type surface.

F2 を評価し、結果をプロットします。

figure
vq2 = F2(xq,yq);
surf(xq,yq,vq2)

Figure contains an axes object. The axes object contains an object of type surface.

F2 では v2 のサンプリング点が粗いため、外挿の質が劣っています。

3 次元データの外挿

この例では、scatteredInterpolant を使用して、良好にサンプリングされた 3 次元グリッド データセットを外挿する方法を説明します。クエリ点は完全に領域外の平面グリッド上にあります。

10 x 10 x 10 グリッドのサンプル点を作成します。各次元の点は [-10, 10] の範囲にあります。

[x,y,z] = ndgrid(-10:10);

サンプル点で関数 v(x,y,z) をサンプリングします。

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

線形内挿法と線形外挿法を指定して、scatteredInterpolant を作成します。

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

高度 z = 15 を指定し、[-20, 20] の範囲に広がる x-y グリッド上で内挿を評価します。

[xq,yq,zq] = ndgrid(-20:20,-20:20,15);
vq = F(xq,yq,zq);
figure
surf(xq,yq,vq)

Figure contains an axes object. The axes object contains an object of type surface.

関数のサンプリングが良好なので、外挿の結果も良好です。