【问题标题】:Compute reciprocal in Python using Newton's method使用牛顿法在 Python 中计算倒数
【发布时间】: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 重点是,起点x01/a 的距离不能太远。如果以a=100 开头,则希望x0 相对接近0.01。维基百科页面甚至包括一种找到良好起点的方法(归结为“计算机很容易找到 2 的幂的倒数,因此找到接近 a 的 2 的幂,并以 x0 = 开头2" 的幂的倒数。)

标签: python math newtons-method


【解决方案1】:

这不是一个编码问题,而是一个数学问题。你提到的牛顿方法的维基百科页面包含一个关于failure analysis 的部分,即牛顿方法可能无法收敛到函数根的各种方式。通常,要使此方法起作用,起始值x0 必须足够接近根(在您的情况下为1/a)。什么是“足够接近”取决于功能和根位置,但您选择的起点太远了。

【讨论】:

    猜你喜欢
    • 2015-01-18
    • 1970-01-01
    • 1970-01-01
    • 2019-11-11
    • 2018-07-29
    • 2012-06-24
    • 1970-01-01
    • 2019-05-31
    • 2018-02-26
    相关资源
    最近更新 更多