二阶偏微分方程组 龙格库塔法_牛顿法和拟牛顿法——(书中附录B)

牛顿法(Newton method)和拟牛顿法(quasi-Newton method)也是求解无约束最优化问题的常用方法,具有收敛速度快的优点。

牛顿法是迭代算法,每一步需要求解目标函数的海赛矩阵的逆矩阵,计算比较复杂

拟牛顿法通过正定矩阵近似海赛矩阵的逆矩阵或海赛矩阵,简化了这一计算过程。

本篇设计的算法有:牛顿法、拟牛顿法、DFP算法、BFGS算法、L-BFGS算法、Broyden类算法。

1.牛顿法

对于一个无约束问题

,求该目标函数的
极小值点。

我们知道,通常情况下对于目标函数来说,极小值点的一阶导数为0。

29439f07e2ab70aa16e8f56af4ac1bd0.png

二阶泰勒展开为:

其中,

,即为
的梯度向量在点
处的值;
海赛矩阵(Hesse matrix)

那么函数的一阶导数(对上面的二阶泰勒展开求导)就可以表示为:

上式就是我们的一阶导函数的直线近似,即上式为通过原函数的一阶导函数在点

上的切线。

92b8655eb9843ab6821ce5f910decbc0.gif
https://blog.csdn.net/u012294618/article/details/79750224

如上图所示,已知第

次迭代得到的
切线方程为:

我们令其为0得到:

从而解得第

次迭代点为:
。此时得到了一条新的
切线,若目标函数为凸函数,则这个新的迭代点是逐步接近于极小值点的。

这个就是牛顿法!

但是我们可以看见在每一次的迭代过程中,都要涉及到

的计算,实际应用中,我们不直接计算它,而是将它转化为
求解线性代数方程组的形式:令
,即
,此时迭代过程变成:

来说一次,这就是牛顿法!!

牛顿法的迭代公式中由于没有步长因子,是定步长迭代,对于非凸目标函数,有时会使函数值上升,即出现

的情况,甚至最终发散导致计算失败。为了尽量避免这种情况发生,可以采用
“阻尼牛顿法”,即增加了一个步长因子
,将迭代式修改为:

牛顿法的一些致命缺点

1.海赛矩阵的逆矩阵计算

计算量可能很大;

2.海赛矩阵可能无法保持正定,这样就无法计算

,此时牛顿法失效。

这时我们就应该思考了,能不能绕过

的计算呢?
拟牛顿法就可以。

2.拟牛顿法

拟牛顿法的基本思想是:不用求二阶偏导数而构造出可以近似海赛矩阵(或海赛矩阵的逆)的正定对称阵。

不同的构造方法对应能够产生不同的拟牛顿法。(可以理解成,"拟牛顿法"是来近似"牛顿法"的,所以在“牛顿法”前面加了一个“拟”字。拟牛顿法可不止一种,它包含多种方法:如DFP算法、BFGS算法、Broyden类算法。)

我们说了,我们要构造一个近似海赛矩阵(或海赛矩阵的逆)的正定矩阵,首先需要满足拟牛顿条件。

(1)拟牛顿条件

泰勒展开我们得到了以下近似:

假设找到了下一步迭代点

,则有:

,则:

上述就是拟牛顿条件,即我们选择的

的替补,应当满足上面的条件才行。

从拟牛顿条件我们可知,有两种替补方式

1)选择

作为
的替补。即
(Davidon-Fletcher-Powell)算法;

2)选择

作为
的替补。即
(Broyden-Fletcher-Goldfarb-Shanno)算法。这两种算法通称“
拟牛顿法”,这两个算法名称缩写看起来高大上,但其实就是几个人名的首字母缩写,没有什么高大上的含义。

(2)DFP算法

DFP算法用

作为
的近似或替补,
我们知道海赛矩阵的更新是每一个迭代步骤上计算二阶偏导得到的,此时用
做近似了之后怎么更新呢?我们直接给出更新公式:

