アルゴリズムの原理
- ステップ1:目的関数f(x)について、初期区間[a、b]を決定し、計算終了条件(点距離基準)εを決定します。
- ステップ2:f '((a + b)/ 2);を計算します。
- ステップ3:f '((a + b)/ 2)<0の場合、極値が[(a + b)/ 2、b]の区間にあることを示し、a =(a + b)/ 2とします。 ;
- ステップ4:f '((a + b)/ 2)> 0の場合、極値点が区間[a、(a + b)/ 2]にあることを意味し、b =(a + b)/ 2とします。 ;
- ステップ5:ba <εの場合は反復を終了し、そうでない場合はステップ2に戻ります。
備考:関数が微分関数を見つけるのに都合が悪い場合、少量のσを使用できます。f((a + b)/2-σ)<f((a + b)/ 2 +σ )、これはf '((a + b)/ 2)> 0を意味し、それ以外の場合はf'((a + b)/ 2)<0;
アルゴリズムの実装
def func(x):
return x**2 + x + 5
left = -100
right = 100
sigma = 0.0001
mid = (left + right) / 2
while (1):
x1 = mid - sigma
x2 = mid + sigma
if (func(x1) < func(x2)):
right = x2
else:
left = x1
if (right - left < 0.001):
break
mid = (left + right) / 2
print("left=%s,right=%s" % (left, right))