XLPack 6.1
Julia API リファレンスマニュアル
読み取り中…
検索中…
一致する文字列を見つけられません

◆ dfzero()

function dfzero ( f::Function  ,
b::Real  ,
c::Real  ,
r::Real  ,
re::Real  = 1.0e-10,
ae::Real  = 1.0e-10 
)

非線形方程式

目的
dfzeroは与えられた値BとCの間にある f(x) = 0 の解を求める. 探索範囲[b, c]を要求精度まで(abs(b - c) <= 2*(re*abs(b) + ae)となるまで)縮小していくことにより解を求める.
本ルーチンは主としてf(b)とf(c)が反対の符号を持つ問題用に設計されており, 二分法とセカント法を有効に組み合わせた方法が使われている.
戻り値
(x, info)

x (Float64):
求められた解

info (Int32):
= 0: 正常終了
= -1: 入力パラメータ f の誤り
= 1: f(x) = 0 であるが, 解の区間幅が要求精度に達していない可能性がある
= 2: bがf(x)の特異点の近傍にある可能性がある
= 3: 探索範囲内でf(x)の符号が変わらなかった
= 4: 関数評価回数が上限(500)を超えた
引数
[in]f方程式 f(x) = 0 の関数f(x)を求めるユーザーサブルーチンで, 次のように定義すること. _CODE function f(x) f(x)の関数値を返す. end _ENDCODE
[in]b探索範囲の下端.
[in]c探索範囲の上端.
[in]r収束を速めるためにゼロ点の推定値を与える. もし, よい推定値が不明ならばrにはbまたはcの値を設定するとよい.
[in]re(省略可)
収束判定に使用する相対誤差. 要求値が小さすぎる場合, 計算機イプシロンの数倍程度に設定される. (省略時 = 1.0e-10)
[in]ae(省略可)
収束判定に使用する絶対誤差. 探索範囲[b, c]が0を含む場合, 0以外の数値を与えなければならない. (省略時 = 1.0e-10)
出典
D. Kahaner, C. Moler, S. Nash, "Numerical Methods and Software", Prentice-Hall (1989)
使用例
次の方程式の区間[1, 3]における解を求める.
x^3 - 2x - 5 = 0
function TestDfzero()
f(x) = (x*x - 2.0)*x - 5.0
b = 1.0
c = 3.0
r = b
println("b = ", b, ", c = ", c)
x, info = dfzero(f, b, c, r)
println("x = ", x, ", info = ", info)
end
function dfzero(f::Function, b::Real, c::Real, r::Real, re::Real=1.0e-10, ae::Real=1.0e-10)
非線形方程式
実行結果
> TestDfzero()
b = 1.0, c = 3.0
x = 2.0945514814433284, info = 0