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

square root n by computing the next Xi term

我被教科书上的一个问题卡住了。它问:

Write your own square root approximation function using the equation Xk+1 = 1/2 * (Xk + n/(Xk), where X0 = 1.

This equation says that the sqrt'n' can be found by repeatedly computing the next Xi term. The larger number of terms used, the better the answer. Allow your function to have two input parameters, the number that you want the square root of and the number of terms to compute.'

我为此使用 Python3.5.2。

谢谢!

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

所以,我不会为你解决这个问题,但我可以让你开始。

我们可以写一个小函数来计算每个 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' 开头并押韵的三个字母的单词'ore'...


编辑

你为解决问题做出了诚实的努力——我将假设是一项作业练习 不是作业。

您只需在新函数中使用 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 循环。然而,就目前而言,这是最直接的方法。