【发布时间】:2021-10-28 12:27:21
【问题描述】:
我正在尝试编写一个函数来使用牛顿法计算数字的倒数,但是尽管将公式从维基百科直接翻译成代码,但它给了我错误的结果,当我在期待一个积极的结果,关于为什么这不起作用的任何想法?
公式:
代码:
def rcp(a: float) -> float:
a = float(a)
x0 = a
for _ in range(5):
x1 = x0 * (2 - (a * x0))
x0 = x1
return x0
print(rcp(5.0))
【问题讨论】:
-
请注意,维基百科页面不建议以
x0 = a开头;例如,要计算 17 的倒数,它们以x0 = 0.1开头。 -
我会尝试这种调整,看看是否有帮助 编辑:这对于远离 17(例如 100)的输入没有影响
-
为什么是 range(5)?
-
只是为了限制迭代,这样我们就不会永远循环,但它不应该对结果完全错误的方式产生任何影响
-
@Toothless204 重点是,起点
x0与1/a的距离不能太远。如果以a=100开头,则希望x0相对接近0.01。维基百科页面甚至包括一种找到良好起点的方法(归结为“计算机很容易找到 2 的幂的倒数,因此找到接近a的 2 的幂,并以x0 =开头2" 的幂的倒数。)
标签: python math newtons-method