Python求解最优化问题——用二分法求解单峰函数的极值点

算法原理

在这里插入图片描述

  • Step 1:对目标函数f(x),确定初始区间[a,b],确定计算终止条件(点距准则)ε;
  • Step 2:计算f’((a+b)/2);
  • Step 3:如果f’((a+b)/2)<0,说明极值点在[(a+b)/2,b]区间内,令a=(a+b)/2;
  • Step 4:如果f’((a+b)/2)>0,说明极值点在[a,(a+b)/2]区间内,令b=(a+b)/2;
  • Step 5:如果b-a<ε,终止迭代,否则返回Step 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))

猜你喜欢

转载自blog.csdn.net/weixin_41754258/article/details/114100179
今日推荐