Main Content

griddedInterpolant

グリッド データの内挿

説明

griddedInterpolant を使用して、1 次元、2 次元、3 次元、N 次元のグリッド データ セットに対して内挿を実行します。griddedInterpolant は指定されたデータセットの内挿関数 F を返します。F をクエリ点の集合 (2 次元の (xq,yq) など) で評価して、内挿値 vq = F(xq,yq) を生成できます。

散布データを使用して内挿を実行するには、scatteredInterpolant を使用します。

作成

説明

F = griddedInterpolant は空のグリッド データ内挿オブジェクトを作成します。

F = griddedInterpolant(x,v) は、サンプル点のベクトル x と、対応する値 v から 1 次元の内挿を作成します。

F = griddedInterpolant(X1,X2,...,Xn,V) は、一連の n 次元配列 X1,X2,...,Xn として渡されたサンプル点のフル グリッドを使用して 2 次元、3 次元または N 次元の内挿を作成します。配列 V は、X1,X2,...,Xn 内の点の位置に関連付けられたサンプル値を格納します。各配列 X1,X2,...,Xn は、V と同じサイズでなければなりません。

F = griddedInterpolant(V) は、既定のグリッドを使用して内挿を作成します。この構文を使用する場合、griddedInterpolant は、i 番目の次元で、間隔が 1、範囲が [1, size(V,i)] の点の集合としてグリッドを定義します。この構文は、点の間の絶対距離を考慮せず、メモリを節約する場合に使用します。

F = griddedInterpolant(gridVecs,V) は、n 個のグリッド ベクトルを含む cell 配列 gridVecs を指定して、サンプル点の n 次元グリッドを記述します。この構文は、特定のグリッドを使用し、メモリも節約する場合に使用してください。

F = griddedInterpolant(___,Method) は内挿法 'linear''nearest''next''previous''pchip''cubic''makima' または 'spline' を指定します。前述の任意の構文で、最後の入力引数として Method を指定できます。

F = griddedInterpolant(___,Method,ExtrapolationMethod) は内挿法と外挿法の両方を指定します。griddedInterpolant は、クエリ点がサンプル点の領域外であるときに ExtrapolationMethod を使用して値を推定します。

入力引数

すべて展開する

サンプル点。ベクトルとして指定します。xv は同じサイズでなければなりません。x 内のサンプル点は一意でなければなりません。

データ型: single | double

サンプル値。ベクトル、行列または多次元配列として指定します。v の要素は、x 内のサンプル点に対応する値です。

  • 単一の値セットを使用して内挿するには、xv が同じ長さのベクトルでなければなりません。

  • 複数の値セットを使用して内挿するには、vx と比べて追加の次元をもつ配列にすることができます。v の最初の次元のサイズは x 内のサンプル点の数と一致しなければならず、v 内の各列は 1 次元の値の個別のセットを定義します。たとえば、x が 10 個の要素をもつ列ベクトルである場合は、v を 10 行 4 列の行列として指定し、4 つの異なる値セットを使用して内挿できます。

データ型: single | double

フル グリッド形式のサンプル点。個別の n 次元配列として指定します。サンプル点は一意で、かつ並べ替えられていなければなりません。配列 X1,X2,...,Xn は、関数 ndgrid を使用して作成できます。これらの配列はすべて同じサイズであり、それぞれは V と同じサイズです。

データ型: single | double

グリッド ベクトル形式のサンプル点。グリッド ベクトル {xg1,xg2,...,xgn} の cell 配列として指定します。サンプル点は一意で、かつ並べ替えられていなければなりません。ベクトルは、V と同じサイズのグリッドを指定しなければなりません。つまり、size(V) = [length(xg1) length(xg2),...,length(xgn)] です。この形式は、グリッドが非常に大きい場合、メモリを節約するためにフル グリッドの代替として使用してください。

データ型: single | double

サンプル値。配列として指定します。V の要素は、サンプル点に対応する値です。V の最初の N 次元は、サンプル点のフル グリッドの対応する次元と同じサイズでなければなりません。ここで、N はグリッドの次元数です。

  • 単一の値セットを使用して内挿するには、V をサンプル点のフル グリッドと同じサイズの配列として指定します。たとえば、サンプル点によってサイズが 100 行 100 列のグリッドが形成されている場合は、同じサイズの行列を含む値を指定できます。

  • 複数の値セットを使用して内挿するには、V をサンプル点のグリッドと比べて追加の次元をもつ配列として指定します。追加の次元は、各サンプル点における複数の値を定義します。たとえば、サンプル点によってサイズが 100 行 100 列のグリッドが形成されている場合は、サイズが 100×100×4 の配列として値を指定し、4 つの異なる 100 行 100 列の値セットを使用して内挿できます。

