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

时间:2013-11-04 01:00:22

标签: java recursion square-root

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

2 个答案:

答案 0 :(得分:3)

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

希望这有帮助,

布鲁斯

答案 1 :(得分:1)

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

我们的想法是找到f(x) = 0形式的任意方程的解,(除了少数例外情况),如果你有x的近似值,你可以得到更好的近似值,通过查看f(x)的变化率(通常写为f'(x)),并使用它来确定您需要调整估算的数量,以便更好地估算真实情况溶液

对于平方根,也就是说,我们想要找x=sqrt(n),我们可以写f(x)=x^2-nf'(x)=2x,然后使用牛顿算法找到正确的{{1}制作x。这意味着,如果我们有一个估算值f(x)=0,那么为了计算我们的下一个估算值,我们会看e,我们会问我们需要更改f(e)=e^2-n以摆脱多少这个错误。由于e的变化率为ff'(x)2e,我们应将(e,e^2-n)除以e^2-n才能工作我们需要多少调整2e,以获得我们的下一个估算值。

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

e

有关牛顿算法的更多信息,请访问: http://tutorial.math.lamar.edu/Classes/CalcI/NewtonsMethod.aspx(其中有一个可爱的图表解释了它的工作原理)和http://www.math.brown.edu/UTRA/linapprox.html,其中介绍了一些更具技术性的细节。