内容来自马昌凤编著的《最优化方法及其Matlab程序设计》,文章仅为个人的学习笔记,感兴趣的朋友详见原书。
本章讨论无约束优化问题minf(x)minf(x)minf(x)的最速下降法和牛顿法及其改进算法,前者简单而古老,虽不再具有实用性,却是研究其他无约束优化算法的基础;后者也是一种经典的无约束优化算法,具有收敛速度快和自适应性等优点。

最速下降方法及其Matlab实现

算法

程序

function [x,val,k]=grad(fun,gfun,x0)
% 功能: 用最速下降法求解无约束问题:  min f(x)
%输入:  x0是初始点, fun, gfun分别是目标函数和梯度
%输出:  x, val分别是近似最优点和最优值,  k是迭代次数.
maxk=5000;   %最大迭代次数
rho=0.5;sigma=0.4;
k=0;  epsilon=1e-5;
while(k<maxk)g=feval(gfun,x0);  %计算梯度d=-g;    %计算搜索方向(精确线搜索)if(norm(d)<epsilon), break; endm=0; mk=0;while(m<20)   %Armijo搜索if(feval(fun,x0+rho^m*d)<feval(fun,x0)+sigma*rho^m*g'*d)mk=m; break;endm=m+1;endx0=x0+rho^mk*d;k=k+1;
end
x=x0;
val=feval(fun,x0);

注:这里的funfunfun与gfungfungfun分指目标函数与梯度,需在grad运行前准备好。(Armijo搜索部分可详见第二章相关内容)

示例1

示例2

牛顿法及其Matlab实现

基本思想用迭代点xkx_kxk​处的一阶导数和二阶导数对目标函数进行二次函数近似(泰勒多项式),然后把二次模型的极小点作为新的迭代点,并不断重复这一过程,直至求得满足精度的近似极小点。

算法


牛顿法最突出的优点是收敛速度快,具有局部二阶收敛性。但是对初始点要求足够“靠近”极小点,否则,有可能导致算法不收敛。由于实际问题的精度极小点一般是未知的,为克服这一困难,故引入线搜索技术以得到大范围收敛的算法,即下面的阻尼牛顿法。(此处基于Armijo准则)

阻尼牛顿法

算法

程序

function [x,val,k]=dampnm(fun,gfun, Hess,x0)
%功能: 用阻尼牛顿法求解无约束问题:  min f(x)
%输入: x0是初始点, fun, gfun, Hess 分别是求
%         目标函数,梯度,Hesse 阵的函数
%输出:  x, val分别是近似最优点和最优值,  k是迭代次数.
maxk=100;   %给出最大迭代次数
rho=0.55;sigma=0.4;
k=0;  epsilon=1e-5;
while(k<maxk)gk=feval(gfun,x0); %计算梯度Gk=feval(Hess,x0);  %计算Hesse阵dk=-Gk\gk; %解方程组Gk*dk=-gk, 计算搜索方向if(norm(gk)<epsilon), break; end  %检验终止准则m=0; mk=0;while(m<20)   % 用Armijo搜索求步长 if(feval(fun,x0+rho^m*dk)<feval(fun,x0)+sigma*rho^m*gk'*dk)mk=m; break;endm=m+1;endx0=x0+rho^mk*dk;k=k+1;
end
x=x0;
val=feval(fun,x);
%gval=norm(gfun(x));

此处除需提前建立目标函数和梯度的M文件外,还需建立Hess矩阵的求解文件

function He=Hess(x)
n=length(x)
He=zeros(n,n);
He=[此处填函数的二阶求导结果]

修正牛顿法及其Matlab实现

牛顿法具有不低于二阶的收敛速度,但该算法要求目标函数的Hess矩阵在每个迭代点xkx_kxk​处是正定的,否则,难以保证牛顿方向dk=−Gk−1gkd_k=-G_k^{-1}g_kdk​=−Gk−1​gk​是fff在xkx_kxk​处的下降方向。为克服这一缺陷,故对其进行修正:将牛顿法与最速下降法结合起来,构造**“牛顿-最速下降算法”**。其基本思想为:当Hess正定时,采用牛顿方向作为搜索方向;否则,采用负梯度方向作为搜索方向。

算法

程序

function [x,val,k]=revisenm(fun,gfun,Hess,x0)
%功能: 用修正牛顿法求解无约束问题:  min f(x)
%输入: x0是初始点, fun, gfun, Hess 分别是求
%         目标函数,梯度,Hesse 阵的函数
%输出:  x, val分别是近似最优点和最优值,  k是迭代次数.
n=length(x0); maxk=150;
rho=0.55;sigma=0.4; tau=0.0;
k=0;  epsilon=1e-5;
while(k<maxk)gk=feval(gfun,x0); % 计算梯度muk=norm(gk)^(1+tau);Gk=feval(Hess,x0);  % 计算Hesse阵Ak=Gk+muk*eye(n);dk=-Ak\gk; %解方程组Gk*dk=-gk, 计算搜索方向if(norm(gk)<epsilon), break; end  %检验终止准则m=0; mk=0;while(m<20)   %用Armijo搜索求步长 if(feval(fun,x0+rho^m*dk)<feval(fun,x0)+sigma*rho^m*gk'*dk)mk=m; break;endm=m+1;endx0=x0+rho^mk*dk;k=k+1;
end
x=x0;
val=feval(fun,x);
%gval=norm(gfun(x));

第三章 最速下降法和牛顿法相关推荐

  1. (计算机组成原理)第三章存储系统-第六节4:Cache的写策略(写回法和全写法,写分配法和非写分配法)

    文章目录 一:写命中 (1)写回法(write-back) (2)全写法(write-through) 二:写不命中 (1)写分配法(write-allocate) (2)非写分配法(not-writ ...

  2. 周志华《机器学习》课后习题(第三章):线性模型

    作者 | 我是韩小琦 链接 | https://zhuanlan.zhihu.com/p/43270830 3.1 试分析在什么情况下,在以下式子中不比考虑偏置项b. 答: 在样本  中有某一个属性  ...

  3. 西瓜书第三章阅读笔记

    西瓜书第三章阅读笔记 第三章 线性模型 1.机器学习三要素 2.基本形式 3.线性回归 3.1 模型 3.2 策略 3.3 求解算法 4.对数几率回归 4.1 模型 4.2 策略 4.3 求解算法 5 ...

  4. DOS批处理高级教程:第三章 FOR命令中的变量(转)

    DOS批处理高级教程:第一章 批处理基础 DOS批处理高级教程:第二章 DOS循环for命令详解 DOS批处理高级教程:第三章 for命令中的变量 DOS批处理高级教程:第四章 批处理中的变量 DOS ...

  5. “JavaScript patterns”中译本 - 《JavaScript 模式》第三章

    第三章 直接量和构造函数 JavaScript中的直接量模式更加简洁.富有表现力,且在定义对象时不容易出错.本章将对直接量展开讨论,包括对象.数组和正则表达式直接量,以及为什么要使用等价的内置构造器函 ...

  6. 计算机硬件 OR CX 1,计算机硬件第三章ppt

    计算机硬件第三章ppt (113页) 本资源提供全文预览,点击全文预览即可全文预览,如果喜欢文档就下载吧,查找使用更方便哦! 19.90 积分 第 3 章 汇编语言程序设计 本章重点:§ 典型的汇编语 ...

  7. 计算机组成原理 第三章 存储系统

    第三章属于考察重点,涉及到存储器的扩展分类与cache的连接等知识点,不仅复杂而且很容易出错,属于重点内容. 3.1 存储器概述 存储器种类非常多,可以根据不同的角度进行分类. 按照在计算机中的作用分 ...

  8. 【正点原子FPGA连载】 第三章 硬件资源详解 摘自【正点原子】DFZU2EG/4EV MPSoC 之FPGA开发指南V1.0

    1)实验平台:正点原子MPSoC开发板 2)平台购买地址:https://detail.tmall.com/item.htm?id=692450874670 3)全套实验源码+手册+视频下载地址: h ...

  9. 软考中项第三章 信息系统集成专业知识

    第三章 信息系统集成专业知识 信息系统的生命周期可以分为立项.开发.运维及消亡四个阶段 立项阶段:概念阶段或需求阶段,这一阶段根据用户业务发展和经营管理的需要,提出建设信息系统的初步构想,然后对企业信 ...

  10. 小白学机器学习西瓜书-第三章对数几率回归

    小白学机器学习西瓜书-第三章对数几率回归 3.3 对数几率回归 3.3.1 对数几率函数 3.3.1 估计参数 上一部分我们介绍了线性回归,包括简单的二元回归和多元回归,这两个主要解决的是拟合预测的问 ...

最新文章

  1. 关于js中cookie的认识
  2. 机器学习样本标记 示意代码
  3. 企鹅帝国的疯狂反扑!
  4. 【封装那些事】 缺失封装
  5. linux mysql 指令无效_linux下安装mysql,mysql命令失效的原因
  6. [转]SQL Server 2000执行计划成本(1/5)
  7. Android Material Design TabLayout属性app:tabMode和app: tabGravity
  8. python函数参数学习_python学习笔记-11.函数参数和返回值进阶
  9. C++ 常用集合算法
  10. ckeditor java 上传_java使用CKEditor实现图片上传功能
  11. @GetMapping和@PostMapping详解
  12. hihocoder #1617 : 方格取数(dp)
  13. linnux 流量控制模块tc_FS4008-40-08-CV-A气体质量流量计【汉川仪器】阿坝资讯
  14. android网络请求库volley方法详解
  15. Linux根据软件包的名称查看可供安装的包
  16. Drawing with GoogLeNet
  17. C++进阶教程之信号处理
  18. html 中的name,id ,value,class,list 作用与区别
  19. 五大地形等高线特征_【新微专题】从等高线地形图的实际应用分析如何培养图表判读能力?...
  20. linux 下多个图片合并,FFmpeg将多张图片合成视频

热门文章

  1. TMS320C6678+Kintex-7开发板——DSP程序固化操作手册
  2. red5流媒体服务器系统,red5流媒体服务器
  3. 【WeUI】关于jQuery WeUI和WeUI版本兼容的问题
  4. 全网最详细ENSP安装教程,零基础网工小白必看!
  5. Windows10家庭版远程桌面登录——RDPWrap
  6. 逻辑表达式三种化简方法
  7. 计算机累论文的数据字典怎么写,毕业论文中数据字典应该这样写
  8. 基于python实现微信公众号爬虫_基于Python实现微信公众号爬虫进行数据分析
  9. 【ANSYS命令流】结构分析单元与材料模型
  10. Tomcat安装及idea配置教程