from numpy import linspace,abs from sympy import Symbol,exp,atan,diff,lambdify from matplotlib.pyplot import figure,subplot,plot,grid,title x=Symbol('x') # Define the function f=exp(x)-3.0/2.0-atan(x) # Compute its derivative df=diff(f,x) # Make functions F = lambdify(x, f, modules=['numpy']) DF = lambdify(x, df, modules=['numpy']) X = linspace(-1,1,100) figure(figsize(10,4)) subplot(1,2,1) plot(X,F(X)) grid('on') title('Function') subplot(1,2,2) plot(X,DF(X)) grid('on') title('Derivative') M = 20 # maximum iterations x = 0.5 # initial guess eps = 1e-15 # relative tolerance on root f = F(x) for i in range(M): df= DF(x) dx= -f/df x = x + dx e = abs(dx) f = F(x) print "{0:6d} {1:22.14e} {2:22.14e} {3:22.14e}".format(i,x,e,abs(f)) if e < eps * abs(x): break