Python Forum

Full Version: Very new to Python
You're currently viewing a stripped down version of our content. View the full version with proper formatting.
This was copied from a book but gives several errors. Help!
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}")
(Sep-24-2020, 12:36 PM)bliengme Wrote: [ -> ]This was copied from a book but gives several errors. Help
You should post error(Traceback) you get,How to ask Smart Questions.
The problem here is that indentation is mess upped,have to be carful when copy from book/pdf then this can happen.
Here is a fix,indentation in Python is always 4-space.
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.25 is an approximate root, f(0.25) = -0.158699
many thanks