bhjghjh - 1 year ago 34

Python Question

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

`> # determines the root of any general function`

>

>

> tolerance = 1.0e-6

> 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 x

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

Answer

`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.

Source (Stackoverflow)