29.2 Multi-dimensional Interpolation

Last-modified: 2025-03-08 (土) 17:02:45

29.2 多次元補間

Octave には、同様の機能を持つ 3 つの多次元補間関数があります。Delaunay テッセレーションを使用する方法については、「散在データの補間」で説明されています。.

: zi = interp2 (x, y, z, xi, yi)
: zi = interp2 (z, xi, yi)
: zi = interp2 (z, n)
: zi = interp2 (z)
: zi = interp2 (…, method)
: zi = interp2 (…, method, extrap)
2次元補間。

数値参照データx、y、zを補間して、座標xi、yiにおけるziを決定します 。参照データ x、y は、によって返されるような行列である可能性があり、その場合、 x、y、およびzのサイズは等しくなければなりません。x、 y がグリッドを記述するベクトルである 場合は 、および です 。どちらの場合も、入力データは厳密に単調である必要があります。 meshgridlength (x) == columns (z)length (y) == rows (z)

x、y、および単一の参照データ行列 zなしで呼び出された場合は、2D 領域 が想定されます。グリッドが規則的で、ポイント間の距離が重要でない場合は、これによりメモリが節約されます。 x = 1:columns (z), y = 1:rows (z)

単一の参照データ行列zと改良値nで呼び出された場合、元の各間隔がn回再帰的に細分化されたグリッド上で補間を実行します。これにより、 元のグリッドのすべての間隔に追加のポイントが生成されます。nを省略すると、値 1 が使用されます。たとえば、間隔 [0,1] は、[0, 1/4, 1/2, 3/4, 1] のポイントを持つ改良された間隔になります。 2^n-1n==2

補間方法は次のいずれかです。

"nearest"
最も近い近傍を返します。

"linear"(デフォルト)
最も近い近傍からの線形補間。

"pchip"
区分的 3 次エルミート補間多項式 - 滑らかな 1 次導関数による形状保存補間。

"cubic"
畳み込みカーネル関数を使用した 3 次補間 - 滑らかな 1 次導関数を持つ 3 次法。

"spline"
3 次スプライン補間 - 曲線全体にわたって滑らかな 1 次導関数と 2 次導関数。

extrapはスカラー数です。端点を超える値をextrapに置き換えます。extrap を使用する場合は、 method も指定する必要があることに注意してください。extrapが省略され、methodがの 場合"spline"、 の外挿値が"spline"使用されます。それ以外の場合、他のメソッドのデフォルトのextrap値 は です。 "NA"

See also: interp1, interp3, interpn, meshgrid.

: vi = interp3 (x, y, z, v, xi, yi, zi)
: vi = interp3 (v, xi, yi, zi)
: vi = interp3 (v, n)
: vi = interp3 (v)
: vi = interp3 (…, method)
: vi = interp3 (…, method, extrapval)
3次元補間。

数値参照データx、y、z、vを補間して、座標xi、yi、ziにおけるviを決定します。参照データx、y、z は、 によって返されるような行列である可能性があり 、その場合、 x、y、z、および vのサイズは等しくなければなりません。x、y、z が立方格子を記述するベクトルである場合、 、 、および です 。いずれの場合も、入力データは厳密に単調でなければなりません。 meshgridlength (x) == columns (v)length (y) == rows (v)length (z) == size (v, 3)

x、y、zを指定せずに、単一の参照データ行列vのみを指定して呼び出された場合は、3D 領域 が想定されます。グリッドが規則的で、ポイント間の距離が重要でない場合は、メモリを節約できます。 x = 1:columns (v), y = 1:rows (v), z = 1:size (v, 3)

単一の参照データ行列vと改良値nで呼び出された場合、元の各間隔がn回再帰的に細分化された 3D グリッド上で補間を実行します。これにより、元のグリッドのすべての間隔に追加のポイントが生成されます。nを省略すると、値 1 が使用されます。たとえば、間隔 [0,1] は、[0, 1/4, 1/2, 3/4, 1] のポイントを持つ改良された間隔になります。 2^n-1n==2

補間方法は次のいずれかです。

"nearest"
最も近い近傍を返します。

