用二分法求函数极小值点

img


二分法求函数极小值点的代码如何实现(最好matlab,python也可以);多谢啦~

def fun(t):
    return t ** 4 / 4 + t ** 2 * 5 - 20 * t + 3

a, b = 1, 2
e = 10e-6
x0 = fun(a)
x1 = fun(b)

while a <= b:
    m = (a + b) / 2
    x = fun(m)
    if abs(x - x1) <= e:
        result = m
        break
    
    if abs(x - x0) > abs(x - x1):
        x0 = x
        a = m
    else:
        x1 = x
        b = m

print(m, fun(m))
# result 1.59423828125 -14.561859965720927

对比图如下:

img

先计算1和2时表达式的值,然后计算1.5时表达式的值,看一下哪一段更小,则在这一段继续二分