此部分内容接《02(a)多元无约束优化问题-牛顿法》!!!

第三类:拟牛顿法(Quasi-Newton methods)

拟牛顿法的下降方向写为:

${{\mathbf{d}}_{k}}=-{{\mathbf{S}}_{k}}\cdot \nabla f({{\mathbf{x}}_{k}})$

关键就是这里的${{\mathbf{S}}_{k}}$,主要有两拨人对拟牛顿法做出了贡献他们分别针对${{\mathbf{S}}_{k}}$,提出了两种不同的方法;注:下式中的${{\mathbf{\delta }}_{k}}={{\mathbf{x}}_{k+1}}-{{\mathbf{x}}_{k}}$,${{\mathbf{\gamma }}_{k}}=\nabla f({{\mathbf{x}}_{k+1}})-\nabla f({{\mathbf{x}}_{k}})$。

第一拨人:Davidon-Fletcher-Powell (DFP),初始值${{\mathbf{S}}_{0}}=\mathbf{E}$,且

\[{{\mathbf{S}}_{k+1}}={{\mathbf{S}}_{k}}+\frac{{{\mathbf{\delta }}_{k}}\mathbf{\delta }_{k}^{T}}{\mathbf{\delta }_{k}^{T}{{\mathbf{\gamma }}_{k}}}-\frac{{{\mathbf{S}}_{k}}{{\mathbf{\gamma }}_{k}}\mathbf{\gamma }_{k}^{T}{{\mathbf{S}}_{k}}}{\mathbf{\gamma }_{k}^{T}{{\mathbf{S}}_{k}}{{\mathbf{\gamma }}_{k}}}\]

第二拨人:Broyden-Fletcher-Goldfarb-Shanno(BFGS)初始值${{\mathbf{S}}_{0}}=\mathbf{E}$,且

\[{{\mathbf{S}}_{k+1}}={{\mathbf{S}}_{k}}+\left( 1+\frac{\mathbf{\gamma }_{k}^{T}{{\mathbf{S}}_{k}}{{\mathbf{\gamma }}_{k}}}{\mathbf{\gamma }_{k}^{T}{{\mathbf{\delta }}_{k}}} \right)\frac{{{\mathbf{\delta }}_{k}}\mathbf{\delta }_{k}^{T}}{\mathbf{\gamma }_{k}^{T}{{\mathbf{\delta }}_{k}}}-\frac{{{\mathbf{\delta }}_{k}}\mathbf{\gamma }_{k}^{T}{{\mathbf{S}}_{k}}+{{\mathbf{S}}_{k}}{{\mathbf{\gamma }}_{k}}\mathbf{\delta }_{k}^{T}}{\mathbf{\gamma }_{k}^{T}{{\mathbf{\delta }}_{k}}}\]

由于这两拨人所构造${{\mathbf{S}}_{k+1}}$的目的就是,在计算量小的情况下去接近${{H}^{-1}}({{\mathbf{x}}_{k}})$,如果${{H}^{-1}}({{\mathbf{x}}_{k}})$不好(不是正定的),这个两拨人提出的这种近似的方法,也会规避这种情况,保证${{\mathbf{S}}_{k+1}}$是正定的。

我们如何直观的验证,${{\mathbf{S}}_{k+1}}$是接近${{H}^{-1}}({{\mathbf{x}}_{k\text{+1}}})$的呢?我们先拿一个一元函数来试试,对于一元函数来说,它的Hessian阵可以写为:

\[H({{x}_{k+1}})={f}''({{x}_{k+1}})=\frac{{f}'({{x}_{k+1}})-{f}'({{x}_{k}})}{{{x}_{k+1}}-{{x}_{k}}}=\frac{{{\gamma }_{k}}}{{{\delta }_{k}}}\Rightarrow H({{x}_{k+1}})=\frac{{{\gamma }_{k}}}{{{\delta }_{k}}}\]

这里的${{\gamma }_{k}},{{\delta }_{k}}$和前面多元函数的含义一样,Hessian阵的逆矩阵${{H}^{-1}}({{x}_{k+1}})$可以写为:

\[{{H}^{-1}}({{x}_{k+1}})=\frac{{{\delta }_{k}}}{{{\gamma }_{k}}}\Rightarrow {{H}^{-1}}({{x}_{k+1}}){{\gamma }_{k}}={{\delta }_{k}}\]

