Newton Raphson 的一个版本(牛顿法)
A version of Newton Raphson (Newton's 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)
但不熟悉上面代码中实现的那个..
让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
为了能够应用 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
的来源。
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)
但不熟悉上面代码中实现的那个..
让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
为了能够应用 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
的来源。