1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
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))