|
|
◆ _bint4()
| void _bint4 |
( |
double |
x[], |
|
|
double |
y[], |
|
|
int |
ndata, |
|
|
int |
ibcl, |
|
|
int |
ibcr, |
|
|
double |
fbcl, |
|
|
double |
fbcr, |
|
|
int |
kntopt, |
|
|
double |
t[], |
|
|
double |
bcoef[], |
|
|
int * |
n, |
|
|
int * |
k, |
|
|
double |
work[], |
|
|
int * |
info |
|
) |
| |
3次B-スプライン補間
- 目的
- 本ルーチンは与えられたデータを補間する3次スプライン(k = 4)のB-スプライン形式(t[], bcoef[], n, k)の補間係数を求める. スプライン補間値あるいはその微分係数はbvaluを呼び出すことにより求めることができる.
パラメータibcl, ibcr, fbcl, fbcrは x[0]およびx[ndata-1]におけるスプラインの1次または2次微分を指定する. 問題によりこれらが指定されていない場合には, 自然スプライン, すなわち, x[0]およびx[ndata-1]における2次微分を0に設定する(ibcl = ibcr = 2, fbcl = fbcr = 0)のが一般的である.
スプラインは t[3] <= x <= t[n] において, x[i]を値とする内部ノットで定義される. ただし, n = ndata+2 である. ノット t[0], t[1], t[2] は t[3] = x[0] の左側に, また, ノット t[n+1], t[n+2], t[n+3] は t[n] = x[ndata-1] の右側に昇順に並ぶ. [x[0], x[ndata-1]]の外側への外そうが必要でなければ, kntopt = 1 により t[0] = t[1] = t[2] = t[3] = x[0] および t[n] = t[n+1] = t[n+2] = t[n+3] = x[ndata-1] と指定することができる. kntopt = 2 とすることにより, ノット t[0], t[1], t[2] の値を, 最初の7つのノットがt[3] = x[0] に関して対称になるようにすることができる. t[n+1], t[n+2], t[n+3] についても t[n] = x[ndata-1] に関して同様である. kntopt = 3 とすることによりユーザーが, t[0], t[1], t[2] は x[0] の左側で, また, t[n+1], t[n+2], t[n+3] は x[ndata-1] の右側で昇順に独自の値を作業領域 work[0]〜work[5]より設定することができる. どの場合でも, t[3] <= x <= t[n] においてbvaluを用いて得られる補間値は与えられた境界条件について一意である.
- 引数
-
| [in] | x[] | 配列 x[lx] (lx >= ndata)
横座標値(Xベクトル). (重複なし, 昇順であること) |
| [in] | y[] | 配列 y[ly] (ly >= ndata)
縦座標値(Yベクトル). |
| [in] | ndata | データ点数. (ndata >= 2) |
| [in] | ibcl | 左境界条件を指定.
= 1: x[0]における1階微分をfbclにする.
= 2: x[0]における2階微分をfbclにする. |
| [in] | ibcr | 右境界条件を指定.
= 1: x[ndata - 1]における1階微分をfbcrにする.
= 2: x[ndata - 1]における2階微分をfbcrにする. |
| [in] | fbcl | ibclが指定する左境界値. |
| [in] | fbcr | ibcrが指定する右境界値. |
| [in] | kntopt | ノットの指定.
= 1: t[3]およびt[n]におけるノットの多重度を4にする.
= 2: t[3]およびt[n]についてノットを対称にする.
= 3: t[i] = work[i], t[n+1+i] = work[3+i] (i = 0〜2) とする. ただし, ユーザーはwork[i] (i = 0〜5)を呼び出し前に設定しておく必要がある. |
| [out] | t[] | 配列 t[lt] (lt >= n + 4)
ノットの値. |
| [out] | bcoef[] | 配列 bcoef[lbcoef] (lbcoef >= n)
B-スプライン係数. |
| [out] | n | 係数の数. (n = ndata + 2) |
| [out] | k | スプラインの次数. (k = 4) |
| [out] | work[] | 配列 work[lwork] (lwork >= 5*(ndata + 2))
作業領域. |
| [out] | info | = 0: 正常終了
= -1: 入力パラメータ x[] の誤り (値が重複, あるいは, 昇順でない)
= -3: 入力パラメータ ndata の誤り (ndata < 2)
= -4: 入力パラメータ ibcl の誤り (ibcl != 1 and ibcl != 2)
= -5: 入力パラメータ ibcr の誤り (ibcr != 1 and ibcr != 2)
= -8: 入力パラメータ kntopt の誤り (kntopt < 1 or kntopt > 3)
= -13: 入力パラメータ work[] の誤り (kntopt=3のとき, work[0]〜work[5]に与えられたノットの値が正しく並んでいない)
= 1: 係数を求める連立方程式が特異 |
- 出典
- SLATEC
|