第三章 最速下降法和牛顿法

article/2025/9/14 4:12:43

内容来自马昌凤编著的《最优化方法及其Matlab程序设计》,文章仅为个人的学习笔记,感兴趣的朋友详见原书。
本章讨论无约束优化问题 m i n f ( 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); 

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

示例1

在这里插入图片描述

示例2

在这里插入图片描述

牛顿法及其Matlab实现

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

算法

在这里插入图片描述
牛顿法最突出的优点是收敛速度快,具有局部二阶收敛性。但是对初始点要求足够“靠近”极小点,否则,有可能导致算法不收敛。由于实际问题的精度极小点一般是未知的,为克服这一困难,故引入线搜索技术以得到大范围收敛的算法,即下面的阻尼牛顿法。(此处基于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矩阵在每个迭代点 x k x_k xk处是正定的,否则,难以保证牛顿方向 d k = − G k − 1 g k d_k=-G_k^{-1}g_k dk=Gk1gk f f f x k x_k xk处的下降方向。为克服这一缺陷,故对其进行修正:将牛顿法与最速下降法结合起来,构造**“牛顿-最速下降算法”**。其基本思想为:当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));

http://chatgpt.dhexx.cn/article/KsIUEWyS.shtml

相关文章

梯度下降法、最速下降法

梯度下降法 最优化问题是求解函数极值的问题&#xff0c;包括极大值和极小值。相信所有的读者对这个问题都不陌生&#xff0c;在初中时我们就学会了求解二次函数的极值&#xff08;抛物线的顶点&#xff09;&#xff0c;高中时学习了幂函数&#xff0c;指数函数&#xff0c;对…

matlab最速下降法ppt,最速下降法PPT及MATLAB程序.pptx

最速下降法PPT及MATLAB程序.pptx 最速下降法,最速下降法&#xff0c;也称为梯度下降法&#xff0c;是由法国著名数学家Cauchy在1847年提出的。 最速下降法是求解无约束优化问题最简单和最古老的方法之一&#xff0c;虽然现在已经不具有实用性&#xff0c;但是许多有效算法都是…

最速下降法python_算法最优化之最速下降法

适应范围&#xff1a;无约束非线性规划问题 例子&#xff1a; 初始化 , 第一次迭代&#xff1a; 从 出发&#xff0c;沿方向 进行一维搜索&#xff0c;求步长 ,即 在直线的极小点 第二次迭代&#xff1a; 从 出发&#xff0c;沿方向 进行一维搜索&#xff0c;求步长 即 解…

最速梯度下降法及matlab实践,最速下降法以及代码实现

由于最近复习最优化考试,为了防止考完即忘,这里做个笔记用于备忘,本文讲解一下无约束优化问题中的最速下降法。 一、解决的问题 最速梯度下降法解决的问题是无约束优化问题,而所谓的无约束优化问题就是对目标函数的求解,没有任何的约束限制的优化问题,比如求下方最小值:…

运筹学(1)-最速下降法

运筹学&#xff08;1&#xff09; 多维无约束优化算法——梯度法之最速下降法 最近学习运筹学开始学习一些优化的算法&#xff0c;之后的一系列博客我会分享一些我学到的运筹学方法。这次我总结了我学习的最速下降法。 1. 原理 最速下降法是一个优化算法&#xff0c;用于求…

SSM 三大框架

文章目录 一、SpringMVC- 1.SpringMVC(Spring Model View Controller) 框架介绍- - 1.概述- - 2.MVC模型- - 3.工作原理 - 2.创建Module- 3.入门案例&#xff1a;展示汽车数据需求创建Maven module创建RunApp.javaCar.javaCarController.java测试 - 4.处理请求参数- - 1.概述- …

SSH三大框架整合

文章目录 一. SSH 简单的回顾1. Hibernate框架2. Struts2框架3. Spring框架 二. ssh整合思想三. 整合struts2和spring框架&#xff08;把struts2的action交给spring管理&#xff09;1. 导入相关jar包2. 创建action3. 创建struts2核心配置文件&#xff0c;配置action(1). 位置在…

三大框架的基础知识

三大框架的基础知识 1&#xff0c;hibernate的工作原理及为什么要用&#xff1f; &#xff08;1&#xff09;通过Configuration().configure();读取并解析hibernate.cfg.xml配置文件&#xff1b; &#xff08;2&#xff09;由 hibernate.cfg.xml读取并解析映射信息&#xff1b…

