|
|
◆ _bsplvd()
| void _bsplvd |
( |
double |
t[], |
|
|
int |
k, |
|
|
int |
nderiv, |
|
|
double |
x, |
|
|
int |
ileft, |
|
|
int |
ldvnikx, |
|
|
double |
vnikx[], |
|
|
double |
work[], |
|
|
int * |
info |
|
) |
| |
B-スプライン基底関数値および微分値
- 目的
- 本ルーチンはxにおけるゼロでない基底関数の値および(nderiv - 1)次以下の微分係数値を求める.
ileftは t[ileft-1] <= x <= t[ileft] となるような入力値である. 次の呼び出しにより正しいileftを生成することができる. interv(t, n+1, x, &ilo, &ileft, &info);
bsplvdの出力は, 少なくてもk×nderivの大きさの配列vnikx[j][i]で, その列にxにおけるk個の非ゼロの基底関数およびそのnderiv-1右微分値が入る. ただし, i = 0〜k-1, j = 0〜nderiv-1 である. これらの基底関数のインデックスは ileft-k+i, i = 1〜k, k <= ileft <= n である. i番目の基底関数の非ゼロ部分は区間 (t[i], t[i+k]), i = 0〜n-1) にある. x = t[ileft] であればvnikxにはt[ileft]における左極限値(左微分値)が入る. 特に, ileft = n であれば右端点 x = t[n] において左極限値を求める. t[i] (i = k〜n) において左極限値を求めるためには, xに次に小さなノットを設定しintervを呼び出してileftを求め, xにt[i]を設定しbsplvdを呼び出せばよい.
- 引数
-
| [in] | t[] | 配列 t[lt] (lt >= n + k)
長さ(n + k)のノットベクトル. ただし, nはB-スプライン基底関数の数 (= 多重度の合計 - k). |
| [in] | k | B-スプラインの次数. (k >= 1) |
| [in] | nderiv | 微分係数の数 + 1. (1 <= nderiv <= k) |
| [in] | x | 基底関数の引数. (t[k-1] <= x <= t[n]) |
| [in] | ileft | t[ileft-1] <= x <= t[ileft] となるような整数. |
| [in] | ldvnikx | 二次元配列vnikx[][]の整合寸法. (ldvnikx >= k) |
| [out] | vnikx[][] | 配列 vnikx[lvnikx][ldvnikx] (lvnikx >= nderiv)
xにおける非ゼロの基底関数およびその微分係数 (横方向に微分係数が並ぶ). |
| [out] | work[] | 配列 work[lwork] (lwork >= (k + 1)*(k + 2)/2)
作業領域. |
| [out] | info | = 0: 正常終了
= -2: 入力パラメータ k の誤り (k < 1)
= -3: 入力パラメータ nderiv の誤り (nderiv < 1 または nderiv > k)
= -6: 入力パラメータ ldvnikx の誤り (ldvnik < k)
= 1: ileftの値が正しくない (x < t[ileft-1] または x > t[ileft]) |
- 出典
- SLATEC
|