|
◆ chkder()
void chkder |
( |
int |
m, |
|
|
int |
n, |
|
|
double |
x[], |
|
|
double |
fvec[], |
|
|
int |
ldfjac, |
|
|
double |
fjac[], |
|
|
double |
xp[], |
|
|
double |
fvecp[], |
|
|
int |
mode, |
|
|
double |
err[], |
|
|
int * |
info |
|
) |
| |
微分係数計算値のチェック
- 目的
- chkderはxにおいて計算されたn変数m非線形連立方程式の微分係数と関数値の整合性をチェックする. hybrj, hybrj1などのユーザーサブルーチンをチェックするのに使用することができる.
ユーザーはchkderを, 最初は mode = 1, 次に mode = 2 として2回呼び出さなければならない.
mode = 1:
入力: xにチェックを行う点を入れる.
出力: xpに近傍の点が設定される.
mode = 2:
入力: fvecにxにおける関数値, fjacにxにおける各関数の微分係数値, また, fvecpにxpにおける関数値を入れる.
出力: errに各微分係数値の正しさの尺度が入る.
関数値を計算するときに桁落ちあるいは丸め誤差により重大な情報落ちが生じた場合, 本ルーチンは正しく動作しない. 従って, xの要素のどれも著しく小さい値(特に0)か情報落ちが生じる値であってはならない.
- 引数
-
[in] | m | 方程式の数. (m > 0) |
[in] | n | 未知数の数. (n > 0) |
[in] | x[] | 配列 x[lx] (lx >= n)
チェックする点の座標. |
[in] | fvec[] | 配列 fvec[lfvec] (lfvec >= m)
x における関数値 (mode = 2 の場合). |
[in] | ldfjac | 配列fjac[][]の整合寸法. (ldfjac >= m) |
[in] | fjac[][] | 配列 fjac[lfjac][ldfjac] (lfjac >= n)
x におけるヤコビ行列(∂fi/∂xj) (i = 0 〜 m-1, j = 0 〜 n-1) の値 (mode = 2 の場合). |
[out] | xp[] | 配列 x[lx] (lx >= n)
チェックする点 x の近傍の点の座標 (mode = 1 の場合). |
[in] | fvecp[] | 配列 fvecp[lfvecp] (lfvecp >= m)
xp における関数値 (mode = 2 の場合). |
[in] | mode | 制御変数. (mode = 1 または 2)
本ルーチンは次のように2回呼び出さなければならない.
- 1回目: m, n, x[]を設定して mode = 1 として呼び出すとxp[]が返る.
- 2回目: fvec[], fjac[], fvecp[]を設定して mode = 2 として呼び出すとerr[]にそれぞれの式の微分係数の正しさを表す数値が返る.
|
[out] | err[] | 配列 err[lerr] (lerr >= m)
微分係数のチェック結果 (mode = 2 の場合). (0 <= err[i] <= 1)
1 であれば正しく, 0 であれば正しくないことを表す. その中間の値の場合, 確実な判定ができないが, 0.5以上であれば概ね正しいことを表す. |
[out] | info | = 0: 正常終了
= -1: 入力パラメータ m の誤り (m <= 0)
= -2: 入力パラメータ n の誤り (n <= 0)
= -5: 入力パラメータ ldfjac の誤り (ldfjac < m)
= -9: 入力パラメータ mode の誤り (mode != 1 and mode != 2) |
- 出典
- netlib/minpack
|