我被教科书上的一个问题困住了。它问:
使用等式编写您自己的平方根近似函数
Xk+1 = 1/2 * (Xk + n/(Xk)
,其中X0 = 1
.这个等式表明,可以通过重复计算下一个 Xi 项来找到 sqrt'n'。使用的术语数量越多,答案就越好。允许您的函数有两个输入参数,即您想要平方根的数字和要计算的项数。
我为此使用 Python3.5.2。
谢谢!
我被教科书上的一个问题困住了。它问:
使用等式编写您自己的平方根近似函数
Xk+1 = 1/2 * (Xk + n/(Xk)
,其中X0 = 1
.这个等式表明,可以通过重复计算下一个 Xi 项来找到 sqrt'n'。使用的术语数量越多,答案就越好。允许您的函数有两个输入参数,即您想要平方根的数字和要计算的项数。
我为此使用 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
循环。然而,就目前而言,这是最直接的方法。