第三章 最速下降法和牛顿法
内容来自马昌凤编著的《最优化方法及其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−1gk是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));
第三章 最速下降法和牛顿法相关推荐
- (计算机组成原理)第三章存储系统-第六节4:Cache的写策略(写回法和全写法,写分配法和非写分配法)
文章目录 一:写命中 (1)写回法(write-back) (2)全写法(write-through) 二:写不命中 (1)写分配法(write-allocate) (2)非写分配法(not-writ ...
- 周志华《机器学习》课后习题(第三章):线性模型
作者 | 我是韩小琦 链接 | https://zhuanlan.zhihu.com/p/43270830 3.1 试分析在什么情况下,在以下式子中不比考虑偏置项b. 答: 在样本 中有某一个属性 ...
- 西瓜书第三章阅读笔记
西瓜书第三章阅读笔记 第三章 线性模型 1.机器学习三要素 2.基本形式 3.线性回归 3.1 模型 3.2 策略 3.3 求解算法 4.对数几率回归 4.1 模型 4.2 策略 4.3 求解算法 5 ...
- DOS批处理高级教程:第三章 FOR命令中的变量(转)
DOS批处理高级教程:第一章 批处理基础 DOS批处理高级教程:第二章 DOS循环for命令详解 DOS批处理高级教程:第三章 for命令中的变量 DOS批处理高级教程:第四章 批处理中的变量 DOS ...
- “JavaScript patterns”中译本 - 《JavaScript 模式》第三章
第三章 直接量和构造函数 JavaScript中的直接量模式更加简洁.富有表现力,且在定义对象时不容易出错.本章将对直接量展开讨论,包括对象.数组和正则表达式直接量,以及为什么要使用等价的内置构造器函 ...
- 计算机硬件 OR CX 1,计算机硬件第三章ppt
计算机硬件第三章ppt (113页) 本资源提供全文预览,点击全文预览即可全文预览,如果喜欢文档就下载吧,查找使用更方便哦! 19.90 积分 第 3 章 汇编语言程序设计 本章重点:§ 典型的汇编语 ...
- 计算机组成原理 第三章 存储系统
第三章属于考察重点,涉及到存储器的扩展分类与cache的连接等知识点,不仅复杂而且很容易出错,属于重点内容. 3.1 存储器概述 存储器种类非常多,可以根据不同的角度进行分类. 按照在计算机中的作用分 ...
- 【正点原子FPGA连载】 第三章 硬件资源详解 摘自【正点原子】DFZU2EG/4EV MPSoC 之FPGA开发指南V1.0
1)实验平台:正点原子MPSoC开发板 2)平台购买地址:https://detail.tmall.com/item.htm?id=692450874670 3)全套实验源码+手册+视频下载地址: h ...
- 软考中项第三章 信息系统集成专业知识
第三章 信息系统集成专业知识 信息系统的生命周期可以分为立项.开发.运维及消亡四个阶段 立项阶段:概念阶段或需求阶段,这一阶段根据用户业务发展和经营管理的需要,提出建设信息系统的初步构想,然后对企业信 ...
- 小白学机器学习西瓜书-第三章对数几率回归
小白学机器学习西瓜书-第三章对数几率回归 3.3 对数几率回归 3.3.1 对数几率函数 3.3.1 估计参数 上一部分我们介绍了线性回归,包括简单的二元回归和多元回归,这两个主要解决的是拟合预测的问 ...
最新文章
- 关于js中cookie的认识
- 机器学习样本标记 示意代码
- 企鹅帝国的疯狂反扑!
- 【封装那些事】 缺失封装
- linux mysql 指令无效_linux下安装mysql,mysql命令失效的原因
- [转]SQL Server 2000执行计划成本(1/5)
- Android Material Design TabLayout属性app:tabMode和app: tabGravity
- python函数参数学习_python学习笔记-11.函数参数和返回值进阶
- C++ 常用集合算法
- ckeditor java 上传_java使用CKEditor实现图片上传功能
- @GetMapping和@PostMapping详解
- hihocoder #1617 : 方格取数(dp)
- linnux 流量控制模块tc_FS4008-40-08-CV-A气体质量流量计【汉川仪器】阿坝资讯
- android网络请求库volley方法详解
- Linux根据软件包的名称查看可供安装的包
- Drawing with GoogLeNet
- C++进阶教程之信号处理
- html 中的name,id ,value,class,list 作用与区别
- 五大地形等高线特征_【新微专题】从等高线地形图的实际应用分析如何培养图表判读能力?...
- linux 下多个图片合并,FFmpeg将多张图片合成视频