牛顿-拉弗森方法
牛顿迭代法
又被称为牛顿-拉弗森方法
,实际是牛顿、拉弗森各自独立提出来的,该方法提出的思路就是利用切线是曲线的线性逼近这个思想。
多数的方程不存在求根公式,所以求精确根非常困难,甚至是不可能,该方法利用函数 \( f(x) \)的泰勒级数的前面几项来寻找方程\( f(x)=0 \)的根,,牛顿迭代法最大的有点是在方程\( f(x)=0 \)的单根附近具有平方收敛,而且该方法在求方程的重根、复根还广泛用于计算机编程中。
牛顿-拉弗森方法代数解法
我们设\( r \)是\( f(x)=0 \)的根,选取\( x_0 \)作为\( r \)的初始近似值,过点\(\left( x_{0},f\left( x_{0}\right) \right)\) 做曲线\(f(x)\)的切线,则该切线的方程为: \(\dfrac {f\left( x_{0}\right) -y}{x_{0}-x}=f'\left( x_{0}\right)\) 即:\(y=f\left( x_{0}\right) +f'\left( x_{0}\right) \left( x-x_{0}\right)\) 则该切线与x轴的交点的横坐标\(x_{1}=x_{0}-f\left( x_{0}\right) /f'\left( x_{0}\right)\)称x1是r的一次近似值。再过点\(\left( x_{1},f\left( x_{1}\right) \right)\)作曲线的切线并求出该切线与x轴交点的横坐标x2,即为r的第二次近似。重复以上过程,得到r的近似值序列,其中\(x_{n+1}=x_{n}-f\left( x_{n}\right) /f'\left( x_{n}\right)\)称为r的n+1次近似值,该公式称为就牛顿迭代公式。
使用牛顿迭代法计算平方根,设某数为P,则有方程\(f\left( x\right) =x^{2}-p\),方程为0所求的根即是所求数的平方根。 根据牛顿迭代公式化简得到: \(x_{n+1}=x_{n}-f\left( x_{n}\right) /f'\left( x_{n}\right)\)
–> \(x_{n+1}=x_{n}-\dfrac {\left( x^{2}_{n}-p\right) }{\left( 2x_{n}\right) }\)
得–> \(x_{n+1}=\dfrac {x^{2}_{n}+p}{2x_{n}}\)
代码实现
public double newtonSqrt(double n)
{
if (n < 0)
{
return -1;
}
final double JINGDU = 1e-9;
double x = 1L;
while (Math.abs(Math.pow(x, 2) - n) > JINGDU)
{
x = (x + n / x) / 2;
System.out.println(x);
}
return x;
}