Я пытаюсь написать двоичную функцию поиска, чтобы найти корень функции fun
в интервале [?????,???]
:
Вот то, что у меня есть, но близко к цели:
def binarySearchIter(fun, start, end, eps=1e-10):
'''
fun: funtion to fund the root
start, end: the starting and ending of the interval
eps: the machine-precision, should be a very small number like 1e-10
return the root of fun between the interval [start, end]
'''
root = (start + end)/2
print(root)
answer=fun(root)
if abs(answer) <= eps:
print(root)
return root
elif answer - eps > 0:
binarySearchIter(fun, start, root, eps=1e-10)
else:
binarySearchIter(fun, root, end, eps=1e-10)
Вот функция, которую я использую для проверки:
def f(x):
return x ** 2 - 2
Когда я запускаю: binarySearchIter(f, -3, 0, eps = 1e-10)
Я ожидаю ответа: -1.4142135623842478
, однако корень сходится к -3, пока не истечет время ожидания.
когда я запускаю binarySearchIter(f, 0, 3, eps = 1e-10)
Я получаю правильный ответ 1.4142135623842478
.
Я явно упускаю что-то, что нарушает функцию в зависимости от того, получает ли она (-3, 0) или (3,0).
Спасибо за вашу помощь.