通过计算下一个Xi项来计算平方根

时间:2016-09-09 02:22:01

标签: python square-root function-approximation

我从教科书中遇到问题。它问道:

  

使用公式Xk+1 = 1/2 * (Xk + n/(Xk)编写自己的平方根近似函数,其中X0 = 1

     

这个等式表示通过重复计算下一个Xi项可以找到sqrt'n'。使用的术语数量越多,答案就越好。允许你的函数有两个输入参数,你想要的平方根数和要计算的术语数。'

我正在使用Python3.5.2。

attached a picture of the problem

谢谢!

1 个答案:

答案 0 :(得分:0)

新的学年,一种古老的巴比伦方法。

所以,我不会为你解决这个问题,但我可以帮助你。

我们可以编写一个函数来计算每个x_{k+1}

def sqrt_step(n, xk):
    return 1/2.0 * (xk + float(n)/xk)

设置n = 100

sqrt_step(100, 1) # returns 50.5

现在让我们将这个数字反馈到函数中几次:

sqrt_step(100, 50.5) # 26.2

sqrt_step(100, 26.2) # 15.0

sqrt_step(100, 15.0) # 10.8

......当k变为无穷大时,这会收敛到10。

现在,如果只有一种方法可以一次又一次地执行一次操作k次......我想到一个以' f'开头的三个字母的单词。与“矿石”押韵......

修改

您已经做出了诚实的努力来解决问题 - 我将认为是一项功课练习不是作业。

您只需使用新功能中的sqrt_step功能即可解决此问题。这可以按如下方式完成:

def square_root(n, k): 
    xk = 1
    for i in range(k): 
        xk = sqrt_step(n, xk) # or just: xk = 1/2.0 * (xk + float(n)/xk)
    return xk

试验:

square_root(64, 100)  # 8.0
square_root(144, 100) # 12.0

随着您的进步,您将学习函数式编程技术,这些技术可以避免覆盖变量并显式编写for循环。但是现在,这是最简单的方法。