データ型: single | double

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

メソッド説明連続性コメント
'linear' (既定)線形内挿クエリ点に内挿される値は、対応する各次元における、隣接するグリッド点の値を使用した線形内挿に基づいて決定されます。 C0
  • 各次元に少なくとも 2 つのグリッド点が必要

  • 'nearest' よりも多いメモリが必要

'nearest'最近傍点による内挿。クエリ点に内挿される値は、最も近いサンプル グリッド点の値になります。 不連続
  • 各次元に 2 つのグリッド点が必要

  • 中程度のメモリ要求で最高速の計算

'next'次の近傍内挿 (1 次元のみ)。クエリ点に内挿される値は、次のサンプル グリッド点の値になります。不連続
  • 少なくとも 2 つの点が必要

  • メモリ要求と計算時間は 'nearest' と同じ

'previous'前の近傍内挿 (1 次元のみ)。クエリ点に内挿される値は、前のサンプル グリッド点の値になります。不連続
  • 少なくとも 2 つの点が必要

  • メモリ要求と計算時間は 'nearest' と同じ

'pchip'形状維持区分的 3 次内挿 (1 次元のみ)。クエリ点に内挿される値は、隣接するグリッド点の値を使用した形状維持区分的 3 次内挿に基づいて決定されます。C1
  • 少なくとも 4 つの点が必要

  • 'linear' よりも多くのメモリと長い計算時間が必要

'cubic'3 次内挿。クエリ点に内挿される値は、個々の次元で隣接するグリッド点の値の 3 次内挿に基づいて決定されます。内挿は、3 次畳み込みに基づいて決定されます。C1
  • グリッドが等間隔でなければならない。ただし、各次元の間隔が同じである必要はない

  • 各次元に少なくとも 4 つの点が必要

  • 'linear' よりも多くのメモリと長い計算時間が必要

'makima'修正 Akima 3 次エルミート内挿。クエリ点に内挿される値は、対応する各次元における隣接するグリッド点の値を使用した、最大 3 次の多項式の区分的関数に基づいて決定されます。Akima 式はオーバーシュートを回避するよう修正されています。C1
  • 各次元に少なくとも 2 つの点が必要

  • 発生するうねりは 'spline' より少ないが、'pchip' ほど大幅に変動が少なくならない

  • 計算量は 'pchip' より多くなるが、通常は 'spline' より少ない

  • メモリの要件は 'spline' と同様

'spline'3 次スプライン内挿。クエリ点に内挿される値は、個々の次元で隣接するグリッド点の値の 3 次内挿に基づいて決定されます。内挿は節点なし端点条件を使用した 3 次スプラインに基づいています。C2
  • 各次元に 4 つの点が必要

  • 'cubic' よりも多くのメモリと長い計算時間が必要

外挿法。'linear''nearest''next''previous''pchip''cubic''spline' または 'makima' として指定します。さらに、'none' を指定できます。この場合、グリッドの領域の外側をクエリすると NaN 値が返されます。

ExtrapolationMethod を省略した場合、既定値は Method に指定されている値となります。MethodExtrapolationMethod の両方の引数を省略すると、両方の値が既定で 'linear' に設定されます。

プロパティ

すべて展開する

グリッド ベクトル。cell 配列 {xg1,xg2,...,xgn} として指定します。これらのベクトルは、Values 内の値のグリッド点 (位置) を指定します。グリッド点は一意でなければなりません。

データ型: cell

サンプル点での関数値。GridVectors 内のグリッド点に関連付けられた値の配列として指定します。

データ型: single | double

内挿法。文字ベクトルとして指定します。Method には 'linear''nearest''next''previous''pchip''cubic''spline'、または 'makima' を指定できます。これらのメソッドの説明については、Method を参照してください。

データ型: char

外挿法。文字ベクトルとして指定します。ExtrapolationMethod には、'linear''nearest''next''previous''pchip''cubic''spline''makima'、または 'none' を指定できます。値 'none' は外挿が無効であることを示します。既定値は、Method の値です。

データ型: char

使用法

説明

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

Vq = F(Xq) は行列 Xq のクエリ点を指定します。Xq の各行は、1 つのクエリ点の座標を含みます。

