如何理解Newton的Java平方根方法?

时间:2014-05-23 13:10:53

标签: java newtons-method

public static double sqrt(double c)
{
    if (c < 0) return Double.NaN;
    double t = c;                          // line 1
    double err = 1e-15;                    // line 2
    while (Math.abs(t - c/t) > err * t)    // line 3
        t = (c/t + t) / 2.0;           // line 4
    return t;
}

Q1:我对第1行和第4行中的变量t感到困惑: 因为t = c,那么c / t = 1,第4行是什么意思?

Q2:第3行,检查的目的是什么?

我搜索了牛顿的方法&#34;并得到了几个解释,但我仍然无法理解。我可以在这里要求直截了当的解释吗?

2 个答案:

答案 0 :(得分:3)

Q1:请注意t随循环的每次迭代而变化,因此最初c/t == 1时,它会在此之后赢得。

Q2:我们希望循环继续,直到我们得到答案&#34;足够接近&#34;,由err定义。

答案 1 :(得分:2)

牛顿方法用于逼近实值函数的根。见here

当你计算根到双值时,你实际上试图求解F(x) = X^2 - C,其中C是双精度,你会试图找到使方程为零的x。

现在Newton's Method通过一系列猜测来逼近这一点。通过每次猜测(因为此函数具有适当的属性),我们更接近平方根。增量近似实际上是在每次猜测(t)时计算图形的切线,然后选择那个作为该点的猜测并在步骤(c / t + t)/ 2中移近。在某一点上,我们非常接近并且我们不希望该函数永远继续,所以我们有第3行来检查我们的下一个估计是否与当前近似有一定距离。如果下一个近似值比err * t更接近,我们就不会继续了。我们足够接近。