可以证明,如果初始矩阵

是正定对称的,则迭代过程中的每个矩阵
都是正定对称的。并且一般我们取初始矩阵
,即取初始矩阵为
单位阵。那么每一步迭代中的
都能通过上式得到。

此时有个疑问,计算

时,要用到
这个值如何确定的?是这么来的:

是当前点的一阶导,是可以计算出来的;我们置
;进行
一维搜索:求
使得
;置

这就绕过了

的计算。

可以对照算法过程来理解,DFP算法过程如下:

输入:目标函数

,梯度
,精度要求

输出:

的极小点

1)选定初始点

,取
为正定对称矩阵,置

2)计算

。若
,则停止计算,得近似解
;否则转第3步

3)置

4)一维搜索:求

使得

5)置

6)计算

,若
,则停止计算,得近似解
;否则,按式
算出

7)置

,转到第3步。

(3)BFGS算法

BFGS算法是最流行的你牛顿算法。它与DFP相比,性能更佳。该算法是用

来近似
海赛矩阵
。同DFP算法,我们也直接给出
的迭代公式:

同DFP算法,也可以证明,如果初始矩阵

是正定对称的,则迭代过程中的每个矩阵
都是正定对称的。并且一般我们取初始矩阵
,即取初始矩阵为
单位阵。那么每一步迭代中的
都能通过上式得到。

BFGS的算法流程与DFP相似,如下:

输入:目标函数

,梯度
,精度要求

输出:

的极小点

1)选定初始点

,取
为正定对称矩阵,置

2)计算

。若
,则停止计算,得近似解
;否则转第3步

3)由

求出

4)一维搜索:求

使得

5)置

6)计算

,若
,则停止计算,得近似解
;否则,按式
算出

7)置

,转到第3步。

上述就是具体地算法过程了,当然,我们也可以从BFGS算法矩阵

的迭代公式得到BFGS算法关于
的迭代公式。

首先我们介绍Sherman-Morrison公式(谢尔曼莫里森公式):假设

是n阶可逆矩阵,
是n维向量,且
也是可逆矩阵,则

这就是Sherman-Morrison公式。

如果我们记

,那么对
的迭代公式
两次应用Sherman-Morrison公式得到
的迭代公式:

即称此式为BFGS算法关于

