【问题标题】:Square Root (Newton's Algorithm) Using Recursion使用递归的平方根(牛顿算法)
【发布时间】:2013-11-04 01:00:21
【问题描述】:

有人可以向我解释这个找到数字平方根的递归伪代码吗?我发现很难理解,因为我没有给出 n、p 和 e 输入代表什么。谢谢。

if abs(e^2 - n) < p
    SR(n,p,e) = e     
else
    SR(n,p,e) = SR(n,p,(e+n/e)/2)

(e begins at n)

【问题讨论】:

标签: java recursion square-root


【解决方案1】:

n 是您想要平方根的数字,e 是平方根的估计值,p 是您想要的精度,即您愿意容忍的误差。该算法说:如果 e 与答案“足够接近”,即 e^2 在 n 的 p 之内,那么 e 就是您要寻找的答案;否则,尝试更好的估计,(e+n/e)2。为什么这是一个更好的估计?如果 e 大于 sqrt(n),则 n/e 将小于 sqrt(n),因此 sqrt(n) 将介于 e 和 n/e 之间,因此请尝试 e 和 n/e 的平均值作为下一个估计。 (如果 e 小于 sqrt(n),反之亦然)。

希望这会有所帮助,

布鲁斯

【讨论】:

    【解决方案2】:

    牛顿算法不仅仅是从一个估计值变为“更好的估计值”。为什么更好的估计是什么背后有一些详细的数学。

    我们的想法是,要找到f(x) = 0 形式的任何方程的解(除了一些例外情况),如果您有x 的近似值,则可以通过查看获得更好的近似值f(x) 的变化率,通常写成 f'(x),并用它来计算你需要调整多少,才能更好地估计真正的解决方案。

    在求平方根的情况下,也就是我们要找到x=sqrt(n),可以写成f(x)=x^2-nf'(x)=2x,然后用牛顿算法找到合适的x,就可以得到f(x)=0。这意味着如果我们有一个估计 e,那么为了计算我们的下一个估计,我们查看 f(e)=e^2-n,并询问我们必须更改多少 e 才能消除此错误。由于f 的变化率是f'(x),即2e(e,e^2-n) 处,我们应该将e^2-n 除以2e 以计算出我们需要调整多少e,得到我们的下一个估计。

    也就是说,我们的下一个估计应该是

      e - (e^2-n) / 2e
    = e - (e / 2)  + (n / 2e)
    = (e + n / e) / 2
    

    有关牛顿算法的更多信息,请访问 http://tutorial.math.lamar.edu/Classes/CalcI/NewtonsMethod.aspx(有一个可爱的图表来解释它是如何工作的)和http://www.math.brown.edu/UTRA/linapprox.html,它涉及到一些更技术性的细节。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-03-07
      • 1970-01-01
      • 2018-04-20
      • 2012-10-02
      • 2015-08-22
      • 2012-10-24
      • 2021-12-09
      • 2018-04-09
      相关资源
      最近更新 更多