-1

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

Simon Fromme
  • 3,104
  • 18
  • 30
bhjghjh
  • 889
  • 3
  • 16
  • 42
  • You are calling `root_bisection` with argument `y` although `y` is not defined. Exactly what the error message is telling you... – Simon Fromme May 21 '16 at 19:40

1 Answers1

1

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.

Simon Fromme
  • 3,104
  • 18
  • 30