ドキュメンテーション

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

interpn

ndgrid 形式の 1 次元、2 次元、3 次元、N 次元グリッド データの内挿

今後のリリースでは、interpn はサンプルとクエリのグリッドに対して行と列のベクトルの混在した組み合わせは受け入れません。詳細およびコードの更新の推奨事項については、「Functionality being removed or changed」を参照してください。

構文

  • Vq = interpn(X1,X2,...,Xn,V,Xq1,Xq2,...,Xqn)
  • Vq = interpn(V,Xq1,Xq2,...,Xqn)
  • Vq = interpn(V)
  • Vq = interpn(V,k)
  • Vq = interpn(___,method)
  • Vq = interpn(___,method,extrapval)

説明

Vq = interpn(X1,X2,...,Xn,V,Xq1,Xq2,...,Xqn) は、線形内挿を使用して、特定のクエリ点における n 個の変数の関数の内挿値を返します。その結果は、関数の元のサンプリングを通過します。X1,X2,...,Xn には、サンプル点の座標が含まれます。V には、各サンプル点の対応する関数値が含まれます。Xq1,Xq2,...,Xqn には、クエリ点の座標が含まれます。

Vq = interpn(V,Xq1,Xq2,...,Xqn) は、サンプル点の既定のグリッドを想定します。既定のグリッドは、各次元の点 (1、2、3、...n) で構成されます。ni の値は、V における次元の長さです。この構文は、点同士の絶対距離を考慮せず、メモリを節約する場合に使用します。

Vq = interpn(V) は、各次元で 1 回ずつサンプル値の間の区間を分割して形成される調整後のグリッドに、内挿値を返します。

Vq = interpn(V,k) は、各次元で区間の分割を k 回繰り返して形成される調整後のグリッドに、内挿値を返します。

Vq = interpn(___,method) は、前述の構文のいずれかで渡すことができる、オプションの後続入力引数を指定します。method は、'linear''nearest''pchip''cubic' または 'spline' のいずれかとなり、代替の内挿法を指定します。既定の手法は、'linear' です。

Vq = interpn(___,method,extrapval) は、サンプル点の領域の外側に位置するすべてのクエリに割り当てられたスカラー値 extrapval も指定します。

サンプル点の領域の外側でクエリの extrapval 引数を省略すると、method 引数 interpn は、次のいずれかを返します。

  • 'spline' メソッドの外挿値

  • 'spline' 以外の内挿法の NaN

すべて折りたたむ

サンプル点と値を定義します。

x = [1 2 3 4 5];
v = [12 16 31 10 6];

クエリ点 xq を定義し、内挿を実行します。

xq = (1:0.1:5);
vq = interpn(x,v,xq,'cubic');

結果をプロットします。

figure
plot(x,v,'o',xq,vq,'-');
legend('Samples','Cubic Interpolation');

グリッド点のセットと対応するサンプル値を作成します。

[X1,X2] = ndgrid((-5:1:5));
R = sqrt(X1.^2 + X2.^2)+ eps;
V = sin(R)./(R);

ntimes=1 を使用して、より細かいグリッドに内挿します。

Vq = interpn(V,'cubic');
mesh(Vq);

グリッド ベクトル x1x2 および x3 を作成します。これらのベクトルは、V 内の値に関連付けられた点を定義します。

x1 = 1:100;
x2 = (1:50)';
x3 = 1:30;

サンプル値が 100 x 50 x 30 の乱数配列 V となるように、サンプル値を定義します。配列を作成するには、関数 gallery を使用します。

V = gallery('uniformdata',100,50,30,0);

x1x2 および x3 の領域の外側にある 3 つの点で V を評価します。extrapval = -1 を指定します。

xq1 = [0 0 0];
xq2 = [0 0 51];
xq3 = [0 101 102];
vq = interpn(x1,x2,x3,V,xq1,xq2,xq3,'linear',-1)
vq =

    -1    -1    -1

3 つの点はすべて、x1x2 および x3 の領域の外側にあるため、-1 と評価されます。

$f = te^{-x^{2}-y^{2}-z^{2}}$ を表す無名関数を定義します。

