def bisection(f,a,b,eps=None,N=None,exactval=None): if N is None: N=60 if eps is None: eps=10**(-10) i=0 m=(a+b)/2.0 abserr=(b-a)/2.0 while ieps*abs(m): if f(m)==0: a=b=m if f(a)*f(m)<0: b=m else: a=m m=(a+b)/2 abserr=(b-a)/2 i=i+1 print 'Iteration: ', i, 'Estimate: ', m print ' Estimated relative error: ', abserr/abs(m) if not exactval is None: print ' Exact relative error: ', abs((m-exactval)/exactval) return m def secant(f,x0,x1,eps=None,N=None,exactval=None): if N is None: N=60 if eps is None: eps=10**(-10) xpp=float(x0) xp=z=float(x1) abserr=abs(z) i=0 while i=eps*abs(z): z=xp-f(xp)*(xp-xpp)/(f(xp)-f(xpp)) abserr=abs(z-xp) xpp=xp xp=z i=i+1 print 'Iteration: ', i, 'Estimate: ', xp print ' Estimated relative error: ', abserr/abs(xp) if not exactval is None: print ' Exact relative error: ', abs((xp-exactval)/exactval) return xp def newton(f,df,x0,eps=None,N=None,exactval=None): if N is None: N=60 if eps is None: eps=10**(-10) xp=z=float(x0) abserr=abs(z) i=0 while i=eps*abs(z): z=xp-float(f(xp))/df(xp) abserr=abs(z-xp) xp=z i=i+1 print 'Iteration: ', i, 'Estimate: ', xp print ' Estimated relative error: ', abserr/abs(xp) if not exactval is None: print ' Exact relative error: ', abs((xp-exactval)/exactval) return xp