ドキュメンテーション

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

pchip

区分的 3 次エルミート内挿多項式 (PCHIP)

構文

p = pchip(x,y,xq)
pp = pchip(x,y)

説明

p = pchip(x,y,xq) は、xq のクエリ点に対応する内挿値のベクトル p を返します。p の値は、xy形状維持区分的 3 次内挿により決定されます。

pp = pchip(x,y) は、ppval とスプライン ユーティリティ unmkpp で使用する区分的多項式構造体を返します。

すべて折りたたむ

2 つの異なる関数に対して splinepchip により生成された内挿結果を比較します。

x の値のベクトル、点 y での関数値、クエリ点 xq を作成します。splinepchip の両方を使用して、クエリ点での内挿を計算します。比較のため、クエリ点での内挿関数値をプロットします。

x = -3:3; 
y = [-1 -1 -1 0 1 1 1]; 
xq1 = -3:.01:3;
p = pchip(x,y,xq1);
s = spline(x,y,xq1);
plot(x,y,'o',xq1,p,'-',xq1,s,'-.')
legend('Sample Points','pchip','spline','Location','SouthEast')

この場合、pchip はサンプル点間で大幅に変動していないため、こちらの方が適しています。

振動サンプル関数を使用して、2 回目の比較を行います。

x = 0:25;
y = besselj(1,x);
xq2 = 0:0.01:25;
p = pchip(x,y,xq2);
s = spline(x,y,xq2);
plot(x,y,'o',xq2,p,'-',xq2,s,'-.')
legend('Sample Points','pchip','spline')

基になる関数が振動関数である場合、pchip よりも spline の方が点の間の動きをより良好にキャプチャします。

x の値と関数値 y のベクトルを作成し、pchip を使用して区分的多項式構造体を作成します。

x = -5:5;
y = [1 1 1 1 0 0 1 2 2 2 2];
p = pchip(x,y);

この構造体を ppval で使用し、複数のクエリ点で内挿を評価します。結果をプロットします。

xq = -5:0.2:5;
pp = ppval(p,xq);
plot(x,y,'o',xq,pp,'-.')
ylim([-0.2 2.2])

入力引数

すべて折りたたむ

サンプル点。ベクトルとして指定します。ベクトル x は、データ y が与えられる時点を指定します。x の要素は一意でなければなりません。

データ型: single | double

サンプル点での関数値。数値ベクトル、行列または配列として指定します。xy は同じ長さでなければなりません。

y が行列または配列の場合、最後の次元の値 y(:,...,:,j)x に一致させる値として使用されます。この場合、y の最後の次元は x と同じ長さでなければなりません。

データ型: single | double

クエリ点。ベクトルとして指定します。xq で指定された点は、pchip により計算された内挿関数値 p の x 座標です。

データ型: single | double

出力引数

すべて折りたたむ

クエリ点における内挿値。ベクトル、行列または配列として返されます。p のサイズは入力のサイズによって異なります。

  • y がベクトルの場合、pxq と同じ長さのベクトルです。

  • y に 2 以上の次元があり、これを n で表すと、p のサイズは [size(y,1) size(y,2) ... size(y,n-1) length(xq)] となります。たとえば、y が行列の場合、p のサイズは [size(y,1) length(xq)] となります。

区分的多項式。構造体として返されます。この構造体を関数 ppval とあわせて使用し、1 つ以上のクエリ点で内挿多項式を評価します。これらの構造体には次のフィールドがあります。

フィールド説明
form

"区分的多項式" の場合 'pp'

breaks

長さ L+1 のベクトル。このベクトルには厳密に増加する要素があり、 L 個の間隔のそれぞれについて開始と終了を表しています。

coefs

Lk 列の行列。各行 coefs(i,:) は、i 番目の区間 [breaks(i),breaks(i+1)] における k 次多項式の局所的な係数を含みます。

pieces

区分の数 (L)

order

多項式の次数

dim

ターゲットの次元

coefs の多項式係数は各区間の局所的な係数であるため、従来の多項方程式で係数を使用するには対応する節点区間の下限端点を減算しなければなりません。言い換えれば、区間 [x1,x2] の係数 [a,b,c,d] について、対応する多項式は次のようになります。

f(x)=a(xx1)3+b(xx1)2+c(xx1)+d.

詳細

すべて折りたたむ

形状維持区分的 3 次内挿

pchip は、次のプロパティを使用して区分的 3 次多項式 P(x) を内挿します。

  • 各部分区間 xkxxk+1 での多項式 P(x) は、内挿点に指定された導関数 (勾配) をもつ特定のデータ点では、3 次エルミート内挿多項式です。

  • P(x) は y を内挿します。すなわち P(xj)=yj が成立します。1 次導関数 dPdx は連続しています。2 次導関数 d2Pdx2 は連続しない可能性が高いため、xj でのジャンプが可能です。

  • 3 次内挿 P(x) は形状維持内挿です。xj での勾配は、P(x) がデータの形状や単調性を保持するように選択されます。したがって、データが単調な区間では P(x) も単調になり、データが局所的な極値をもつ点では P(x) も局所的な極値をもちます。

メモ:

y が行列の場合、P(x) は y の各行についてこれらのプロパティを満たします。

ヒント

  • 関数 pchipP(x) を構築する方法とほぼ同じ方法で、関数 splineS(x) を構築します。ただし、関数 splinexj で異なる勾配、つまり S(x) も連続になる勾配を選択します。この差異により、いくつかの影響が生じます。

    • spline では、S(x) が連続になるような、より平滑な結果が生成されます。

    • 関数 spline は、データが平滑関数の値の場合、より正確になります。

    • 関数 pchip は、データが平滑でない場合、オーバーシュートが生じず、振動が少なくなります。

    • 関数 pchip は、セットアップが簡単です。

    • 2 つとも計算量が多くなります。

参照

[1] Fritsch, F. N. and R. E. Carlson. "Monotone Piecewise Cubic Interpolation." SIAM Journal on Numerical Analysis. Vol. 17, 1980, pp.238–246.

[2] Kahaner, David, Cleve Moler, Stephen Nash. Numerical Methods and Software. Upper Saddle River, NJ: Prentice Hall, 1988.

拡張機能

参考

| |

R2006a より前に導入