分类:
2012-06-03 14:34:00
求n的平方根,先假设一猜测值 先让我们来验证下这个巧妙的方法准确性,来算下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 ... 可见,随着迭代次数的增加,运算值会愈发接近真实值。很神奇的算法,可是怎么来的呢? 查了下和,原来算法的名字叫Newton’s Iteration (牛顿迭代法)。 下面是极其boring的数理介绍,不喜欢数学的言下之意也就是绝大部分人可以略过了。 简单推导假设 求出 简化等式得到: 然后利用得到的最终式进行迭代运算直至求到一个比较精确的满意值,为什么可以用迭代法呢?理由是中值定理(Intermediate Value Theorem):
我们先猜测一 回到我们最开始的那个求2次方根的公式,令
求
代入前面求到的最终式中:
化简即得到我们最初提到的那个求平方根的神奇公式了:
用泰勒公式推导在The Art and Science of C一书中有用到泰勒公式求平方根的算法,其实牛顿迭代法也可以看作是泰勒公式(Taylor Series)的简化,先回顾下泰勒公式: 仅保留等式右边前两项: 令 再令 转化为: |
引申
从推导来看,其实牛顿迭代法不仅可以用来求平方根,还可以求立方根,甚至更复杂的运算。
牛顿迭代法——百度百科