ドキュメンテーション

最新のリリースでは、このページがまだ翻訳されていません。 このページの最新版は英語でご覧になれます。

scatteredInterpolant

2 次元または 3 次元の散布データの内挿

説明

scatteredInterpolant を使用して、散布データの 2 次元または 3 次元データセットの内挿を実行します。scatteredInterpolant は指定したデータセットの内挿 F を返します。F をクエリ点の集合 (2 次元の (xq,yq) など) で評価して、内挿値 vq = F(xq,yq) を生成できます。

griddedInterpolant を使用して、グリッド データによる内挿を実行します。

作成

説明

F = scatteredInterpolant は、空の散布データの内挿オブジェクトを作成します。

F = scatteredInterpolant(x,y,v) は、v = F(x,y) 形式の表面を近似する内挿を作成します。x ベクトルと y ベクトルは、サンプル点の (x,y) 座標を指定します。v は点 (x,y) に関連付けられたサンプル値を含むベクトルです。

F = scatteredInterpolant(x,y,z,v) は、v = F(x,y,z) という形式の 3 次元内挿を作成します。

F = scatteredInterpolant(P,v) は、サンプル点の座標を配列として指定します。P の行には、v の値の (x, y) または (x, y, z) 座標が含まれています。

F = scatteredInterpolant(___,Method) は、内挿法 ('nearest''linear' または 'natural') を指定します。先頭 3 つのいずれかの構文では、最後の入力引数として Method を指定できます。

F = scatteredInterpolant(___,Method,ExtrapolationMethod) は内挿法と外挿法の両方を指定します。先頭 3 つのいずれかの構文では、MethodExtrapolationMethod を最後の 2 つの入力引数として一緒に渡してください。

  • Method は、'nearest''linear''natural' のいずれかです。

  • ExtrapolationMethod は、'nearest''linear''none' のいずれかです。

入力引数

すべて展開する

サンプル点。v と同じサイズのベクトルとして指定します。サンプル点は一意である必要があります。ただし、サンプル点に重複がある場合、scatteredInterpolant は警告を表示し、重複する点を 1 つに統合します。

データ型: double

サンプル点の配列。nm 列の行列として指定します。ここで、m は点数で、n は点が存在する空間の次元です。P の各行には、サンプル点の座標 (x, y) または (x, y, z) が含まれています。サンプル点は一意である必要があります。ただし、サンプル点に重複がある場合、scatteredInterpolant は警告を表示し、重複する点を 1 つに統合します。

データ型: double

サンプル値。サンプル点における関数値 v = F(x,y,z) を定義するベクトルとして指定します。

データ型: double

内挿法。次のいずれかのオプションとして指定します。

手法説明連続性
'linear' (既定)

線形内挿

C0
'nearest'

最近傍点による内挿

不連続
'natural'

自然な近傍内挿

C1 (サンプル点を除く)

外挿法。次のオプションのいずれかとして指定します。

外挿法説明
'linear'

境界勾配に基づく線形外挿。Method'linear' または 'natural' の場合は既定です。

'nearest'

最近傍による外挿。この方法では、境界の最近傍の値を評価します。Method'nearest' の場合の既定です。

'none'

外挿なし。Points の凸包外側のクエリは NaN を返します。

プロパティ

すべて展開する

サンプル点。行列として指定します。行列のサイズは m2 列または m3 列で、m 個の点を 2 次元または 3 次元空間で表します。Points の各行には、一意のサンプル点の座標 (x, y) または (x, y, z) が含まれています。Points の行は、Values の関数値に対応します。

データ型: double

サンプル点での関数値。Points の各点に関連付けられた値のベクトルとして指定します。

データ型: double

内挿法。'linear''nearest' または 'natural' として指定します。これらのメソッドの説明については、Method を参照してください。

外挿法。'nearest''linear' または 'none' として指定します。これらのメソッドの説明については、ExtrapolationMethod を参照してください。

