我从教科书中遇到问题。它问道:
使用公式
Xk+1 = 1/2 * (Xk + n/(Xk)
编写自己的平方根近似函数,其中X0 = 1
。这个等式表示通过重复计算下一个Xi项可以找到sqrt'n'。使用的术语数量越多,答案就越好。允许你的函数有两个输入参数,你想要的平方根数和要计算的术语数。'
我正在使用Python3.5.2。
谢谢!
答案 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
循环。但是现在,这是最简单的方法。