ドキュメンテーション

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

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

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

データ型: 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 次元配列から成るフル グリッドとして指定する場合、VX1,X2,...,Xn のいずれか 1 つと同じサイズでなければなりません。

  • サンプル点をグリッド ベクトルとして指定する場合は、size(V) = [length(xg1) length(xg2) ... length(xgn)] です。

データ型: 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 内の値のグリッド点 (位置) を指定します。グリッド点は一意でなければなりません。

F のプロパティのインデックスベースの編集はサポートされていません。代わりに、必要に応じて配列 GridVectors または Values を完全に置き換えます。

データ型: cell

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

F のプロパティのインデックスベースの編集はサポートされていません。代わりに、必要に応じて配列 GridVectors または Values を完全に置き換えます。

データ型: 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)
Vq = F(xq1,xq2,...,xqn)
Vq = F(Xq1,Xq2,...,Xqn)
Vq = F({xgq1,xgq2,...,xgqn})

  • 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')

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)

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

F = griddedInterpolant(x,y,z);

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

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

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

  • 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)

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

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

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

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

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

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

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

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

粗くサンプリングされたデータを、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);

外挿法の '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')

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

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

詳細

すべて展開する

ヒント

  • 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 で導入