Vq = F(xq1,xq2,...,xqn) はクエリ点を複数の列ベクトル xq1,xq2,...,xqn として指定します。列ベクトルは長さが m で、n 次元空間に散在する m 個の点を表します。

Vq = F(Xq1,Xq2,...,Xqn)n 次元配列 Xq1,Xq2,...,Xqn を使用してクエリ点を指定します。この配列は点のフル グリッドを定義します。

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

すべて折りたたむ

griddedInterpolant を使用して 1 次元データ セットを内挿します。

散在するサンプル点 v のベクトルを作成します。点は 0 ~ 20 のランダムな 1 次元の位置でサンプリングされます。

x = sort(20*rand(100,1));
v = besselj(0,x);

データのグリッド内挿オブジェクトを作成します。既定で、griddedInterpolant'linear' 内挿法を使用します。

F = griddedInterpolant(x,v)
F = 
  griddedInterpolant with properties:

            GridVectors: {[100x1 double]}
                 Values: [100x1 double]
                 Method: 'linear'
    ExtrapolationMethod: 'linear'

0 ~ 20 の等間隔の 500 点で、内挿 F をクエリします。内挿結果 (xq,vq) を元のデータ (x,v) の上にプロットします。

xq = linspace(0,20,500);
vq = F(xq);
plot(x,v,'ro')
hold on
plot(xq,vq,'.')
legend('Sample Points','Interpolated Values')

Figure contains an axes object. The axes object contains 2 objects of type line. One or more of the lines displays its values using only markers These objects represent Sample Points, Interpolated Values.

2 つの手法を使用して 3 次元データを内挿し、クエリ点を指定します。

関数 z(x,y)=sin(x2+y2)x2+y2 を範囲 [-5,5] のグリッド サンプル点のセットで評価した結果を表す 3 次元データ セットを作成して、プロットします。

[x,y] = ndgrid(-5:0.8:5);
z = sin(x.^2 + y.^2) ./ (x.^2 + y.^2);
surf(x,y,z)

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

データのグリッド内挿オブジェクトを作成します。

F = griddedInterpolant(x,y,z);

細かいメッシュを使用して内挿をクエリし、分解能を向上させます。

[xq,yq] = ndgrid(-5:0.1:5);
vq = F(xq,yq);
surf(xq,yq,vq)

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

多数のサンプル点またはクエリ点がある場合、およびメモリ使用量が問題になる場合は、"グリッド ベクトル" を使用してメモリ使用量を改善できます。

  • ndgrid を使用する代わりにグリッド ベクトルを指定してフル グリッドを作成した場合、griddedInterpolant はフル クエリ グリッドを形成せずに計算を実行します。

  • グリッド ベクトルを渡した場合、通常これらは cell 配列 {xg1, xg2, ..., xgn} のセルとしてグループ化されます。グリッド ベクトルは、フル グリッドの点をコンパクトに表す方法です。

あるいは、グリッド ベクトルを使用して前述のコマンドを実行します。

x = -5:0.8:5;
y = x';
z = sin(x.^2 + y.^2) ./ (x.^2 + y.^2);
F = griddedInterpolant({x,y},z);
xq = -5:0.1:5;
yq = xq';
vq = F({xq,yq});
surf(xq,yq,vq)

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

既定のグリッドを使用して、サンプル点のセットに内挿を迅速に実行します。既定のグリッドは単位間隔の点を使用するため、この内挿はサンプル点間の正確な xy 間隔が重要ではない場合に便利です。

サンプルの関数値の行列を作成し、既定のグリッドに対してこれらをプロットします。

x = (1:0.3:5)';
y = x';
V = cos(x) .* sin(y);
n = length(x);
surf(1:n,1:n,V)

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

既定のグリッドを使用してデータを内挿します。

F = griddedInterpolant(V)
F = 
  griddedInterpolant with properties:

            GridVectors: {[1 2 3 4 5 6 7 8 9 10 11 12 13 14]  [1 2 3 4 5 6 7 8 9 10 11 12 13 14]}
                 Values: [14x14 double]
                 Method: 'linear'
    ExtrapolationMethod: 'linear'

内挿をクエリして、結果をプロットします。

[xq,yq] = ndgrid(1:0.2:n);
Vq = F(xq,yq);
surf(xq',yq',Vq)

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

粗くサンプリングされたデータを、0.5 間隔のフル グリッドを使用して内挿します。

