【原创】寻找方程等于0的数值算法总结

机器学习中,很多问题都可以归结为寻找 f(x)=0 的点(例如,凸优化问题,寻找导数为0的点)。很多时候f(x)=0的解析解很难计算,下面,我们就总结一下该问题的数值计算方法。

1. Newton's Method(牛顿法)

牛顿法是利用函数在当前点的切线作为函数的近似,寻找当前点切线=0的点,作为下一个搜寻点。牛顿法的迭代公式如下:

\[{x_{n + 1}} = {x_n} - \frac{{f({x_n})}}{{f'({x_n})}}{\mkern 1mu} \]

下面是牛顿法法收敛的动态图示:

(注意:最优化问题里也有个”牛顿法“。虽然此”牛顿法"非彼“牛顿法”,但两者的思想还是挺相似的。最优化问题里,牛顿法是用二阶泰勒展开来近似当前的函数。)

2. Secand Method

该算法是牛顿法的近似,用上两个搜寻点的连线取代牛顿法里的切线,该线与y=0的交点就是下一个搜寻点。于牛顿法相比,Secand Method不需要计算导数,对于一阶不可微的函数,同样适用。算法的迭代公司如下:

\[{x_n} = {x_{n - 1}} - f({x_{n - 1}})\frac{{{x_{n - 1}} - {x_{n - 2}}}}{{f({x_{n - 1}}) - f({x_{n - 2}})}}\]

下面是Secand Method的迭代示意图:

3. Muller‘s Method

Muller's算法形式与Secand Method类似。不同的是Muller's算法通过本次迭代之前的三个迭代点信息来近似原函数。Muller算法与Secand算法的区别有点像最优化算法中梯度法和牛顿法的区别,前者都是一阶趋势迭代,后者都是二阶趋势迭代。Muller’s Method的迭代公式如下:

\[{y_k}(x) = f({x_{k - 1}}) + (x - {x_{k - 1}})f[{x_{k - 1}},{x_{k - 2}}] + (x - {x_{k - 1}})(x - {x_{k - 2}})f[{x_{k - 1}},{x_{k - 2}},{x_{k - 3}}]\]

其中,\(f[{x_{k - 1}},{x_{k - 2}}]\)和\(f[{x_{k - 1}},{x_{k - 2}},{x_{k - 3}}]\)是分差(Divided differences)。

\[f[{x_\nu }, \ldots ,{x_{\nu  + j}}]: = \frac{{f[{x_{\nu  + 1}}, \ldots ,{x_{\nu  + j}}] - f[{x_\nu }, \ldots ,{x_{\nu  + j - 1}}]}}{{{x_{\nu  + j}} - {x_\nu }}}\]

 

4. Householder's method

 Householder's method是一类通用算法,牛顿法只是Householder's method的一个特例。 Householder's method的迭代公式如下所示:

\[{x_{n + 1}} = {x_n} + d\;\frac{{{{\left( {1/f} \right)}^{(d - 1)}}({x_n})}}{{{{\left( {1/f} \right)}^{(d)}}({x_n})}}\]

可以证明:

\[|{x_{n + 1}} - a| \le K \cdot |{x_n} - a{|^{d + 1}}\]

所以,Householder's method算法的收敛速度是(d+1)阶。但是,有学者认为,算法的收敛更多的是来自迭代次数,而不是单次迭代的收敛速度。因此,2阶以上的收敛算法很少在实际中有应用。

 当d=1是,该算法就与上文提到的牛顿算法等价,推到公式如下:

\[\begin{array}{*{20}{c}}
{{x_{n + 1}} = }&{{x_n} + 1{\mkern 1mu} \frac{{\left( {1/f} \right)({x_n})}}{{{{\left( {1/f} \right)}^{(1)}}({x_n})}}}\\
= &{{x_n} + \frac{1}{{f({x_n})}} \cdot {{\left( {\frac{{ - f'({x_n})}}{{f{{({x_n})}^2}}}} \right)}^{ - 1}}}\\
= &{{x_n} - \frac{{f({x_n})}}{{f'({x_n})}}}
\end{array}\]

参考文献:

1. http://en.wikipedia.org/wiki/Newton%27s_method

2. http://en.wikipedia.org/wiki/Secant_method

3. http://en.wikipedia.org/wiki/Muller%27s_method

4. http://en.wikipedia.org/wiki/Householder%27s_method

 

 

posted @ 2015-05-27 15:13  snen  阅读(1350)  评论(0编辑  收藏  举报