|
|
◆ dfzero()
| void dfzero |
( |
double(*)(double) |
f, |
|
|
double * |
b, |
|
|
double * |
c, |
|
|
double |
r, |
|
|
double |
re, |
|
|
double |
ae, |
|
|
int * |
info |
|
) |
| |
非線形方程式
- 目的
- dfzeroは与えられた値BとCの間にある f(x) = 0 の解を求める. 探索範囲[b, c]を要求精度まで(abs(b - c) <= 2*(re*abs(b) + ae)となるまで)縮小していくことにより解を求める.
本ルーチンは主としてf(b)とf(c)が反対の符号を持つ問題用に設計されており, 二分法とセカント法を有効に組み合わせた方法が使われている.
- 引数
-
| [in] | f | 方程式 f(x) = 0 の関数f(x)を求めるユーザーサブルーチンで, 次のように定義すること. double f(double x)
{
return (f(x)の関数値);
}
|
| [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)を超えた |
- 出典
- D. Kahaner, C. Moler, S. Nash, "Numerical Methods and Software", Prentice-Hall (1989)
|