|
◆ pchic()
void pchic |
( |
int |
ic[], |
|
|
double |
vc[], |
|
|
double |
sw, |
|
|
int |
n, |
|
|
double |
x[], |
|
|
double |
f[], |
|
|
double |
d[], |
|
|
int |
incfd, |
|
|
double |
work[], |
|
|
int |
lwork, |
|
|
int * |
info |
|
) |
| |
区分3次エルミート補間
- 目的
- 本ルーチンは区分3次エルミート補間のための微分係数を計算する. pchicでは境界条件, および, 単調増加/減少の切り替えが起きる点の取り扱いをユーザー制御可能である.
得られた区分3次エルミート関数の値はpchfeまたはpchfdにより求めることができる.
- 引数
-
[in] | ic[] | 配列 ic[lic] (lic >= 2)
境界条件の取り扱いを指定.
ic[0] = データの始点における条件.
= 0: 既定の境界条件 (pchimで使われるものと同じ).
> 0: 境界における微分係数の単調性のための調整を行わない.
< 0: 境界における微分係数は単調性のために調整される.
ic[0]に許される数値の絶対値は次のとおり.
= 1: x[0]における1次微分係数がvc[0]で与えられる.
= 2: x[0]における2次微分係数がvc[0]で与えられる.
= 3: d[0]に3点差分を使用 (n < 3ならば既定の境界条件に戻す).
= 4: d[0]に4点差分を使用 (n < 4ならば既定の境界条件に戻す).
= 5: 2次微分係数がx[1]において連続となるようにd[0]を設定する (n < 4ならば既定の境界条件に戻す). ic[1] = データの終点における条件.
ic[0]と同様の値をとるが, x[n-1]における微分に適用される. ic[1] = 1 または 2の場合, 値はvc[1]で与えられる. |
[in] | vc[] | 配列 vc[lvc] (lvc >= 2)
境界値を指定する.
vc[0]は ic[0] = 1 または 2 の場合だけ設定すればよい.
vc[1]は ic[1] = 1 または 2 の場合だけ設定すればよい. |
[in] | sw | 単調増加/減少の切り替えが起きる点の取り扱いを指定する.
= 0: データの単調性を無視して単調なものとして扱う.
!= 0: 切り替え点の近傍で3点差分を使う.
> 0: 極値を含む区間における補間式はデータから sw*dfloc 以下のずれになるように制御される. ここで, dflocはこの区間および両隣の区間におけるf[]の値の最大変化である.
< 0: 特別な制御は行わない. |
[in] | n | データ点数. (n >= 2) |
[in] | x[] | 配列 x[lx] (lx >= n)
独立変数値. (昇順であること) |
[in] | f[] | 配列 f[lf] (lf >= incfd*(n - 1) + 1)
補間する従属変数値. |
[out] | d[] | 配列 d[ld] (ld >= incfd*(n - 1) + 1)
各x座標における微分値. |
[in] | incfd | f[] および d[] の要素間隔. x[i]に対応するデータが f[i*incfd] および d[i*incfd]に入っていることを示す. (i = 0 〜 n-1) |
[out] | work[] | 配列 work[lwork]
作業領域. |
[out] | lwork | 配列 work[]のサイズ. (lwork >= 2*(n - 1)) |
[out] | info | = 0: 正常終了
= -1: 入力パラメータ ic[] の誤り (abs(ic[0]) > 5 および/または abs(ic[1]) > 5)
= -4: 入力パラメータ n の誤り (n < 2)
= -5: 入力パラメータ x[] の誤り (昇順でない)
= -8: 入力パラメータ incfd の誤り (incfd < 1)
= -10: 入力パラメータ lwork の誤り (lworkが小さすぎる)
= 1: ic[0] < 0で d[0]を単調性のために調節する必要がある
= 2: ic[1] < 0で d[(n-1)*incfd]を単調性のために調節する必要がある
= 3: 上の2つ共起こった |
- 出典
- SLATEC (PCHIP)
|