Newton Raphson的一个版本(Newton的方法)

时间:2016-02-28 19:02:45

标签: java sqrt newtons-method

public class Sqrt
  {
     public static void main(String[] args)
       {
           double EPS = 1E-15;
           double c = Double.parseDouble(args[0]);
           double t = c;
              while (Math.abs(t - c/t) > t * EPS)
                      { t = (c/t + t) / 2.0; }
              System.out.println(t);
          }
      } 

上面是我在Java中找到的Newton Raphson的一个版本。 我认为它有效,但我很难绕过它的实际工作方式。 { t = (c/t + t) / 2.0; }让我很困惑。

我熟悉x_n+1 = x_n - f(x_n)/ f'(x_n)但不熟悉上面代码中实现的那个..

2 个答案:

答案 0 :(得分:4)

为了能够应用Newton-Raphson方法,你必须找到一个函数,零是你正在寻找的解决方案。在平方根的情况下,这是:

f(x) = x^2 - c

现在,如果您找到x f(x) = 0,则找到c的平方根。

f'(x) = 2*x

所以

x - f(x)/f'(x) = x - ( (x^2 - c) / (2*x) ) = 1/2 * (x + c/x)

这是(c/t + t) / 2.0来自的地方。

答案 1 :(得分:1)

t = sqrt(c)

=> t^2 = c   
=> 2t^2 - t^2 = c   
=> 2t^2 = t^2 + c  

让我们得到2t双方分开

=> t = (t^2 + c)/2t   
=> t = (t + c/t)/2   
=> t = (c/t + t)/2