ドキュメンテーション センター

  • 評価版
  • 製品アップデート

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

spline

3 次元スプライン データ内挿

構文

yy = spline(x,Y,xx)
pp = spline(x,Y)

説明

yy = spline(x,Y,xx) は、3 次スプライン内挿を使用して yy (内挿 xx の値にある基礎関数 Y の値) を検索します。内挿では、独立変数は x で定義されるブレークポイントのある Y の最終次元であることを前提にしています。

xxyy のサイズは、以下のように関係します。

  • Y がスカラーまたはベクトルの場合、yyxx と同じサイズである必要があります。

  • Y がベクトルでない配列の場合は以下のようになります。

    • xx がスカラーまたはベクトルの場合、size(yy)[d1, d2, ..., dk, length(xx)] と等しくなります。

    • xx がサイズ [m1,m2,...,mj] の配列の場合、size(yy)[d1,d2,...,dk,m1,m2,...,mj] と等しくなります。

pp = spline(x,Y) は、後で ppval とスプライン ユーティリティ unmkpp で使用できる 3 次元スプライン内挿の区分的多項式を返します。x はベクトルでなければなりません。Y は、以下の条件に従って、スカラー、ベクトル、またはさまざまな次元の配列となります。

  • x および Y が同じサイズのベクトルである場合、節点なし (not-a-knot) の端点条件が使用されます。

  • x または Y がスカラーである場合は、長さがもう一方と同じになるように拡張され、節点なしの端点条件が使用されます (下記「例外 (1)」を参照)。

  • Y が x に比べてさらに 2 つ多い値をもつベクトルの場合、Y の最初と最後の値は、3 次元スプラインの最後の勾配として使用されます (下記「例外 (2)」を参照)。

例外

  1. Yx に比べて 3 つ以上の値をもつベクトルの場合、Y の最初と最後の値は、3 次元スプラインの最後の勾配として使用されます。Y がベクトルの場合は、以下を示します。

    • f(x) = Y(2:end-1)

    • df(min(x)) = Y(1)

    • df(max(x)) = Y(end)

  2. Y が行列または length(x)+2 に等しい size(Y,N) をもつ N 次元配列の場合、以下のようになります。

    • f(x(j)) は、j=1:length(x) に対して値 Y(:,...,:,j+1) に一致します。

    • Df(min(x)) は、Y(:,:,...:,1) に一致します。

    • Df(max(x)) は、Y(:,:,...:,end) に一致します。

    メモ:   関数 interp1 を使用して、コマンド interp1(x,y,xx,'spline') でスプライン内挿を実行できます。spline が入力行列の行方向に内挿を実行する一方で、interp1 は入力行列の列方向に内挿を実行します。

例 1

以下は、正弦曲線を作成し、細かいメッシュでスプラインをサンプリングします。

x = 0:10;
y = sin(x);
xx = 0:.25:10;
yy = spline(x,y,xx);
plot(x,y,'o',xx,yy)

例 2

以下は、最後の勾配が事前に決められ、固定または完全なスプライン内挿の利用を示します。ここでの制約は、ある分布の値を内挿した端の点の勾配がゼロになることです。

x = -4:4;
y = [0 .15 1.12 2.36 2.36 1.46 .49 .06 0];
cs = spline(x,[0 y 0]);
xx = linspace(-4,4,101);
plot(x,y,'o',xx,ppval(cs,xx),'-');

例 3

以下の 2 つのベクトルを考えます。

t = 1900:10:1990;
p = [ 75.995  91.972  105.711  123.203  131.669 ...
     150.697 179.323  203.212  226.505  249.633 ];

これらは、1900 年から 1990 年までのアメリカ合衆国の国勢調査の実施年のベクトルと、それに対応した合衆国の人口を百万人単位で表したベクトルです。式

spline(t,p,2000)

は、外挿に 3 次元スプラインを使い、2000 年の人口を予測します。結果は以下のとおりです。

ans =
    270.6060

例 4

以下のステートメントを実行します。

x = pi*[0:.5:2]; 
y = [0  1  0 -1  0  1  0; 
     1  0  1  0 -1  0  1];
pp = spline(x,y);
yy = ppval(pp, linspace(0,2*pi,101));
plot(yy(1,:),yy(2,:),'-b',y(1,2:5),y(2,2:5),'or'), axis equal

上記は、o でマークした 5 個のデータ点 y(:,2),...,y(:,6) をもつ円のプロットを作成します。この y は、x よりも 2 多いデータ数である (すなわち 2 列多い) ため、y(:,1)y(:,end) は端点の勾配として使用されます。

例 5

以下のコードは、正弦波と余弦波を作成し、細かいメッシュでサンプリングします。

x = 0:.25:1;
Y = [sin(x); cos(x)];
xx = 0:.1:1;
YY = spline(x,Y,xx);
plot(x,Y(1,:),'o',xx,YY(1,:),'-'); hold on;
plot(x,Y(2,:),'o',xx,YY(2,:),':'); hold off;

詳細

すべて展開する

アルゴリズム

三重対角線形方程式 (いくつかの直角な角をもつ可能性があります) は、内挿するスプラインを作成するさまざまな 3 次多項式の係数を示すために必要な情報を元に解かれます。関数 spline は、関数 ppvalmkppunmkpp を使用します。これらのルーチンは、区分的多項式に機能する関数群です。より高度な機能を使用するには、関数 interp1 のリファレンス ページ、これらの関数のコマンド ライン ヘルプ、および Curve Fitting Toolbox™ の関数 spline を参照してください。

参照

[1] de Boor, C., A Practical Guide to Splines, Springer-Verlag, 1978.

参考

| | | |

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