データ型: double

使用法

scatteredInterpolant を使用して、内挿 F を作成します。その後、次の構文のいずれかを使用して、特定の点で F を評価できます。

Vq = F(Pq)
Vq = F(Xq,Yq)
Vq = F(Xq,Yq,Zq)
Vq = F({xq,yq})
Vq = F({xq,yq,zq})

  • Vq = F(Pq) は行列 Pq のクエリ点を指定します。Pq の各行は、クエリ点の座標を含んでいます。

  • Vq = F(Xq,Yq)Vq = F(Xq,Yq,Zq) は、等しいサイズの 2 つまたは 3 つの行列としてクエリ点を指定します。

  • Vq = F({xq,yq})Vq = F({xq,yq,zq})グリッド ベクトルとしてクエリ点を指定します。この構文は、クエリする点のグリッドが大きく、メモリを節約する場合に使用してください。

すべて折りたたむ

サンプル点を定義し、これらの位置での三角関数の値を計算します。これらの点は内挿のサンプル値です。

t = linspace(3/4*pi,2*pi,50)';
x = [3*cos(t); 2*cos(t); 0.7*cos(t)];
y = [3*sin(t); 2*sin(t); 0.7*sin(t)];
v = repelem([-0.5; 1.5; 2],length(t));

内挿を作成します。

F = scatteredInterpolant(x,y,v);

クエリ位置 (xq,yq) で内挿を評価します。

tq = linspace(3/4*pi+0.2,2*pi-0.2,40)';
xq = [2.8*cos(tq); 1.7*cos(tq); cos(tq)];
yq = [2.8*sin(tq); 1.7*sin(tq); sin(tq)];
vq = F(xq,yq);

結果をプロットします。

plot3(x,y,v,'.',xq,yq,vq,'.'), grid on
title('Linear Interpolation')
xlabel('x'), ylabel('y'), zlabel('Values')
legend('Sample data','Interpolated query data','Location','Best')

一連の散布サンプル点の内挿を作成し、その内挿を一連の 3 次元クエリ点で評価します。

200 個の乱数点を定義し、三角関数をサンプリングします。これらの点は内挿のサンプル値です。

P = -2.5 + 5*gallery('uniformdata',[200 3],0);
v = sin(P(:,1).^2 + P(:,2).^2 + P(:,3).^2)./(P(:,1).^2+P(:,2).^2+P(:,3).^2);

内挿を作成します。

F = scatteredInterpolant(P,v);

クエリ位置 (xq,yq,zq) で内挿を評価します。

[xq,yq,zq] = meshgrid(-2:0.25:2);
vq = F(xq,yq,zq);

結果のスライスをプロットします。

xslice = [-.5,1,2]; 
yslice = [0,2]; 
zslice = [-2,0];
slice(xq,yq,zq,vq,xslice,yslice,zslice)

サンプル点の値を変更する場合は、Values プロパティの要素を置換します。元の三角形分割は変更されないため、新しい内挿を評価すると即時に結果が得られます。

50 個の乱数点を作成し、指数関数をサンプリングします。これらの点は内挿のサンプル値です。

x = -2.5 + 5*gallery('uniformdata',[50 1],0);
y = -2.5 + 5*gallery('uniformdata',[50 1],1);
v = x.*exp(-x.^2-y.^2);

内挿を作成します。

F = scatteredInterpolant(x,y,v)
F = 
  scatteredInterpolant with properties:

                 Points: [50x2 double]
                 Values: [50x1 double]
                 Method: 'linear'
    ExtrapolationMethod: 'linear'

(1.40,1.90) の内挿を評価します。

F(1.40,1.90)
ans = 0.0029

内挿のサンプル値を変更し、同じ点で内挿を再評価します。

vnew = x.^2 + y.^2;
F.Values = vnew;
F(1.40,1.90)
ans = 6.1109

