XLPack 7.0
XLPack 数値計算ライブラリ (Excel VBA) リファレンスマニュアル
読み取り中…
検索中…
一致する文字列を見つけられません

◆ Dfmin()

Sub Dfmin ( A As  Double,
B As  Double,
F As  LongPtr,
Tol As  Double,
X As  Double 
)

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

目的
本ルーチンは与えられた値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]F目的関数f(x)を求めるユーザー関数で, 次のように定義すること.
Function F(X As Double) As Double
F = (f(x)の関数値)
End Function
Xを変更しないこと.
[in]Tol要求精度(解の誤差範囲幅の要求値). (Tol >= 0)
[out]X区間[A, B]においてf(x)が最小になる点のx座標.
出典
D. Kahaner, C. Moler, S. Nash, "Numerical Methods and Software", Prentice-Hall (1989)
使用例
次の関数の区間[0, 2]における最小点を求める.
f(x) = x^3 - 2x - 5
Function FDfmin(X As Double) As Double
FDfmin = X ^ 3 - 2 * X - 5
End Function
Sub Ex_Dfmin()
Dim A As Double, B As Double, Tol As Double, X As Double
A = 0: B = 2
Tol = 0.0000000001 '1.0e-10
Call Dfmin(A, B, AddressOf FDfmin, Tol, X)
Debug.Print "X =", X
End Sub
Sub Dfmin(A As Double, B As Double, F As LongPtr, Tol As Double, X As Double)
1変数非線形関数の最小点
実行結果
X = 0.816496587630398