Absolute vs Relative Error, Convergence

    1 def newtsqrt(x,delta,maxit):
    2     r = x/2;  rold = x # Initialize, make sure convergence test fails on first try
    3     it = 0
    4     while (r!=rold) and (it<maxit): # Convergence test
    5     # while ((r-rold) > delta) and (it<maxit): # Convergence test
    6     # while (abs(r-rold) > delta) and (it<maxit): # Convergence test
    7     # while (abs((r-rold)/rold) > delta) and (it<maxit): # Convergence test
    8         rold = r # Save old value for next convergence test
    9         r = 0.5*(rold + x/rold) # Update the guess
   10         it = it + 1
   11     return r
   12 # Test the newtsqrt function for a range of inputs
   13 xtest = [4, 0.04, 4e-4, 4e-6, 4e-8, 4e-10, 4e-12] # arguments to test
   14 print(" Absolute Convergence Criterion")
   15 print("    x         sqrt(x)   newtsqrt(x)    error       relerr")
   16 import math
   17 for x in  xtest: # repeat for each elementin xtest
   18     r = math.sqrt(x)
   19     rn = newtsqrt(x,5e-9,25)
   20     err = abs(rn - r)
   21     relerr = err/r
   22     print("%10.3e  %10.3e  %10.3e  %10.3e  %10.3e" % (x,r,rn,err,relerr))

Figure 2.9: Output of newtsqrt.py
Image newtsqrt_out
Newton's method to compute the square root of a number.
Example py-file: newtsqrt.py