Scilab Home page | Wiki | Bug tracker | Forge | Mailing list archives | ATOMS | File exchange
Please login or create an account
Change language to: English - Français - Português -

Please note that the recommended version of Scilab is 6.0.1. This page might be outdated.
See the recommended documentation of this function

Scilab help >> Interpolation > splin

splin

3次スプライン補間

呼び出し手順

d = splin(x, y [,spline_type [, der]])

パラメータ

x

単調増加する (列または行) ベクトル (x は最低2つの要素を有する 必要があります)

y

xと同じ大きさのベクトル

spline_type

(オプション) 計算するスプラインの種類を選択する文字列

der

(オプション) 2つの要素を有するベクトルで, (spline_type="clamped"の場合に使用される)端点の微係数を有します

d

xと同じ形式のベクトル (di は, xi)におけるスプラインの微係数です.

説明

この関数は, 点(xi,yi)を補間する,すなわち, i=1,..,nについてs(xi)=yi となる 3次スプラインまたはサブスプラインs を計算します. 得られるスプライン sは, (x,y,d)により完全に定義されます. ただし,dxiにおける 微係数のベクトルです: s'(xi)=di (これは エルミート形式と呼ばれます). いつくかの点におけるスプラインの評価はinterp 関数により行われます. 適当なspline_typeパラメータを選択することにより, いくつかの種類のスプラインを計算することができます:

"not_a_knot"

これはデフォルトで, 3次スプラインが以下の条件 (n個の点 x1,...,xnを考慮)により計算されます:

"clamped"

この場合,3次スプラインは端点における微係数 を用いて計算されます.この微係数は最後の引数der で指定されます:

"natural"

3次スプラインは次の条件により計算されます:

"periodic"

周期的3次スプラインは次の条件により計算されます (yy1=ynを確認する必要があります):

"monotone"

この場合,サブスプライン (s は 1回のみ連続的に微分可能)は,sが 各区間で単調となるようなdi に関するローカルなスキームにより計算されます:

"fast"

この場合, サブスプラインもdi に関する簡単でローカルなスキームにより計算されます: d(i) は (x(i-1),y(i-1)), (x(i),y(i)),(x(i+1),y(i+1)) の多項式補間の x(i) における微係数です. ただし,端点を除きます (d1 は最も左の3点から, dn は最も右の3点から計算されます).

"fast_periodic"

前のオプションと同じですが,基本となる関数の周期性に 基づき d1 = s'(x1) = dn = s'(xn)に関する 中心化式も使用します (yy1=ynも 満たす必要があります).

注意

精度の観点からは,端点の微係数が既知の場合, 基本的にclamped型を使用してください. そうでない場合は,not_a_knot型を使用して ください. しかし,基本的な近似関数に周期性がある場合には, periodic型を使用してください. 良い近似を行うことで,これらの種類のスプラインは,誤差の漸近特性 としてO(h^4)を得ることができます. 基本関数の2階微分が0でない限り, naturalを使用しないでください.

monotone, fast (または fast_periodic) 型は,振動を抑制する といったいくつかのケースでは有用です (これらの種類のサブスプラインはO(h^3)の 誤差漸近特性を有します).

n=2の(そしてspline_typeclampedではない) 場合, 線形補間が使用されます. n=3spline_typenot_a_knotの場合, fast サブスプライン型が実際に計算されます.

// 例 1
deff("y=runge(x)","y=1 ./(1 + x.^2)")
a = -5; b = 5; n = 11; m = 400;
x = linspace(a, b, n)';
y = runge(x);
d = splin(x, y);
xx = linspace(a, b, m)';
yyi = interp(xx, x, y, d);
yye = runge(xx);
clf()
plot2d(xx, [yyi yye], style=[2 5], leg="interpolation spline@exact function")
plot2d(x, y, -9)
xtitle("interpolation of the Runge function")

// 例 2 : ランダムなデータで異なるスプラインの動作を示す
a = 0; b = 1;        // 補間の間隔
n = 10;              // 補間点のnb
m = 800;             // 評価を行う離散点
x = linspace(a,b,n)'; // 補間点の横座標
y = rand(x);          // 補間点の縦座標
xx = linspace(a,b,m)';
yk = interp(xx, x, y, splin(x,y,"not_a_knot"));
yf = interp(xx, x, y, splin(x,y,"fast"));
ym = interp(xx, x, y, splin(x,y,"monotone"));
clf()
plot2d(xx, [yf ym yk], style=[5 2 3], strf="121", ...
       leg="fast@monotone@not a knot spline")
plot2d(x,y,-9, strf="000")  // to show interpolation points
xtitle("Various spline and sub-splines on random datas")
show_window()

参照

  • interp — 3次スプライン評価関数
  • lsq_splin — 重み付き最小二乗三次スプラインフィッティング

作者

  • B. Pincon
  • F. N. Fritsch (pchim.f Slatec routine is used for monotone interpolation)
Scilab Enterprises
Copyright (c) 2011-2017 (Scilab Enterprises)
Copyright (c) 1989-2012 (INRIA)
Copyright (c) 1989-2007 (ENPC)
with contributors
Last updated:
Thu Mar 03 11:00:53 CET 2011