Bei der Bisection Methode betrachten wir die erste Ableitung und ersetzen dann je nachdem, ob sie positiv oder negativ ist, den Grenzpunkt a oder b. Ich habe versucht, dies in Python zu implementieren, und es hat funktioniert (zumindest bei den einfachen Beispielen, die ich repliziert habe). Aber es scheint, dass ich die Positionen a=c und b=c beliebig ändern kann und der Code trotzdem funktioniert. Hat jemand eine intuitive Erklärung dafür oder habe ich einen Implementierungsfehler gemacht? Insbesondere wenn man sich das Bild anschaut, wenn ich die falsche Variable a,b durch c ersetze, habe ich das Intervall, in dem das Optimum nicht mehr enthalten ist, wie kann der Code dann noch korrekt sein?
def Bisection(f, R, nIter=100, tol=1e-7):
a,b = R
for it in range(nIter):
c = (a+b) / 2
df_c = deriv(f, c) # f'(x_c)
if abs(df_c) < tol:
break
elif df_c > 0:
a = c # change this to b=c
else:
b = c # change this to a=c
c = (a+b)/2
return c
import numpy as np
x = np.linspace(0,10, 101)
f = lambda x: -(x-5)**2
R = [2,8]
x_opt = Bisection_min(f, R)
plt.plot(x, f(x))
plt.plot(x_opt, f(x_opt), "ro")