f = @(x,y,z,t) t.*exp(-x.^2 - y.^2 - z.^2);

$R^4$ で点のグリッドを作成します。次に、この関数を介して点を渡し、サンプル値 V を作成します。

[x,y,z,t] = ndgrid(-1:0.2:1,-1:0.2:1,-1:0.2:1,0:2:10);
V = f(x,y,z,t);

ここでクエリ グリッドを作成します。

[xq,yq,zq,tq] = ...
ndgrid(-1:0.05:1,-1:0.08:1,-1:0.05:1,0:0.5:10);

クエリ点で V を内挿します。

Vq = interpn(x,y,z,t,V,xq,yq,zq,tq);

ムービーを作成して、結果を表示します。

figure('renderer','zbuffer');
nframes = size(tq, 4);
for j = 1:nframes
   slice(yq(:,:,:,j),xq(:,:,:,j),zq(:,:,:,j),...
         Vq(:,:,:,j),0,0,0);
   caxis([0 10]);
   M(j) = getframe;
end
movie(M);

入力引数

すべて折りたたむ

サンプル グリッド点。実数配列またはベクトルとして指定します。

  • X1,X2,...,Xn が配列の場合、(ndgrid 形式の) フル グリッドの座標が含まれます。X1,X2,...,Xn 配列を一緒に作成するには、関数 ndgrid を使用します。これらの配列は同じサイズでなければなりません。

  • X1,X2,...,Xn がベクトルの場合、これらは グリッド ベクトルとして扱われます。これらのベクトルの値は、厳密に単調で増加しなければなりません。

例: [X1,X2,X3] = ndgrid(1:30,-10:10,1:5)

データ型: single | double

サンプル値。実数配列または複素数配列として指定します。V のサイズ要件は、X1,X2,...,Xn のサイズによって異なります。

  • X1,X2,...,Xn が (ndgrid 形式の) フル グリッドを表す配列の場合、V のサイズは任意の配列 X1,X2,...,Xn と同じサイズになります。

  • X1,X2,...,Xn がグリッド ベクトルの場合、V は配列となり、その i 番目の次元は、グリッド ベクトル Xi と同じ長さになります。ここで i= 1,2,...n です。

例: rand(10,5,3,2)

データ型: single | double
複素数のサポート: はい

クエリ点。実数のスカラー、ベクトルまたは配列として指定します。

  • Xq1,Xq2,...,Xqn がスカラーの場合、Rn における単一のクエリ点の座標になります。

  • Xq1,Xq2,...,Xqn がそれぞれの向きが異なるベクトルである場合、Xq1,Xq2,...,Xqn は、Rn におけるグリッド ベクトルとして扱われます。

  • Xq1,Xq2,...,Xqn が同じサイズと向きをもつベクトルの場合、Xq1,Xq2,...,Xqn は、Rn における散布点として扱われます。

  • Xq1,Xq2,...,Xqn が同じサイズの配列の場合、Rn における、クエリ点 (ndgrid 形式) または散布点のフル グリッドを表します。

例: [X1,X2,X3,X4] = ndgrid(1:10,1:5,7:9,10:11)

データ型: single | double

調整係数。実数の非負のスカラー整数として指定します。この値は、各次元で調整されるグリッドの区間を分割する繰り返し回数を指定します。この操作により、サンプル値の間に、2^k-1 個の内挿点が形成されます。

k0 の場合、VqV と同じになります。

interpn(V,1)interpn(V) と同じ結果になります。

次の図は、R2 における k=2 を示しています。赤色の内挿値が 72、黒のサンプル値が 9 つあります。

例: interpn(V,2)

データ型: single | double

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

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

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

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

  • 中程度のメモリで最速の計算が必要

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

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

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

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

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

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

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

X1,X2,...,Xn の領域の外側の関数値。実数または複素数のスカラーとして指定します。interpn は、X1,X2,...,Xn の領域の外側のすべての点に対して、この定数値を返します。

例: 5

例: 5+1i

データ型: single | double
複素数のサポート: はい

出力引数

すべて折りたたむ

