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))
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值