您的位置:首页 > 其它

牛顿迭代法的公式推导

2016-08-07 23:07 393 查看
牛顿迭代法求平方根

 
求n的平方根,先假设一猜测值
X0 = 1
,然后根据以下公式求出
X1
,再将
X1
代入公式右边,继续求出
X2
…通过有效次迭代后即可求出n的平方根,
Xk+1




先让我们来验证下这个巧妙的方法准确性,来算下2的平方根 (Computed by Mathomatic)
1-> x_new = ( x_old + y/x_old )/2 y (x_old + -----) x_old #1: x_new = --------------- 2 1-> calculate x_old 1 Enter y: 2 Enter initial x_old: 1 x_new = 1.5 1-> calculate x_old 2 Enter y: 2 Enter initial x_old: 1 x_new = 1.4166666666667 1-> calculate x_old 3 Enter y: 2 Enter initial x_old: 1 x_new = 1.4142156862745 1-> calculate x_old 10 Enter y: 2 Enter initial x_old: 1 Convergence reached after 6 iterations. x_new = 1.4142135623731 ...


可见,随着迭代次数的增加,运算值会愈发接近真实值。很神奇的算法,可是怎么来的呢? 查了下wikipediawolfram,原来算法的名字叫Newton’s
Iteration (牛顿迭代法)。

下面是极其boring的数理介绍,不喜欢数学的言下之意也就是绝大部分人可以略过了。

简单推导

假设
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。

回到我们最开始的那个求2次方根的公式,令
x2 = n
,假设一关于
X
的函数
f(x)
为:

f(X) = X2 - n


f(X)
的一阶导为:

f'(X) = 2X


代入前面求到的最终式中:

Xk+1 = Xk - (Xk2 -
n)/2Xk


化简即得到我们最初提到的那个求平方根的神奇公式了:



 

用泰勒公式推导

在The Art and
4000
Science of C一书中有用到泰勒公式求平方根的算法,其实牛顿迭代法也可以看作是泰勒公式(Taylor
Series)的简化,先回顾下泰勒公式:



仅保留等式右边前两项:



f(X0+ε) = 0
,得到:



再令
X1 = X0 + ε0
,得到
ε1
…依此类推可知:



转化为:



内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  迭代 算法