http://blog.punkid.org/2008/02/28/compute-the-square-root-via-newtons-iteration/
求n的平方根,先假设一猜测值X0 = 1
,然后根据以下公式求出X1
,再将X1
代入公式右边,继续求出X2
…通过有效次迭代后即可求出n的平方根,Xk+1
假设f(x)
是关于X
的函数:
求出f(x)
的一阶导,即斜率:
简化等式得到:
然后利用得到的最终式进行迭代运算直至求到一个比较精确的满意值,为什么可以用迭代法呢?理由是中值定理(Intermediate Value Theorem):
如果
f
函数在闭区间[a,b]
内连续,必存在一点x
使得f(x) = c
,c
是函数f
在闭区间[a,b]
内的一点
我们先猜测一X
初始值,例如1,当然地球人都知道除了1本身之外任何数的平方根都不会是1。然后代入初始值,通过迭代运算不断推进,逐步靠近精确值,直到得到我们主观认为比较满意的值为止。例如要求768的平方根,因为252 = 625
,而302 = 900
,我们可先代入一猜测值26,然后迭代运算,得到较精确值:27.7128。
回到我们最开始的那个”莫名其妙”的公式,我们要求的是N
的平方根,令x2 = n
,假设一关于X
的函数f(x)
为:
f(X) = X2 - n
求f(X)
的一阶导为:
f'(X) = 2X
代入前面求到的最终式中:
Xk+1 = Xk - (Xk2 - n)/2Xk
化简即得到我们最初提到的那个求平方根的神奇公式了: