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))