优化:一维搜索算法—黄金分割法

黄金分割法适用于[a.b]区间上的任何单峰函数求极小值问题,对函数除要求“单峰”外不做其他要求,甚至可以不连续。


求解过程
def func(x):
    return x**2

def golden(a,b,eps,func):
    r = a + 0.382*(b-a)
    u = a + 0.618*(b-a)
    while u-r>eps:
        if func(r)>func(u):
            a = r
            r = u
            u = a + 0.618*(b-a)
        else:
            b = u
            u = r
            r = a + 0.382*(b-a)
    if func(r)>func(u):
        return u,func(u)
    else:
        return r,func(r)

golden(-1,1,0.01,func)

你可能感兴趣的:(优化:一维搜索算法—黄金分割法)