import time # 使用牛顿迭代公式计算平方根 def get_sqrt(x,e=10**(-6)): y=x while abs(y*y-x)>e: z=(y+x/y)/2.0 y=z return y ### 使用基础数学的方法求平方根,并与牛顿迭代法进行对比 def base_sqrt(num,e=10**(-6)): n=0 while n*n<num: n+=1 n=n-1 x=(num-n*n)/(2*n) n=n+x while abs(num-n*n)>e: x=(num-n*n)/(2*n) n+=x return n
def get_muti_base_sqrt(n): t1=time.time() for i in range(3,n): base_sqrt(i) t2=time.time() return t2-t1 def get_muti_sqrt(n): t1=time.time() for i in range(3,n): get_sqrt(i) t2=time.time() return t2-t1 x=list(range(1000,50000,1000)) base_y=[get_muti_base_sqrt(i) for i in x] sqrt_y=[get_muti_sqrt(i) for i in x]
import matplotlib.pyplot as plt plt.plot(x,base_y,color='red') plt.plot(x,sqrt_y,color='green') plt.legend(["A: base_y", "B: sqrt_y"]) plt.show()
从图中可以显而易见的对比出,使用普通的算法的效率是没有牛顿迭代法计算平方根的时间开销短的,牛顿迭代法是一种比较有效的方法。