牛顿迭代法(Newton's method)又称为牛顿-拉夫逊(拉弗森)方法(Newton-Raphson method),它是牛顿在17世纪提出的一种在实数域和复数域上近似求解方程的方法。接触到这个算法是因为昨天在LeetCode上遇见一道题:实现sqrt(),即开平方根。
牛顿迭代法的数学原理请看知乎如何通俗易懂地讲解牛顿迭代法求开方? - 马同学的回答 - 知乎
先上java代码:
public static int mySqrt(int x)//牛顿迭代法
{
long r = x;
while(r * r > x)
{
r = (r + x / r) / 2;
}
return (int)r;
}
下面的解释基
于
我可能越描越黑,看不懂的直接移步知乎看原回答就行了。
求X的算术平方根即求曲线F(t)=t² - x= 0 时 t的值。
(1)我们首先把t=x代入循环,曲线F(x)上对应的点是(x,t² - x),切线的斜率为2t。
(2)我们把这一步迭代根的逼近距离设为d。则2t = (t² - x )/d;即d = (t² - x) / 2t。
(3)新的根为t - d;即(t + x/ t) / 2.
while中的条件怎么来的呢?根据上边的我们已经知道t = (t + x / t) / 2.由基本不等式可得t + x / t >= 2 √x;即t >= √x;