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

◆ _dfzero_r()

void _dfzero_r ( double *  b,
double *  c,
double  r,
double  re,
double  ae,
int *  info,
double *  xx,
double  yy,
int *  irev 
)

非線形方程式 (リバースコミュニケーション版)

目的
dfzero_rは与えられた値BとCの間にある f(x) = 0 の解を求める. 探索範囲[b, c]を要求精度まで(abs(b - c) <= 2*(re*abs(b) + ae)となるまで)縮小していくことにより解を求める.
本ルーチンは主としてf(b)とf(c)が反対の符号を持つ問題用に設計されている. 二分法とセカント法を有効に組み合わせた方法が使われている.
引数
[in,out]b[in] 探索範囲の下端.
[out] 最終探索範囲の下端 (求められた解).
[in,out]c[in] 探索範囲の上端.
[out] 最終探索範囲の上端.
[in]r収束を速めるためにゼロ点の推定値を与える. もし, よい推定値が不明ならばrにはbまたはcの値を設定するとよい.
[in]re収束判定に使用する相対誤差. 要求値が小さすぎる場合, 計算機イプシロンの数倍程度に設定される.
[in]ae収束判定に使用する絶対誤差. 探索範囲[b, c]が0を含む場合, 0以外の数値を与えなければならない.
[out]info= 0: 正常終了
= 1: f(x) = 0 であるが, 解の区間幅が要求精度に達していない可能性がある
= 2: bがf(x)の特異点の近傍にある可能性がある
= 3: 探索範囲内でf(x)の符号が変わらなかった
= 4: 関数評価回数が上限(500)を超えた
[out]xxirev = 1〜4の場合, 関数値を求めるべき点を返す.
[in]yyirev = 1〜4の場合, 再呼び出し時に関数値f(xx)を与えること.
[in,out]irevリバースコミュニケーションの制御変数.
[in] 最初の呼び出し時に 0 に設定しておくこと. 2回目以降の呼び出し時には値を変更してはならない.
[out] 0 以外の時には下記処理を行ってから再び本ルーチンを呼び出すこと.
= 0: 処理終了. 正常終了かどうかはinfoをチェックすること.
= 1〜4: xxにおける関数値f(xx)をyyに設定すること. yy以外の変数を変更してはならない.
出典
D. Kahaner, C. Moler, S. Nash, "Numerical Methods and Software", Prentice-Hall (1989)