由式(20)可见,Hessian阵的逆矩阵和${{\gamma }_{k}},{{\delta }_{k}}$之间有这样的关系,那么类比到${{\mathbf{S}}_{k+1}}$和${{\mathbf{\gamma }}_{k}},{{\mathbf{\delta }}_{k}}$之间的关系,如果${{\mathbf{S}}_{k+1}}$是非常接近${{H}^{-1}}({{\mathbf{x}}_{k\text{+1}}})$,那么一定有${{\mathbf{S}}_{k+1}}{{\mathbf{\gamma }}_{k}}={{\mathbf{\delta }}_{k}}$成立。(在工程上大多数情况下第二拨人的方法的效果比第一拨人好)。

可以自行验证${{\mathbf{S}}_{k+1}}{{\mathbf{\gamma }}_{k}}={{\mathbf{\delta }}_{k}}$:………….

Step3:通过Step2确定下降方向${{\mathbf{d}}_{k}}$之后,$f({{\mathbf{x}}_{k}}+{{\alpha }_{k}}{{\mathbf{d}}_{k}})$可以看成${{\alpha }_{k}}$的一维函数,这一步的主要方法有(Dichotomous search, Fibonacci search, Goldensection search, quadratic interpolation method, and cubic interpolation method);所确定一个步长${{\alpha }_{k}}>0$,${{\mathbf{x}}_{k+1}}={{\mathbf{x}}_{k}}+{{\alpha }_{k}}{{\mathbf{d}}_{k}}$;

Step4: if走一步的距离$\left\| {{\alpha }_{k}}{{\mathbf{d}}_{k}} \right\|<\varepsilon $,则停止并且输出解${{\mathbf{x}}_{k+1}}$;else $k:=k+1$并返回Step2,继续迭代。

最新文章

  1. About_类与对象
  2. (更新)Java + 腾讯企业邮箱 + javamail + SSL 发送邮件
  3. Win10(win7) 安装vs2015(2012)出现ASP.NET 4.0/4.5 尚未在 Web 服务器上注册 下载这个补丁安装就可以了
  4. socket reuse
  5. cobbler安装、部署、测试
  6. C#和SQl 注入字符串的攻击 和 防止注入字符转的攻击
  7. 每日学习心得:CustomValidator验证控件验证用户输入的字符长度、Linq 多字段分组统计、ASP.NET后台弹出confirm对话框,然后点击确定,执行一段代码
  8. [课程相关]附加题——stack的理解
  9. IOS之swift第一课基础代码
  10. Python读取Excel数据
  11. memcached 内存管理 分析(转)
  12. objective-c 关键字和概念
  13. 第33届 MPD软件工作坊(南京站)有哪些亮点值得我们参加?
  14. delphi 获取硬盘序列号、cpu号、bios号、网卡号
  15. Echars 6大公共组件详解
  16. Navicat 连接VMware中Ubuntu 下的mysql5.7遇到的坑
  17. 中间件之Kafka
  18. 给一个由n-1个整数组成的未排序的序列,其元素都是1~n中的不同的整数。如何在线性时间复杂度内寻找序列中缺失的整数
  19. iKcamp|基于Koa2搭建Node.js实战(含视频)☞ 视图Nunjucks
  20. 实效云计算用户组(ECUG) 与 阿里云

热门文章

  1. js的一些写法问题
  2. API Hook基本原理和实现
  3. memcached对中文key的支持问题
  4. UWP StorageFile StorageFolder StorageFileHelper
  5. 企业级架构 MVVM 模式指南 (WPF 和 Silverlight 实现) 译(1)
  6. UWP 圆角TextBox和PassWord框
  7. Arch Linux 是个 针对 i686 优化的 Linux 发行版(通过可以轻松使用的二进制包系统 - pacman)
  8. qlineedit设置背景颜色(使用QPalette的方法不行,必须使用QSS)
  9. Qt云服务/云计算平台QTC(Qt Cloud Services)入门(0)
  10. delphi中move函数的正确理解(const和var一样,都是传地址,所以Move是传地址,而恰恰不是传值)太精彩了 good