[英]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-n
和f'(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.