三大前端框架

互联网发展速度是非常快的&#xff0c;程序员用的前端框架也在不断的迭代和变化&#xff0c;以前大家常用的是JQuery、Bootstrap框架&#xff0c; 现在形成React、Vue、Angular三大主流框架&#xff0c;这三个框架各有各的优势&#xff0c;而且较为成熟 01、React React框架是起…

前端三大主流框架的区别(三)

前面两篇已经做了细致的分析&#xff0c;这一篇就总结总结三大主流框架吧 1.angular 1.1. 简介: angular是最早出现的框架&#xff0c; angularjs是通过directive&#xff08;指令&#xff09;去封装组件&#xff0c;react和vue是通过component。 1.2. 优点&#xff1a; 1、…

三大框架-Spring

一 .概述 spring框架是以一个分层架构,有七个定义良好的模块组成,Spring模块构建在核心容器之上,核心容器定义了创建,配置和管理bean方式: 1.Spring Core:核心容器 ,提供Spring的基本功能. 2.SPring Contest:Spring上下文,是一个配置文件 3.Spring AOP : Spring 中面向切面…

JAVA的三大框架是什么?

Java自1995年发布以来&#xff0c;凭借着其跨平台、面向对象、泛型编程的特性发展至今可以说无Java不大厂。目前国内所有的大厂或多或少都在使用Java进行后端服务开发。 一、Java开发的三大框架 在14年以前&#xff0c;行业内用得最多的Java三大框架是Struts、Spring和Hiberna…

SSM三大框架Spring

一、三大框架基本结构 1.为什么需要框架 说明: 如果生产环境下的项目,都是从头(从底层写起)开发,难度太大了,并且开发的效率极其低下. 所以为了让项目快速的上线部署. 将某些特定的功能.进行了高级的封装. 那么我们如果需要使用封装后的API.,则必须按照人家的要求编码 2.框架…

外键的设置

关键词&#xff1a;外键 | 索引 | InNoDB和MyISAM | 引用 | Mysql 设置外键的目的&#xff1a;保证数据的一致性&#xff01; 一、外键的使用条件&#xff1a; ① 两个表必须是InnoDB表&#xff0c;MyISAM表暂时不支持外键 #查看表类型SHOW TABLE STATUS#查询结果的Engine字…

外键(FOREIGN KEY)

引子&#xff1a;把所有数据都存放于一张表的弊端 1、表的组织结构复杂不清晰 2、浪费空间 3、扩展性极差 为了解决上述的问题&#xff0c;就需要用多张表来存放数据。 表与表的记录之间存在着三种关系&#xff1a;一对多、多对多、一对一的关系。 处理表之间关系问题就会…

什么是外键? 为什么需要外键?怎么使用外键?

首先我们先思考一个问题&#xff1a; 如何将京东"fuliuqingfeng"的用户信息及其多个邮寄商品地址保存到数据库中? 我们第一步会这样操作实现&#xff1a; create table user_info(id char(36) primary key,user_name varchar(30) not null,password varchar(30) …

MySQL外键(详解)

MySQL外键&#xff08;详解&#xff09; 什么是外键&#xff1a;    外键是指引用另外一个表中的一列或多列数据&#xff0c;被引用的列应该具有主键约束或者唯一性约束&#xff08;简单来说外键是另一个表的主键或者唯一约束&#xff09;。外键可以有重复的, 可以是空值&…

C/C++unlink函数的使用

一、头文件 #include<unistd.h> 二、函数原型 int unlink(const char *pathname); 三、函数介绍 unlink()函数功能即为删除文件。执行unlink()函数会删除所给参数指定的文件。 注意&#xff1a; 执行unlink()函数并不一定会真正的删除文件&#xff0c;它先会检查文件…

Linux下unlink函数的使用

一、头文件 #include<unistd.h> 二、函数原型 int unlink(const char *pathname); 三、函数介绍 unlink()函数功能即为删除文件。执行unlink()函数会删除所给参数指定的文件。 注意&#xff1a; 执行unlink()函数并不一定会真正的删除文件&#xff0c;它先会检查文件系…

Universal link的坑

当你觉得Universal link所有配置都没问题&#xff0c;但是通过浏览器打开Universal Link没有命中的时候看下这里 看了很多篇文章对比了Universal Link配置和流程之后没问题&#xff0c;浏览器打开还是不生效&#xff0c;最终在最关键的配置apple-app-site-association文件破案了…