#97 Finding roots on an interval with the bisection method.
One of the simplest algorithms for solving equations of the form f(x)=0 is called the bisection method.
from math import exp
def bisection(f,a,b,tol= 1e-3):
if f(a)*f(b) > 0:
print(f'No roots or more than one root in [{a},{b}]')
return
m = (a+b)/2
while abs(f(m)) > tol:
if f(a)*f(m) < 0:
b = m
else:
a = m
m = (a+b)/2
return m
#call the method for f(x)= x**2-4*x+exp(-x)
f = lambda x: x**2-4*x+exp(-x)
sol = bisection(f,-0.5,1,1e-6)
print(f'x = {sol:g} is an approximate root, f({sol:g}) = {f(sol):g}')
Output:
x = 0.213348 is an approximate root, f(0.213348) = -3.41372e-07
Last Updated on 2020-09-16 by gantovnik
Recent Comments