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