I have written a general bisection method to find roots of the provided function, I want to call it to solve a quadratic function. here's my generalroot.py
# generalroot.py
# determines the root of any general function
def root_bisection(f, a, b, tolerance=1.0e-6):
dx = abs(b-a)
while dx > tolerance:
x = (a+b)/2.0
if (f(a)*f(x)) < 0:
b = x
else:
a = x
dx = abs(b-a)
return
Now I am calling it to solve a quadratic function
from math import *
from generalroot import *
def function(y):
y = y**2 + 5*x - 9
return y
func = root_bisection(y, 0, 1)
print 'Found f(x) =0 at x = %0.8f +/- %0.8f' % ( func , tolerance)
and am getting the following error:
raceback (most recent call last):
File "quadfrombisectionroot.py", line 8, in <module>
func = root_bisection ( y , 0, 1)
NameError: name 'y' is not defined
Please help me fix the error, thanks
root_bisection
is expecting a function as its first argument. You should probably call it like that:
func = root_bisection(function, 0, 1)
Also you are having a typo in the definition of function
. Replace x
with y
.
As a general piece of advice: Never do from libraryXYZ import *
but only import the functions you really need. This makes the code much more readable.