繁体   English   中英

使用递归的平方根(牛顿算法)

[英]Square Root (Newton's Algorithm) Using Recursion

有人可以向我解释这个找到数字平方根的递归伪代码吗? 我发现很难理解,因为我没有得到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)

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))。

希望这可以帮助,

布鲁斯

牛顿算法的功能远不止是从一个估计变为一个“更好的估计”。 为什么有更好的估计值,后面还有一些详细的数学公式。

这个想法是要找到形式为f(x) = 0 ANY方程的解决方案(除了一些例外情况),如果您对x有一个近似值,则可以通过查看比率来获得更好的近似值f(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) ,在(e,e^2-n)点处为2e ,因此我们应将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 ,其中包含一些更详细的技术信息。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM