# How to do the Bisection method in Python

### Question

I want to make a Python program that will run a bisection method to determine the root of:

``````f(x) = -26 + 85x - 91x2 +44x3 -8x4 + x5
``````

The Bisection method is a numerical method for estimating the roots of a polynomial f(x).

Are there any available pseudocode, algorithms or libraries I could use to tell me the answer?

1
6
1/18/2013 4:53:50 AM

Here's some code showing the basic technique:

``````>>> def samesign(a, b):
return a * b > 0

>>> def bisect(func, low, high):
'Find root of continuous function where f(low) and f(high) have opposite signs'

assert not samesign(func(low), func(high))

for i in range(54):
midpoint = (low + high) / 2.0
if samesign(func(low), func(midpoint)):
low = midpoint
else:
high = midpoint

return midpoint

>>> def f(x):
return -26 + 85*x - 91*x**2 +44*x**3 -8*x**4 + x**5

>>> x = bisect(f, 0, 1)
>>> print x, f(x)
0.557025516287 3.74700270811e-16
``````
8
1/18/2013 7:50:28 AM

You could see the solution in an earlier Stack Overflow question here that uses scipy.optimize.bisect. Or, if your purpose is learning, the pseudocode in the Wikipedia entry on the bisection method is a good guide to doing your own implementation in Python, as suggested by a commenter on the the earlier question.