0.618(黄金分割)法计算单峰函数极小值

0.618(黄金分割)法计算单峰函数极小值 - 知乎 (zhihu.com)

import math
def fft(t):
    f = math.exp(-t) + math.exp(t) #自己编辑公式,这是包含e的指数函数
    return f
def hanshu(a,b,e):#区间是[a,b]
    p = 0.382
    t2 = a + p * (b - a)
    t1 = a + b - t2
    ft2 = fft(t2)
    ft1 = fft(t1)
    i = 0
    print("第%d次迭代,区间[%.4f,%.4f],t1=%.4f,t2=%.4f,ft1=%.4f,ft2= %.4f" % (i,a, b, t1, t2, ft1, ft2))
    while abs(a-b)>e:
        if ft1<ft2:
            i+=1
            a = t2
            t2 = t1
            ft2 = ft1
            t1 = a + b - t2
            ft1 = fft(t1)
            print("第%d次迭代,区间[%.4f,%.4f],t1=%.4f,t2=%.4f,ft1=%.4f,ft2= %.4f" % (i,a, b, t1, t2, ft1, ft2))
        else:
            i+=1
            b = t1
            t1 = t2
            ft1 = ft2
            t2 = a + p * (b - a)
            ft2 = fft(t2)
            print("第%d次迭代,区间[%.4f,%.4f],t1=%.4f,t2=%.4f,ft1=%.4f,ft2= %.4f" % (i,a, b, t1, t2, ft1, ft2))
    print("最优解t* = %.4f,函数值= %.4f" % ((t1+t2)/2,fft((t1+t2)/2)))

print("请输入区间[a,b],收敛区间长度e")
a,b,e = map(float,input().split())
hanshu(a,b,e)


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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值