0.618法(最优化方法)Python实现

def fun(x):
    return x ** 3 - 2 * x + 1


def solve(a, b, epsilon):
    lamd = (5 ** 0.5 - 1) / 2
    delta = b - a
    p = a + (1 - lamd) * (b - a)
    q = a + lamd * (b - a)
    while (b - a) / delta >= epsilon:
        if fun(p) < fun(q):
            a, b, q = a, q, p
            p = a + (1 - lamd) * (b - a)
        else:
            a, b, p = p, b, q
            q = a + lamd * (b - a)

    return (a + b) / 2


if __name__ == '__main__':
    print(solve(0, 3, 0.238))

posted @ 2021-09-26 20:17  里列昂遗失的记事本  阅读(726)  评论(0编辑  收藏  举报