内挿値。実数または複素数のスカラー、ベクトルまたは配列として返されます。Vq のサイズと形状は、使用する構文、場合によっては入力引数のサイズと値によって異なることがあります。

構文特殊な条件Vq のサイズ
interpn(X1,...,Xn,V,Xq1,...,Xqn)
interpn(V,Xq1,...,Xqn)
と、method または extrapval を含む上記構文のバリエーション
Xq1,...,Xqn はスカラースカラーXq1,...,Xqn をスカラーとして渡した場合は size(Vq) = [1 1]
上記に同じXq1,...,Xqn は、サイズと向きが同じベクトルXq1,...,Xqn と同じサイズと向きをもつベクトル3 次元では、
size(Xq1) = [100 1]
かつ size(Xq2) = [100 1]
かつ size(Xq3) = [100 1] の場合、
size(Vq) = [100 1]
上記に同じXq1,...,Xqn は、向きが混在するベクトルsize(Vq) = [length(Xq1),...,length(Xqn)]3 次元では、
size(Xq1) = [1 100]
かつ size(Xq2) = [50 1]
かつ size(Xq3) = [1 5] の場合、
size(Vq) = [100 50 5]
上記に同じXq1,...,Xqn は、同じサイズの配列Xq1,...,Xqn と同じサイズの配列3 次元では、
size(Xq1) = [50 25]
かつ size(Xq2) = [50 25]
かつ size(Xq3) = [50 25] の場合、
size(Vq) = [50 25]
interpn(V,k)
と、method または extrapval を含む上記構文のバリエーション
なし

i 番目の次元の長さが
2^k * (size(V,i)-1)+1 である配列

3 次元では、
size(V) = [10 12 5]
かつ k = 3 の場合
size(Vq) = [73 89 33]

詳細

すべて折りたたむ

厳密に単調

反転せずに、常に増加または減少する一連の値。たとえば、シーケンス a = [2 4 6 8] は厳密に単調で増加します。シーケンス b = [2 4 4 6 8] は、b(2)b(3) の間の値に変化がないため、厳密に単調ではありません。シーケンス c = [2 4 6 8 6] には c(4)c(5) の間に反転が含まれているため、単調ではありません。

(ndgrid 形式の) フル グリッド

interpn の場合、フル グリッドは、n 個の配列 X1,X2,...,Xn で構成されます。その要素は Rn における点のグリッドを表しています。i 番目の配列 Xi には、厳密に単調で増加し、i 番目の次元に沿って急速に変化する値が含まれます。

関数 ndgrid を使用して、interpn に渡すことができるフル グリッドを作成します。たとえば、次のコードは 1 ≤ X1 ≤ 3、1≤ X2 ≤ 4 の領域に対する、R2 内のフル グリッドを作成します。

[X1,X2] = ndgrid(-1:3,(1:4))
X1 =

    -1    -1    -1    -1
     0     0     0     0
     1     1     1     1
     2     2     2     2
     3     3     3     3


X2 =

     1     2     3     4
     1     2     3     4
     1     2     3     4
     1     2     3     4
     1     2     3     4

グリッド ベクトル

interpn の場合、グリッド ベクトルは、Rn におけるグリッド上の点を定義する、向きが混在する n 個のベクトルから構成されます。

たとえば次のコードは、1 ≤ x1 ≤ 3、4 ≤ x2 ≤ 5、かつ 6 ≤x3≤ 8 の領域に対する、R3 内のグリッド ベクトルを作成します。

x1 = 1:3;
x2 = (4:5)';
x3 = 6:8;

散布点

interpn の場合、散布点は、Rn に散在する点の集合を定義する n 個の配列またはベクトル (Xq1,Xq2,...,Xqn) から構成されます。i 番目の配列 Xi には、i 番目の次元の座標が含まれています。

たとえば次のコードは、R3 における (1, 19, 10)、(6, 40, 1)、(15, 33, 22) および (0, 61, 13) の点を指定します。

Xq1 = [1 6; 15 0];
Xq2 = [19 40; 33 61];
Xq3 = [10 1; 22 13];

R2006a より前に導入

この情報は役に立ちましたか?