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

◆ dfmin()

def dfmin ( ,
,
,
tol  = 1.0e-10 
)

1変数非線形関数の最小点

目的
dfminは与えられた値aとbの間にある関数f(x)の最小点を求める.

黄金分割探索と逐次放物線補間を組み合わせた方法が使われる. フィボナッチ探索よりも収束がひどく遅くなることはない. 関数fの二次微分が連続で(aでもbでもない)最小点において正であれば超1次収束し, その次数は通常1.324・・・になる.

関数fの値は eps*abs(dfmin)+(tol/3) よりも近い2点において計算されることはない. ここで, epsは計算機イプシロンの平方根である. fが単峰形の関数で, 少なくてもeps*abs(x)+(tol/3) 離れた点におけるfの計算値が常に単峰形であれば, 区間[a, b]におけるfの大域的最小点の座標が誤差 3*eps*abs(dfmin)+tol 以下で求められる. fが単峰形でない場合, 局所的(おそらく大域的でない)最小点が同様の精度で求められる.
戻り値
(x, info)

x (float):
区間[a, b]においてf(x)が最小になる点のx座標.

info (int):
= 0: 正常終了
= -3: 入力パラメータ f の誤り
引数
[in]a探索範囲の下端.
[in]b探索範囲の上端.
[in]f目的関数f(x)を求めるユーザー関数で, 次のように定義すること. _CODE def f(x): return f(x)の関数値 _ENDCODE
[in]tol(省略可)
要求精度(解の誤差範囲幅の要求値). (tol >= 0) (省略時 = 1.0e-10)
出典
D. Kahaner, C. Moler, S. Nash, "Numerical Methods and Software", Prentice-Hall (1989)
使用例
次の関数の区間[0, 2]における最小点を求める.
f(x) = x^3 - 2x - 5
def f(x):
return x**3 - 2*x - 5
def TestDfmin():
a = 0.0
b = 2.0
x, info = dfmin(a, b, f)
print(x, info)
def dfmin(a, b, f, tol=1.0e-10)
1変数非線形関数の最小点
実行結果
>>> TestDfmin()
0.8164965876303981 0