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

◆ _dfmin_r()

void _dfmin_r ( double  a,
double  b,
double  tol,
double *  xx,
double  yy,
int *  irev 
)

1変数非線形関数の最小点 (リバースコミュニケーション版)

目的
dfmin_rは与えられた値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が単峰形でない場合, 局所的(おそらく大域的でない)最小点が同様の精度で求められる.
引数
[in]a探索範囲の下端.
[in]b探索範囲の上端.
[in]tol要求精度(解の誤差範囲幅の要求値). (tol >= 0)
[out]xxirev = 0: 区間[a, b]においてf(x)が最小になる点のx座標を返す.
irev = 1 または 2: 関数値を求めるべき点を返す.
[in]yyirev = 1 または 2: 再呼び出し時にyyに関数値f(xx)を与えること.
[in,out]irevリバースコミュニケーションの制御変数.
[in] 最初の呼び出し時に 0 に設定しておくこと. 2回目以降の呼び出し時には値を変更してはならない.
[out] 0 以外の時には下記処理を行ってから再び本ルーチンを呼び出すこと.
= 0: 処理終了.
= 1 または 2: xxにおける関数値f(xx)をyyに設定すること. yy以外の変数を変更してはならない.
出典
D. Kahaner, C. Moler, S. Nash, "Numerical Methods and Software", Prentice-Hall (1989)