zoukankan      html  css  js  c++  java
  • 二分法求平方根(Python实现)

    使用二分法(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

  • 相关阅读:
    python for test
    python链接mysql pymysql
    MongoDB数据表添加字段
    NodeVisitor
    无法解决的错误
    一个点绕着另一个点旋转一定角度后的坐标
    2.0版本里程碑,研发日志
    osg Node getParentalNodePaths()报错
    TeslaManage 2.0编译日志
    机械臂模拟2.0
  • 原文地址:https://www.cnblogs.com/memory4young/p/3366580.html
Copyright © 2011-2022 走看看