サンプル点を、フル グリッドとして、両方の次元に範囲 [1, 10] で定義します。

[X,Y] = ndgrid(1:10,1:10);

グリッド点で f(x,y)=x2+y2 をサンプリングします。

V = X.^2 + Y.^2;

3 次内挿を指定して内挿を作成します。

F = griddedInterpolant(X,Y,V,'cubic');

クエリ点のフル グリッドを 0.5 間隔で定義し、それらの点で内挿を評価します。次に、結果をプロットします。

[Xq,Yq] = ndgrid(1:0.5:10,1:0.5:10);
Vq = F(Xq,Yq);
mesh(Xq,Yq,Vq);

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

外挿法の 'pchip''nearest' を使用して、F の領域の外側で内挿をクエリした際の結果を比較します。

内挿法に 'pchip' を指定し、外挿法に 'nearest' を指定して、内挿を作成します。

x = [1 2 3 4 5];
v = [12 16 31 10 6];
F = griddedInterpolant(x,v,'pchip','nearest')
F = 
  griddedInterpolant with properties:

            GridVectors: {[1 2 3 4 5]}
                 Values: [12 16 31 10 6]
                 Method: 'pchip'
    ExtrapolationMethod: 'nearest'

内挿をクエリし、F の領域の外側の点を含めます。

xq = 0:0.1:6;
vq = F(xq);
figure
plot(x,v,'o',xq,vq,'-b');
legend ('v','vq')

Figure contains an axes object. The axes object contains 2 objects of type line. One or more of the lines displays its values using only markers These objects represent v, vq.

同じ点で再び内挿をクエリしますが、今回は 'pchip' 外挿法を使用します。

F.ExtrapolationMethod = 'pchip';
figure
vq = F(xq);
plot(x,v,'o',xq,vq,'-b');
legend ('v','vq')

Figure contains an axes object. The axes object contains 2 objects of type line. One or more of the lines displays its values using only markers These objects represent v, vq.

griddedInterpolant を使用して、同じクエリ点で 3 つの異なる値セットを内挿します。

-5X5 および -3Y3 のサンプル点のグリッドを作成します。

gx = -5:5;
gy = -3:3;
[X,Y] = ndgrid(gx,gy);

クエリ点で 3 つの異なる関数を評価し、値を 3 次元配列に連結します。V のサイズは、最初の 2 次元においては X および Y グリッドと同じですが、追加の次元のサイズは各サンプル点に関連付けられた値の数 (この場合は 3) を反映します。

f1 = X.^2 + Y.^2;
f2 = X.^3 + Y.^3;
f3 = X.^4 + Y.^4;
V = cat(3,f1,f2,f3);

サンプル点および関連付けられた値を使用して内挿を作成します。

F = griddedInterpolant(X,Y,V);

クエリ点のグリッドをサンプル点と比べてより細かいメッシュ サイズで作成します。

qx = -5:0.4:5;
qy = -3:0.4:3;
[XQ,YQ] = ndgrid(qx,qy);

クエリ点で 3 つすべての値セットを内挿します。

VQ = F(XQ,YQ);

元のデータと内挿結果を比較します。

tiledlayout(3,2)
nexttile
surf(X,Y,f1)
title('f1')
nexttile
surf(XQ,YQ,VQ(:,:,1))
title('Interpolated f1')
nexttile
surf(X,Y,f2)
title('f2')
nexttile
surf(XQ,YQ,VQ(:,:,2))
title('Interpolated f2')
nexttile
surf(X,Y,f3)
title('f3')
nexttile
surf(XQ,YQ,VQ(:,:,3))
title('Interpolated f3')

Figure contains 6 axes objects. Axes object 1 with title f1 contains an object of type surface. Axes object 2 with title Interpolated f1 contains an object of type surface. Axes object 3 with title f2 contains an object of type surface. Axes object 4 with title Interpolated f2 contains an object of type surface. Axes object 5 with title f3 contains an object of type surface. Axes object 6 with title Interpolated f3 contains an object of type surface.

詳細

すべて展開する

ヒント

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

    % Fast to create interpolant F and evaluate multiple times
    F = griddedInterpolant(X1,X2,V)
    v1 = F(Xq1)
    v2 = F(Xq2)
    
    % Slower to compute interpolations separately using interp2
    v1 = interp2(X1,X2,V,Xq1)
    v2 = interp2(X1,X2,V,Xq2)
    

拡張機能

バージョン履歴

R2011b で導入

すべて展開する