29.1 One-dimensional Interpolatio

Last-modified: 2025-03-08 (土) 17:00:15

29.1 1次元補間

Octave は 1 次元補間のためのいくつかの方法をサポートしており、そのほとんどはこのセクションで説明されています。 多項式補間 と散在データの補間では追加の方法について説明します。

: yi = interp1 (x, y, xi)
: yi = interp1 (y, xi)
: yi = interp1 (…, method)
: yi = interp1 (…, extrap)
: yi = interp1 (…, "left")
: yi = interp1 (…, "right")
: pp = interp1 (…, "pp")
1次元補間。

入力データを補間して、点 xiにおけるyiの値を決定します。指定されていない場合、x はy ( )のインデックスと見なされます。 yが行列または N 次元配列の場合、補間はyの各列に対して実行されます。 1:length (y)

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

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

"previous"
前の隣接ノードを返します。

"next"
次の隣人を返します。

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

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

"cubic"
3次補間( と同じ"pchip")。

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

上記のメソッドの先頭に '*' を追加すると、xが均等間隔で、 と のみ が参照されているとinterp1 想定されます。通常、この方法の方が高速で、遅くなることはありません。デフォルトのメソッドは です。 x(1)x(2)"linear"

extrapが文字列 の場合、現在の方法"extrap"を使用してエンドポイントを超える値を外挿します。extrap が数値の場合、エンドポイントを超える値をその数値に置き換えます。指定されていない場合、extrap はデフォルトで になります。 NA

文字列引数"pp"が指定されている場合は、xi は提供されず、interp1区分多項式オブジェクトが返されます。このオブジェクトは、後でppval補間を評価するために使用できます。 という同等性が存在します。 ppval (interp1 (x, y, method, "pp"), xi) == interp1 (x, y, xi, method, "extrap")

x内の重複ポイントは不連続補間を指定します。同じ値を持つ連続ポイントは最大 2 つまでです。x が増加する場合、デフォルトの不連続補間は右連続です。x が減少する場合、デフォルトの不連続補間は左連続です。補間の連続条件は、オプション"left"またはを使用して"right"それぞれ左連続または右連続補間を選択することで指定できます。不連続補間は、"nearest"および "linear"メソッドでのみ許可されます。それ以外の場合は、x値が一意である必要があります。

の使用例interp1は

xf = [0:0.05:10];
yf = sin (2*pi*xf/5);
xp = [0:10];
yp = sin (2*pi*xp/5);
lin = interp1 (xp, yp, xf);
near = interp1 (xp, yp, xf, "nearest");
pch = interp1 (xp, yp, xf, "pchip");
spl = interp1 (xp, yp, xf, "spline");
plot (xf,yf,"r", xf,near,"g", xf,lin,"b", xf,pch,"c", xf,spl,"m",
      xp、yp、"r*");

凡例 ("オリジナル"、"最も近い"、"線形"、"pchip"、"スプライン");
参照: pchip、spline、interpft、interp2、interp3、interpn。

さまざまな補間方法には、いくつかの重要な違いがあります。この"spline"方法では、補間された値の 1 次導関数と 2 次導関数の両方が連続導関数を持つことが強制されますが、他の方法ではそうではありません。つまり、この "spline"方法の結果は一般的に滑らかになります。補間される関数が実際に滑らかな場合は、"spline"優れた結果が得られます。ただし、評価される関数が何らかの形で不連続である場合は、"pchip"補間の方がより良い結果が得られる可能性があります。

これはコードで実証できる

t = -2:2;
dt = 1;
ti =-2:0.025:2;
dti = 0.025;
y = sign (t);
ys = interp1 (t,y,ti,"spline");
yp = interp1 (t,y,ti,"pchip");
ddys = diff (diff (ys)./dti) ./ dti;
ddyp = diff (diff (yp)./dti) ./ dti;

図(1)
プロット (ti,ys,"r-", ti,yp,"g-");
凡例 ("スプライン", "pchip", 4);
図(2)
プロット (ti,ddys,"r+", ti,ddyp,"g*");
凡例 ("スプライン", "pchip");
その結果は図29.1と 図29.2に示されています。

interpderiv1.png
図29.1:ステップ関数の補間法"pchip"の比較"spline"

interpderiv2.png
図29.2: ステップ関数の2次導関数"pchip"と補間法の比較"spline"

フーリエ補間は、信号を周波数領域に変換し、ゼロで埋めてから時間領域に再変換する再サンプリング手法です。

: y = interpft (x, n)
: y = interpft (x, n, dim)
フーリエ補間。

xがベクトルの場合、 x はn 個のポイントで再サンプリングされます。 xのデータは等間隔であると想定されます。xが行列または N 次元配列の場合、補間はxの各列に対して実行されます 。

dimが指定されている場合は、次元dimに沿って補間します。

interpft補間関数は周期的であると仮定し、補間の終点について仮定が立てられます。

See also: interp1.

フーリエ補間には2つの大きな制限があります。まず、関数信号は周期的であると想定されるため、非周期的な信号はエッジで適切に表現されません。次に、信号とその補間の両方が等間隔の点でサンプリングされる必要があります。の使用例はinterpft次のとおりです。

t = 0 : 0.3 : pi; dt = t(2)-t(1);
n = length (t); k = 100;
ti = t(1) + [0 : k-1]*dt*n/k;
y = sin (4*t + 0.3) .* cos (3*t - 0.1);
yp = sin (4*ti + 0.3) .* cos (3*ti - 0.1);
plot (ti, yp, "g", ti, interp1 (t, y, ti, "spline"), "b", ...
     ti、interpft(y、k)、"c"、t、y、"r+");

legend ("sin(4t+0.3)cos(3t-0.1)", "spline", "interpft", "data");
これは、図29.3に示すように、非周期関数に対するフーリエ補間の挙動が悪いことを示している。

interpft.png
図29.3:非周期データにおけるinterp1との比較interpft

さらに、関数の基盤となるサポート関数splineとを直接呼び出すこともできます。 lookupinterp1

: pp = spline (x, y)
: yi = spline (x, y, xi)
点xとyの 3 次スプライン補間を返します。

2 つの引数で呼び出されると、特定のポイントで多項式を評価するため に使用できる区分多項式ppを返します。ppval

3 番目の入力引数で呼び出されると、点xisplineにおけるスプラインを評価します。3 番目の呼び出し形式 は と同等です 。 spline (x, y, xi)ppval (spline (x, y), xi)

変数x は長さnのベクトルでなければなりません。

y はベクトルまたは配列のいずれかになります。yがベクトルの場合、長さはnまたはでなければなりません。 yn + 2の長さが nの場合、終了条件が使用されます。 yの長さが の場合、ベクトルyの最初と最後の値は、エンドポイントにおける 3 次スプラインの 1 次導関数の値になります。 "not-a-knot"n + 2

yが配列の場合、 yのサイズは または の 形式である必要があります 。配列は内部的に行列に再形成され、先頭の次元は で指定され 、この行列の各行は個別に扱われます。これは の正反対ですが、 MATLAB との互換性のために行われることに注意してください 。 [s1, s2, …, sk, n][s1, s2, …, sk, n + 2]s1 * s2 * … *skinterp1

See also: pchip, ppval, mkpp, unmkpp.