"linear"(デフォルト)
最も近い近傍からの線形補間。

"cubic"
区分的 3 次エルミート補間多項式 - 滑らかな 1 次導関数による形状保存補間 (まだ実装されていません)。

"spline"
3 次スプライン補間 - 曲線全体にわたって滑らかな 1 次導関数と 2 次導関数。

extrapvalはスカラー数です。エンドポイントを超える値をextrapvalに置き換えます。extrapval を使用する場合は、 method も指定する必要があることに注意してください。extrapvalが省略 され、 methodがの場合"spline"、 の外挿値が "spline"使用されます。それ以外の場合、他のメソッドのデフォルトのextrapval値は です。 "NA"
See also: interp1, interp2, interpn, meshgrid.

: vi = interpn (x1, x2, …, v, y1, y2, …)
: vi = interpn (v, y1, y2, …)
: vi = interpn (v, m)
: vi = interpn (v)
: vi = interpn (…, method)
: vi = interpn (…, method, extrapval)
n次元の補間を実行します。ここで、 nは少なくとも 2 です。

n次元の数値配列vの各要素は、パラメータx1、x2、…、 xnによって指定された場所の値を表します。パラメータx1、x2、…、xnは、形式の配列vと同じサイズのn次元配列か、ベクトルのいずれかです 。 "ndgrid"

パラメータy1、y2、…、yn は、配列viが補間されるポイントを表します。これらは、同じ長さと方向のベクトルである場合があり、その場合は散在するポイントの座標として解釈されます。方向や長さが異なるベクトルの場合は、形式でグリッドを形成するために使用されます。これらは、同じサイズのn"ndgrid"次元配列にすることもできます 。

x1、…、xnが省略された場合は、 などとみなされます。m が指定されている場合、補間により各補間点の中間に点が追加されます。このプロセスはm回実行されます。vのみが指定されている場合、m はとみなされます。 x1 = 1 : size (v, 1)1

補間方法は次のいずれかです。

"nearest"
最も近い近傍を返します。

"linear"(デフォルト)
最も近い近傍からの線形補間。

"pchip"
区分的 3 次エルミート補間多項式 - 滑らかな 1 次導関数による形状保存補間 (まだ実装されていません)。

"cubic"
"pchip"3次補間( [まだ実装されていません] と同じ)。

"spline"
3 次スプライン補間 - 曲線全体にわたって滑らかな 1 次導関数と 2 次導関数。

デフォルトの方法は です"linear"。

extrapvalはスカラー数です。エンドポイントを超える値をextrapvalに置き換えます。extrapval を使用する場合は、 method も指定する必要があることに注意してください。extrapvalが省略 され、 methodがの場合"spline"、 の外挿値が "spline"使用されます。それ以外の場合、他のメソッドのデフォルトのextrapval値は です。 NA

参照: interp1、interp2、interp3、spline、ndgrid。

interpnと他の 2 つの多次元補間関数の大きな違いは、次元の扱い方です。interp2との場合interp3、y 軸は行列の列と見なされ、x 軸は配列の行に対応します。Octave は列優先順に配列をインデックスするため、配列の最初の次元は列であり、したがってinterpn'x' 次元と 'y' 次元が逆転します。次の例を考えてみましょう。

x = y = z = -1:1;
f = @(x,y,z) x.^2 - y - z.^2;
[xx, yy, zz] = meshgrid (x, y, z);
v = f (xx,yy,zz);
xi = yi = zi = -1:0.1:1;
[xxi, yyi, zzi] = meshgrid (xi, yi, zi);
vi = interp3 (x, y, z, v, xxi, yyi, zzi, "spline");
[xxi, yyi, zzi] = ndgrid (xi, yi, zi);
vi2 = interpn (x, y, z, v, xxi, yyi, zzi, "spline");
mesh (zi, yi, squeeze (vi2(1,:,:)));

ここでvi、 とvi2は同一です。次元の反転は、それぞれmeshgridとndgrid関数で処理されます。このコードの結果は、図 29.4に示されています。

interpn.png
Figure 29.4: Demonstration of the use of interpn