XLPack 6.1
C/C++ API リファレンスマニュアル
読み取り中…
検索中…
一致する文字列を見つけられません

◆ _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]kB-スプラインの次数. (k >= 1)
[in]nderiv微分係数の数 + 1. (1 <= nderiv <= k)
[in]x基底関数の引数. (t[k-1] <= x <= t[n])
[in]ileftt[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