0

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

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

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

我为此使用 Python3.5.2。

附上问题的图片

谢谢!

4

1 回答 1

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”开头并与“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循环。然而,就目前而言,这是最直接的方法。

于 2016-09-09T03:07:06.650 回答