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
对比图如下:
先计算1和2时表达式的值,然后计算1.5时表达式的值,看一下哪一段更小,则在这一段继续二分
求解函数y=sin(x)+pi*cos(x)-exp(x.^2+3),x∈[-1,1] 的最大值