最优化第五讲练习题

在这里插入图片描述

def f(x):
    return x*x-4*x+5
a0,b0=1,3

1、均匀搜索
δ = ( b 0 − a 0 ) / N , a i = a 0 + i δ , i = 1 , 2 , 3 \delta=(b_0-a_0)/N,a_i=a_0+i\delta,i=1,2,3 δ=(b0a0)/N,ai=a0+iδ,i=1,2,3

while b0-a0>0.1:
    a=np.linspace(a0,b0,5)
    for i in range(1,4):
        if f(a[i-1])>f(a[i]) and f(a[i+1])>f(a[i]):
            a0,b0=a[i-1],a[i+1]
            break
print((a0+b0)/2)

极小点为2
2、黄金区间法
τ = ( 5 − 1 ) / 2 , λ = a 0 + ( 1 − τ ) ( b 0 − a 0 ) , μ = a 0 + τ ( b 0 − a 0 ) \tau=(\sqrt{5}-1)/2,\lambda=a_0+( 1-\tau)(b_0-a_0),\mu=a_0+\tau(b_0-a_0) τ=(5 1)/2,λ=a0+(1τ)(b0a0),μ=a0+τ(b0a0)

tao=(pow(5,0.5)-1)/2
lamda=a0+(1-tao)*(b0-a0)
miu=a0+tao*(b0-a0)
while miu-lamda>0.1:
    if f(lamda)<f(miu):
        b0=miu
    else:
        a0=lamda
    lamda=a0+(1-tao)*(b0-a0)
    miu=a0+tao*(b0-a0)
print((lamda+miu)/2)

极小点约等于2.09
3、导数二分法
记区间中点 λ = ( a 0 + b 0 ) / 2 \lambda=(a_0+b_0)/2 λ=(a0+b0)/2

def first_order(x):
    return 2*x-4

while True:
    lamda=(a0+b0)/2
    value=first_order(lamda)
    if value==0:
        print(lamda)
        break
    elif value<0:
        a0=lamda
    else:
        b0=lamda

极小点为2

  • 13
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值