|
|
◆ _bsplvn()
| void _bsplvn |
( |
double |
t[], |
|
|
int |
jhigh, |
|
|
int |
k, |
|
|
int |
index, |
|
|
double |
x, |
|
|
int |
ileft, |
|
|
double |
vnikx[], |
|
|
double |
work[], |
|
|
int * |
iwork, |
|
|
int * |
info |
|
) |
| |
B-スプライン基底関数値
- 目的
- 本ルーチンはxにおけるmax(jhigh, (j+1)*(index-1))次のゼロでない基底関数の値を求める. ただし, t[k-1] <= x <= t[n] で, j = iworkはindex = 1の最初の呼び出し時にルーチン内で1に設定される.
ileftは t[ileft-1] <= x <= t[ileft] となるような入力値である. 次の呼び出しにより正しいileftを生成することができる. interv(t, n+1, x, &ilo, &ileft, &info);
bsplvnはbsplvdと同じアルゴリズムを使って計算を行う. 基底関数だけを求める場合にはjhigh = kおよびindex = 1と設定するとbsplvdを呼び出すよりも速く計算できる. 微分係数を求める場合にはbsplvdが適している. 左極限値を求めるやり方はbsplvdを参照せよ.
- 引数
-
| [in] | t[] | 配列 t[lt] (lt >= n + k)
長さ(n + k)のノットベクトル. ただし, nはB-スプライン基底関数の数 (= 多重度の合計 - k). |
| [in] | jhigh | 求めるB-スプラインの次数. (1 <= jhigh <= k) |
| [in] | k | 可能な最も高い次数. (k >= 1) |
| [in] | index | = 1: 最初から計算を行う. 1, 2, ..., jhigh次のすべてのB-スプラインの値が順に求められる.
= 2: j+1, j+2, ..., jhigh次のB-スプラインの値だけを計算する. 前回呼び出しにより求められたj次の基底関数とwork[], iworkの値は保存されていなければならない. |
| [in] | x | 基底関数の引数. (t[k-1] <= x <= t[n]) |
| [in] | ileft | t[ileft-1] <= x <= t[ileft] となるような整数. |
| [out] | vnikx[] | 配列 vnikx[lvnikx] (lvnikx >= k)
基底関数の値. |
| [out] | work[] | 配列 work[lwork] (lwork >= 2*k)
作業領域.
work[]およびiworkはindex = 2のときに継続するために必要な情報を保持する. index = 1だけでしか使わないのであればこれらの変数は他の用途に使ってよい. |
| [out] | iwork | 作業変数. |
| [out] | info | = 0: 正常終了
= -2: 入力パラメータ jhigh の誤り (jhigh < 1 または jhigh > k)
= -3: 入力パラメータ k の誤り (k < 1)
= -4: 入力パラメータ index の誤り (index != 1 かつ index != 2)
= 1: ileftの値が正しくない (x < t[ileft-1] または x > t[ileft]) |
- 出典
- SLATEC
|