的迭代公式
。(公式的具体推导过程请参考本专栏的另一篇文章https://zhuanlan.zhihu.com/p/91230555

(4)L-BFGS算法

在BFGS算法中,每一步迭代都需要用到一个

阶矩阵
,当
很大时,存储这个矩阵将消耗大量计算机资源,需要的存储空间大小为

L-BFGS算法就是为了解决这个问题而提出的,其目的是减少BFGS算法迭代过程中所需的内存开销。

L-BFGS(Limited-memory BFGS或Limited-storage BFGS)是BFGS算法的进一步近似。其基本思想是:不再存储完整的矩阵

,而是存储计算过程中的向量序列
,需要矩阵
时,利用向量序列
的计算来代替。而且,向量序列
也不是所有的都存储,而是保留最新的
个,每次计算
时,只利用最新的
个向量序列。这样一来,存储空间由原来的
降至

(5)Broyden类算法

根据前面的内容,我们将由DFP算法中

的迭代公式得到的
记作
;将由BFGS算法中
的迭代公式得到的
记作
,它们都满足拟牛顿条件,并且都是正定的,所以它们的
线性组合

满足拟牛顿条件而且是正定的。其中

这样,根据取不同的

,就可以得到一系列的拟牛顿法,称为Broyden类算法。

上面的所有拟牛顿算法都仅仅是简述,例如DFP和BFGS算法的迭代公式没有推导其由来,L-BFGS算法也仅仅是提了一下。如果需要深入理解,可以参考下面的这个博客链接:

https://blog.csdn.net/songbinxu/article/details/79677948

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/356211.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

HTML CSS 特殊字符表

转自CSDN博客:http://blog.csdn.net/bluestarf/article/details/40652011 HTML有许多特殊的字符,您对此有多少了解?平时在WEB制作中,您又有用到多少?或者说你在平时使用之时,是否也会碰到,有许多…

北京人文计算机学院,北京人文大学计算机信息工程学院举行元旦晚会

2011年12月28日晚上8时许,北京人文大学第一阶梯教室座无虚席,计算机信息工程学院“2011年元旦晚会”在这里隆重举行。计算机信息工程学院副院长林月珍、喻新和,团委书记李四辈老师,学生处副处长肖淑芬老师,学生处副处长…

teamcity_TeamCity工件:HTTP,Ant,Gradle和Maven

teamcity您可以通过几种方式检索TeamCity工件? 我说有很多选择 ! 如果您使用的是Java构建工具,那么可以使用简单的HTTP请求,Ant Ivy,Gradle和Maven下载和使用TeamCity构建配置产生的二进制文件。 怎么样? …

arcgis双标准纬线等角圆锥投影_世界地图是怎么制作出来的,各投影算法的来历...

今天小编带大家了解一下下,目前通用的世界地图是怎样作出来的。一、通用的世界地图版本——“墨卡托投影”16世纪早期,正值大航海时代,航海家们发现很难将他们的航线画在图上,如何将球面上的一部分绘制在平面上,用直线…

js区分大小写

JavaScript 区分大小写 区分大小写 JavaScript 语言是区分大小写的&#xff0c;不管是命名变量还是使用关键字的时候。 如前面 alert弹出提示框 的例子&#xff0c;如果将 alert 命令改为 ALERT 或者 alerT 等&#xff1a; <html> <head> <script type"tex…

测试双打:模拟,假人和存根

大多数班级都有合作者。 在进行单元测试时&#xff0c;您通常希望避免使用那些协作者的实际实现方式来避免测试的脆弱性和绑定/耦合&#xff0c;而应使用测试双打&#xff1a;模拟&#xff0c;存根和双打。 本文引用了有关该主题的两篇现有文章&#xff1a;Martin Fowler的Mock…

计算机的iscsi配置,PC端的iSCSI参数设置方法

PC端的iSCSI参数设置方法上面介绍完NAS端的设置&#xff0c;接下来再来给大家介绍一下PC端的iSCSI设置&#xff0c;主要是实现在PC端上连接使用NAS上的iSCSI存储空间&#xff0c;这里我们以Windows 7 SP1系统为例(Windows8上的设置基本与之类似)。1.首先打开控制面板&#xff0…

纸筒制作机器人_5个万圣节小手工,带孩子一起动手制作,简单又有趣!

在西方国家&#xff0c;除了圣诞节&#xff0c;最受期待的节日莫过于是十月底的万圣节了&#xff0c;提起这个节日&#xff0c;这五大元素可以说是不错的体现&#xff1a;搞怪的南瓜、可爱的蜘蛛、萌萌哒蝙蝠、点睛之笔的蜡烛&#xff0c;以及可以用来迎客的门饰。今天我们就来…

一些常用正则表达式片段的分析

前言&#xff1a; 明天就要奔赴上海了&#xff0c;希望是个好的开始&#xff0c;好久没用正则表达式了&#xff0c;还好之前好好学习过&#xff0c;捡起来也是很容易&#xff0c;好了&#xff0c;为了才重回巅峰状态&#xff0c;想要入门的可以给大家推荐几篇文章&#xff0c; …

计算机应用昨早领域,计算机应用-第1章.ppt

计算机应用-第1章课程简介 本课程的主要任务是通过讲课和练习&#xff0c;使同学们明确计算机整体概念。掌握计算机中的数制及其表示和运算、计算机系统的基本组成和基本工作原理、典型系统软件和应用软件的使用&#xff0c;以及网络与多媒体的基础知识。培养大家触类旁通的应用…

原理c++_浅谈C/S和B/S架构的工作原理及优缺点

C/S架构一、C/S架构及其背景C/S架构是一种比较早的软件架构&#xff0c;主要应用于局域网内。在这之前经历了集中计算模式&#xff0c;随着计算机网络的进步与发展&#xff0c;尤其是可视化工具的应用&#xff0c;出现过两层C/S和三层C/S架构&#xff0c;不过一直很流行也比较经…

java笔记之线程方式1启动线程

* 需求&#xff1a;我们要实现多线程的程序。 * 如何实现呢? * 由于线程是依赖进程而存在的&#xff0c;所以我们应该先创建一个进程出来。 * 而进程是由系统创建的&#xff0c;所以我们应该去调用系统功能创建一个进程。 * Java是不能直接调用系统功能的&#xff0c;所…

2015年Devoxx比利时–最后的想法

好吧&#xff0c;另一个Devoxx对我而言已经结束了&#xff0c;它必须是第六次中的第五次&#xff08;或更多次&#xff09;不记得说实话。 距离我上次上任已经3年了&#xff0c;所以有点回头了。 Devoxx&#xff08;比利时&#xff09;正在成长&#xff0c;实际上这是我第一次…

全国职业院校技能大赛软件测试题目,我院荣获2017年全国职业院校技能大赛软件测试赛项一等奖...

6月6日&#xff0c;2017年全国职业院校技能大赛“软件测试”赛项在河南许昌落下帷幕&#xff0c;共有来自全国29个省市(自治区)的87支代表队261名选手参加比赛。由我院计算机系陈爽、张冬雪、侯博睿等三名同学组成的北京市第二代表队荣获大赛一等奖(第五名)。王红霞、温绍洁荣获…

ntp如何确认与服务器偏差_CentOS 8 启用 NTP 服务

NTP 服务是什么和为什么我们需要在我们的服务器启用 NTP 服务&#xff1f;可能很多人都不是非常了解&#xff0c;简单来说就是我们希望我们服务器的时间是准确的没有偏差的。这个的意义在数据插入和你程序取得计算机时间的时候是准确的。比如说在 java 中如果 new date() 将会获…

JavaFX上手--第1天

1.第一个JavaFX Application JavaFX 使用Java来制作可视化图形&#xff0c;可以做动画和3D效果&#xff0c;JavaFX从JDK中直接使用。 package application;import javafx.application.Application; import javafx.stage.Stage; import javafx.scene.Scene; import javafx.scene…

年月日软件测试用例的设计,实验三日期题白盒测试用例设计.doc

实验三日期题白盒测试用例设计日期问题白盒测试用例的设计(实验时间2012.3.21)一、实验目的1&#xff0e;熟练掌握如何运用基路径测试方法进行测试用例设计。二、实验内容1、题目前一日函数PreDate是NextDate的逆函数(代码实现见下)&#xff0c;实现功能为&#xff1a;输入1800…

机制 linux_从一道面试题谈linux下fork的运行机制

今天一位朋友去一个不错的外企面试linux开发职位&#xff0c;面试官出了一个如下的题目&#xff1a;给出如下C程序&#xff0c;在linux下使用gcc编译&#xff1a;#include "stdio.h"#include "sys/types.h"#include "unistd.h"int main(){pid_t …

p1417 烹调方案_Java 8的烹调方式–拼图项目

p1417 烹调方案什么是Project Jigsaw&#xff1a;Project Jigsaw是使Java编译器模块知道的项目。 多年以来&#xff0c;Java API一直是单块的&#xff0c;即从代码的任何部分都可以平等地看到整个API。 还没有任何方法可以声明代码对任何其他用户库的依赖关系。 拼图项目试图以…

jQuery progression 表单进度

progression.js是一款表单输入完成进度插件。支持自定义提示框大小、方向、左边、动画效果、间距等&#xff0c;也支持是否显示进度条、字体大小、颜色、背景色等。 在线实例 实例演示 使用方法 <form id"myform"> <p> <label>点击一个…