首页 > 其他 > 详细

4.1牛顿迭代法(转)

时间:2016-03-11 13:50:58      阅读:235      评论:0      收藏:0      [点我收藏+]

文章来源:

  牛顿法http://blog.csdn.net/luoleicn/article/details/6527049

在我看来,牛顿法至少有两个应用方向,1、求方程的根,2、最优化。牛顿法涉及到方程求导,下面的讨论均是在连续可微的前提下讨论。

1、求解方程。

并不是所有的方程都有求根公式,或者求根公式很复杂,导致求解困难。利用牛顿法,可以迭代求解。

原理是利用泰勒公式,在x0处展开,且展开到一阶,即f(x) = f(x0)+(x-x0)f‘(x0)

求解方程f(x)=0,即f(x0)+(x-x0)*f‘(x0)=0,求解x = x1=x0-f(x0)/f‘(x0),因为这是利用泰勒公式的一阶展开,f(x) = f(x0)+(x-x0)f‘(x0)处并不是完全相等,而是近似相等,这里求得的x1并不能让f(x)=0,只能说f(x1)的值比f(x0)更接近f(x)=0,于是乎,迭代求解的想法就很自然了,可以进而推出x(n+1)=x(n)-f(x(n))/f‘(x(n)),通过迭代,这个式子必然在f(x*)=0的时候收敛。整个过程如下图:

技术分享

 

2、牛顿法用于最优化

在最优化的问题中,线性最优化至少可以使用单纯行法求解,但对于非线性优化问题,牛顿法提供了一种求解的办法。假设任务是优化一个目标函数f,求函数f的极大极小问题,可以转化为求解函数f的导数f‘=0的问题,这样求可以把优化问题看成方程求解问题(f‘=0)。剩下的问题就和第一部分提到的牛顿法求解很相似了。

这次为了求解f‘=0的根,把f(x)的泰勒展开,展开到2阶形式:

技术分享

这个式子是成立的,当且仅当 Δ无线趋近于0。此时上式等价与:

技术分享

求解:

技术分享

得出迭代公式:

技术分享

一般认为牛顿法可以利用到曲线本身的信息,比梯度下降法更容易收敛(迭代更少次数),如下图是一个最小化一个目标方程的例子,红色曲线是利用牛顿法迭代求解,绿色曲线是利用梯度下降法求解。

技术分享

在上面讨论的是2维情况,高维情况的牛顿迭代公式是:

技术分享

其中H是hessian矩阵,定义为:

技术分享

 

高维情况依然可以用牛顿迭代求解,但是问题是Hessian矩阵引入的复杂性,使得牛顿迭代求解的难度大大增加,但是已经有了解决这个问题的办法就是Quasi-Newton methond,不再直接计算hessian矩阵,而是每一步的时候使用梯度向量更新hessian矩阵的近似。

Matlab代码:

syms x1 x2
f = exp(x1^2-x1+2*x2^2+4);
v = [x1,x2];
df = jacobian(f,v);
df = df.‘;
G = jacobian(df,v);
epson = 1e-12;
xm = [0,0]‘;
pd = subs(df,{x1,x2},{xm(1,1),xm(2,1)});%partial derivate
H = subs(G,{x1,x2},{xm(1,1),xm(2,1)}); %hessian matrix
k=0;
while(norm(pd)>epson)
step = -H\pd;
xm = xm + step;
pd=subs(df,{x1,x2},{xm(1,1),xm(2,1)});
H = subs(G,{x1,x2},{xm(1,1),xm(2,1)});
k=k+1;
end
k
format short;
xm

4.1牛顿迭代法(转)

原文:http://www.cnblogs.com/live-and-learn077/p/5265160.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!