黄金分割法最优化python

黄金分割法

在这里插入图片描述
python练习

import math
def f(x):
    return x**3-3*x+1
def golds(a,b,delta,epsilon):
    t = (math.sqrt(5)-1)/2
    h = b - a
    fb = f(b)
    fa = f(a)
    p = a+(1-t)*h
    q = a+t*h
    fp = f(p)
    fq = f(q)
    g = []
    k = 1
    g.append([a, p, q, b])
    while(abs(fb-fa)>epsilon or (h>delta)):
        if(fp<fq):
            b = q
            fb = fq
            q = p
            fq = fp
            h = b - a
            p = a + (1 - t) * h
            fp = f(p)
        else:
            a = p
            fa = fp
            p = q
            fp = fq
            h = b - a
            q = a + t * h
            fq = f(q)
        k = k + 1
        g.append([a, p, q, b])
    ds = abs(b - a)
    df = abs(fb - fa)
    if(fp<=fq):
        s = p
        fs = fp
    else:
        s = q
        fs = fq
    E = [ds,df]
    print(g)
    print(E)
    print(k)
    print(ds)
    print(df)
if __name__ == '__main__':
    a = golds(0, 5, 1e-4, 1e-5)
    print(a)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值