黄金分割法适用于[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)