gpt4 book ai didi

python-3.x - Python 中的 Heron 方法

转载 作者:行者123 更新时间:2023-12-04 12:52:53 24 4
gpt4 key购买 nike

Heron's method生成代表 √n 越来越好的近似值的数字序列。序列中的第一个数字是任意猜测;序列中的每个其他数字都是从前一个数字 prev 使用以下公式获得的:

    (1/2)*(prev+n/prev)

我应该编写一个函数 heron(),它将两个数字作为输入:nerror。该函数应该从 √n 的初始猜测 1.0 开始,然后重复生成更好的近似值,直到连续近似值之间的差异(更准确地说,差异的绝对值)至多是错误

    usage:
>>> heron(4.0, 0.5)
2.05
>>> heron(4.0, 0.1)
2.000609756097561

这有点棘手,但我需要跟踪四个变量:

    # n, error, prev and current

我还需要一个 while 循环,条件是:

    ((current - prev) > error):

while 循环的一般规则是:

    # old current goes into new prev

这就是我到目前为止所得到的,并不多,因为一开始我不知道如何将 'if' 语句合并到 while 循环中.

def heron(n, error):
guess = 1
current = 1
prev = 0
while (current - prev) > error:
previous==1/2*(guess+n/guess):
print (previous) # just a simple print statement
# in order to see what i have so far

有人可以给我一些正确方向的指示吗?

谢谢

最佳答案

如果您不想使用生成器,那么最简单的方法是:

def heron(n, error):
prev, new = 1.0, 0.5 * (1 + n)
while abs(new - prev) > error:
prev, new = new, 0.5 * (new + n/new)
return new

您还可以生成一个“无限”的苍鹭编号序列:

def heron(n):
prev = 1.0
yield prev, float('inf')
while True:
new = 0.5 * (prev + n/prev)
error = new - prev
yield new, error
prev = new

现在你可以打印任意数量的数字,例如:

list(islice(heron(2), 3))     # First 3 numbers and associated errors

只要误差大于0.01就生成:

list(takewhile(lambda x:x[1] > 0.01, heron(2)))

关于python-3.x - Python 中的 Heron 方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16619201/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com