使用二分法(Bisection Method)求平方根。
1 def sqrtBI(x, epsilon): 2 assert x>0, 'X must be non-nagtive, not ' + str(x) 3 assert epsilon > 0, 'epsilon must be postive, not ' + str(epsilon) 4 5 low = 0 6 high = x 7 guess = (low + high)/2.0 8 counter = 1 9 while (abs(guess ** 2 - x) > epsilon) and (counter <= 100): 10 if guess ** 2 < x: 11 low = guess 12 else : 13 high = guess 14 guess = (low + high)/2.0 15 counter += 1 16 return guess
验证一下。
上面的方法,如果 X<1 ,就会有问题。因为 X (X<1)的平方根不在 [0, x] 的范围内。例如,0.25,它的平方根——0.5 不在 [0, 0.25] 的区间内。
那如何求0.25的平方根呢?
只要略微改动上面的代码即可。注意6行和7行的代码。
1 def sqrtBI(x, epsilon): 2 assert x>0, 'X must be non-nagtive, not ' + str(x) 3 assert epsilon > 0, 'epsilon must be postive, not ' + str(epsilon) 4 5 low = 0 6 high = max(x, 1.0) 7 ## high = x 8 guess = (low + high)/2.0 9 counter = 1 10 while (abs(guess ** 2 - x) > epsilon) and (counter <= 100): 11 if guess ** 2 < x: 12 low = guess 13 else : 14 high = guess 15 guess = (low + high)/2.0 16 counter += 1 17 return guess
再检验一下:
如果不知道怎样去调用自定义的方法(模块),可参考http://www.cnblogs.com/memory4young/p/python-import-module.html