scatteredInterpolant により提供される複数の内挿アルゴリズムの結果を比較します。

50 個の散布点のサンプル データセットを作成します。内挿法ごとの差異が鮮明になるように、点の数は人為的に少なく設定されています。

x = -3 + 6*rand(50,1);
y = -3 + 6*rand(50,1);
v = sin(x).^4 .* cos(y);

内挿とクエリ点のグリッドを作成します。

F = scatteredInterpolant(x,y,v);
[xq,yq] = meshgrid(-3:0.1:3);

'nearest''linear''natural' の各メソッドを使用して結果をプロットします。内挿法が変更されるたびに、内挿を再クエリして最新の結果を取得する必要があります。

F.Method = 'nearest';
vq1 = F(xq,yq);
plot3(x,y,v,'mo')
hold on
mesh(xq,yq,vq1)
title('Nearest Neighbor')
legend('Sample Points','Interpolated Surface','Location','NorthWest')

F.Method = 'linear';
vq2 = F(xq,yq);
figure
plot3(x,y,v,'mo')
hold on
mesh(xq,yq,vq2)
title('Linear')
legend('Sample Points','Interpolated Surface','Location','NorthWest')

F.Method = 'natural';
vq3 = F(xq,yq);
figure
plot3(x,y,v,'mo')
hold on
mesh(xq,yq,vq3)
title('Natural Neighbor')
legend('Sample Points','Interpolated Surface','Location','NorthWest')

厳密解をプロットします。

figure
plot3(x,y,v,'mo')
hold on
mesh(xq,yq,sin(xq).^4 .* cos(yq))
title('Exact Solution')
legend('Sample Points','Exact Surface','Location','NorthWest')

最近傍外挿を使用して、凸包の外側の単一点で内挿をクエリします。

200 個の乱数点による行列を定義し、指数関数をサンプリングします。これらの点は内挿のサンプル値です。

P = -2.5 + 5*gallery('uniformdata',[200 2],0);
x = P(:,1);
y = P(:,2);
v = x.*exp(-x.^2-y.^2);

線形内挿と最近傍外挿を指定して内挿を作成します。

F = scatteredInterpolant(P,v,'linear','nearest')
F = 
  scatteredInterpolant with properties:

                 Points: [200x2 double]
                 Values: [200x1 double]
                 Method: 'linear'
    ExtrapolationMethod: 'nearest'

凸包の外側の内挿を評価します。

vq = F(3.0,-1.5)
vq = 0.0031

外挿を無効にして、同じ点の F を評価します。

F.ExtrapolationMethod = 'none';
vq = F(3.0,-1.5)
vq = NaN

詳細

すべて展開する

ヒント

  • scatteredInterpolant オブジェクト F を多数のクエリ点の組で評価する方が、関数 griddata または griddatan を使用して内挿を個別に計算するより速く処理できます。以下に例を示します。

    % Fast to create interpolant F and evaluate multiple times
    F = scatteredInterpolant(X,Y,V)
    v1 = F(Xq1,Yq1)
    v2 = F(Xq2,Yq2)
    
    % Slower to compute interpolations separately using griddata
    v1 = griddata(X,Y,V,Xq1,Yq1)
    v2 = griddata(X,Y,V,Xq2,Yq2)
    
  • 内挿のサンプル値または内挿法を変更する場合、内挿オブジェクト F のプロパティを更新する方が、新しい scatteredInterpolant オブジェクトを作成するよりも効率的です。Values または Method を更新する場合、基になる入力データのドローネ三角形分割は変更されないため、新しい結果を迅速に計算できます。

アルゴリズム

scatteredInterpolant は散布サンプル点のドローネ三角形分割を使用して内挿を実行します[1]

参照

[1] Amidror, Isaac. “Scattered data interpolation methods for electronic imaging systems: a survey.” Journal of Electronic Imaging. Vol. 11, No. 2, April 2002, pp. 157–176.

R2013a で導入