python牛顿迭代法求平方根_[Python算法实现]迭代法求平方根

# -*- coding: utf-8 -*-

"""Created on Wed Aug 2 20:22:25 2017@author: liuzimu"""

"""https://www.zhihu.com/question/35133069@Haojun"""

"""binary method, n is positive integer"""

def binary_method(n, threshold):

left, right = 0, n

while 1:

mid = (left + right) / 2

sqr = mid ** 2

if abs(sqr - n) <= threshold:

break

elif sqr > n:

right = mid

else:

left = mid

return mid

"""newton method, n is positive integerTheory:slope of the tangent line is f'(Xn)[Xn, f(Xn)] is one point of the tangent linef(Xn) - 0 = f'(Xn) * (Xn - Xn+1)Xn+1 = Xn - f(Xn) / f'(Xn)f(x) = x ** 2 - nf'(x) = 2 * xXn+1 = Xn - (Xn - n / Xn) / 2Xn+1 = (Xn + n / Xn) / 2"""

def newton_method(n, threshold):

res = n

while abs(res ** 2 - n) > threshold:

res = (res + n / res) / 2

return res

print("%.3f"%binary_method(2, 10e-5))

print("%.3f"%newton_method(2, 10e-5))

%timeit binary_method(2, 10e-5)

%timeit newton_method(2, 10e-5)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值