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