IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 数据结构与算法 -> 最优化方法牛顿方法matlab代码-从零开始 -> 正文阅读

[数据结构与算法]最优化方法牛顿方法matlab代码-从零开始

?代码:各种最优化牛顿方法matlab程序.rar-算法与数据结构文档类资源-CSDN文库https://download.csdn.net/download/benchuspx/52145455

目录

1、最速下降法SD

2、Newton方法和修正的Newton方法

基本牛顿方法

阻尼牛顿法

混合牛顿方法

3、拟牛顿方法QN

4、共轭梯度方法

代码:


针对优化问题,常见的优化方法及其特点如下:

1、最速下降法SD

迭代点处目标函数泰勒展开用一次函数近似,迭代方向dk=-gk,步长alpha由(非)精确线搜索得到,x(k+1)=x(k)+alpha*dk),优化速度慢,迭代次数多,实际应用中几乎不使用了。

2、Newton方法和修正的Newton方法

基本牛顿方法

迭代点处目标函数泰勒展开用二次函数近似,dk=-inv(Gk)*gk,步长alpha=1。优化速度快。但是Hessen矩阵Gk不一定是正定和非奇异(可逆)的,而且可能出现迭代方向dk和梯度gk接近正交的情况导致目标函数f下降量极少。基本牛顿方法只有当初始点x0充分接近极小点x*时,才可能收敛,而且每一步都要计算hessan矩阵的值,每一步都要解一个线性方程组Gk*dk=-dk,计算量为o(n3)。

阻尼牛顿法

在基本牛顿法dk=-inv(Gk)*gk的基础上,步长alpha由(非)精确线搜索得到。就是在迭代方向dk上找到alpha使得下一个迭代点处的目标函数值f(xk+alpha*dk)最小。常见的非精确线搜索准则有Armijo准则,Goldstein准则(含Armijo),Wolfe准则(含Armijo),强Wolfe准则(含Armijo)。该方法由于加入了线搜索,即使迭代点离极小点x*稍远,也能收敛。但是仍然没有解决基本牛顿法的Gk可能不正定、奇异的问题。

为了解决牛顿法中迭代点xk处hessan矩阵Gk可能不正定、奇异的情况,产生了各种修正的Newton方法来修正Gk。比较常用的有混合Newton方法LM方法(Gk+v*I)和采用Cholesky(乔利斯基)分解的稳定Newon方法(该法是修正Newton方法中效果最好的,但是一般教科书没有讲)。

混合牛顿方法

在阻尼牛顿方法的基础上,加上如下判断:

如果Gk奇异,那么inv(Gk)不存在,那么这一步改用SD最速下降法,dk=-gk。

如果Gk非奇异但不正定,那么inv(Gk)也不正定,即gk'*inv(Gk)*gk<=0。由牛顿公式dk=-inv(Gk)*gk,则有gk'*dk>=0,即迭代点处的方向导数大于0,说明dk不是下降方向而是上升方向。此时另dk=-dk=inv(Gk)*gk即可。

可见,如果Gk一直奇异,那么此时混合牛顿法就是SD方法了,下降速度会很慢。而且它也继承了牛顿法的缺点,即每一步都要算Hessan矩阵中的二阶偏导值,计算量大。

3、拟牛顿方法QN

为了解决牛顿方法里每一步都需要求hessan矩阵里所有二阶导,而且hessan矩阵可能奇异、不正定的情况,干脆找一个正定对称矩阵B(k)来近似G(k),或者H(k)来近似inv(Gk)。B或者H的初始矩阵可以任意选取或者就选G(0),inv(G(0))。然后每步迭代的时候根据x(k+1)-x(k)和g(k+1)-g(k)来修正B(k)或H(k)。根据B和H的修正构造方式,可以分为对称秩1(SR1)方法和对称秩2方法,SR1和自身对偶,DFP和BFGS都是对称秩2方法且互相对偶。它们都是拟牛顿方法。

QN方法的好处是不用计算二阶导了,而是仅用一阶导就可以近似出G(k), 缺点是每一步都得存储上一步的B(k)或者H(k)。对于维数n很大的大规模优化问题,B和H的存储量是n^2量级,太大了。因此QN方法只能用于中小规模问题。

4、共轭梯度方法

共轭梯度方法和牛顿法的思路不一样。迭代方向选择为共轭梯度方向:dk=-gk+beta(k-1)*d(k-1)。对于目标函数是正定二次函数的问题,beta(k-1)=gk'*gk/(g(k-1)'*g(k-1)),称为FR线性共轭梯度方法。目标函数如果是一般线性函数,beta(k-1)=gk'*(g(k)-g(k-1))/(g(k-1)'g(k-1)),称为PRP非线性共轭梯度方法。

共轭梯度方法的优点是只用到了上一步的梯度和迭代方向向量,没有用到n^2量级的矩阵,因此存储量小,可以解决大规模优化问题。但是在中小规模问题上肯定效果不如QN法。

代码:

各种最优化牛顿方法matlab程序.rar-算法与数据结构文档类资源-CSDN文库https://download.csdn.net/download/benchuspx/52145455

详尽的线搜索程序,阻尼牛顿、混合牛顿、SR1、BFGS、DFP优化方法,以及三个非线性最小二乘目标函数,输出优化结果和过程图。配有详尽的注释,说明文档和参考文献。

?

  数据结构与算法 最新文章
【力扣106】 从中序与后续遍历序列构造二叉
leetcode 322 零钱兑换
哈希的应用:海量数据处理
动态规划|最短Hamilton路径
华为机试_HJ41 称砝码【中等】【menset】【
【C与数据结构】——寒假提高每日练习Day1
基础算法——堆排序
2023王道数据结构线性表--单链表课后习题部
LeetCode 之 反转链表的一部分
【题解】lintcode必刷50题<有效的括号序列
上一篇文章      下一篇文章      查看所有文章
加:2021-11-30 15:52:09  更:2021-11-30 15:54:50 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/26 13:56:01-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码