简介:牛顿法是用来求解无约束优化问题的,它的基本思想是用迭代点xk处的一阶导数和二阶导数对目标函数进行二次函数近似,然后把二次模型的极小点作为新的迭代点,不断重复这一过程,直至满足精度的近似极小点。

这里有必要讲一下泰勒展开式的几何意义:泰勒公式的几何意义是利用多项式函数来逼近原函数,由于多项式函数可以任意次求导,易于计算,且便于求解极值或者判断函数的性质,因此可以通过泰勒公式获取函数的信息,同时,对于这种近似,必须提供误差分析,来提供近似的可靠性。

基本牛顿法算法的步骤:

步0:确定终止误差e=(0~1),初始点x0,令k=0

步1:计算gk=f(xk).若||gk||<=e,停算,输出xk作为最优解。否则,转步2

步2:计算Gk=^2f(xk),并解出方程组:Gk*dk=-gk,解得dk,其中Gk在xk处要正定

步3:令Xk+1=xk+dk,k=k+1;转步1

这个算法的特点就是他的收敛速度快,缺点就是要求二阶导师,比较麻烦。

还有一个缺点就是它的x0的选取要靠近极小点,否则可能导致算法不收敛,所以x0的选取成为了一个问题,为了改进这个问题,这里用线搜索技术(这里用Armijo线搜索技术)来克服达到大范围收敛的算法,即阻尼牛顿法(与基本的牛顿法相比,它的搜索步长不同,基本的步长是1):

算法步骤:

步0:确定终止误差e=(0~1),初始点x0,=(0~1),=(0,0.5),令k=0

步1:计算gk=f(xk).若||gk||<=e,停算,输出xk作为最优解。否则,转步2

步2:计算Gk=^2f(xk),并解出方程组:Gk*dk=-gk,解得dk,其中Gk在xk处要正定

步3:求步长k=^mk,m的值从0开始

若f(xk+ ^m*dk)<=f(xk)+*^m*gk'dk

则 mk=m,步长 k=^mk,若不满足上式,则m=m+1,直到满足上述不等式为止

步4:令Xk+1=xk+ k*dk,k=k+1,转步1

代码实现:

1.阻尼牛顿法

function [x,val,k] =dampnm(fun,gfun,Hess,x0)
%功能:用阻尼牛顿法求解无约束问题minif(x)
%dampnm是阻尼的意思
%输入:fun,gfun,Hess分别是目标函数,梯度,二阶导数,x0是初始点
%输出:x,val分别是近似极小点和近似最优值,k是迭代次数
maxk=100;
rho=0.55;
sigma=0.4;
k=0;
e=1e-5;%精度要求
while(k<maxk)gk=feval(gfun,x0);if(norm(gk)<=e),break;endGk=feval(Hess,x0);dk=-Gk\gk;%右除,解方程Gk*dk=-gkm=0;mk=0;while(m<20)if(feval(fun,x0+rho^m*dk)<feval(fun,x0)+sigma*rho^m*gk'*dk);mk=m;break;endm=m+1;endx0=x0+dk*rho^m;k=k+1;
end
x=x0;
val=feval(fun,x0);
end

2.目标函数

function f= fun(x)
%目标函数
f=100*(x(1)^2-x(2))^2+(x(1)-1)^2;
end

3.目标函数梯度

function  g=gfun(x)
%目标函数的梯度
g=[400*x(1)*(x(1)^2-x(2))+2*(x(1)-1),-200*(x(1)^2-x(2))]';
end

4.目标函数的Hess阵

function f = Hess(x)
%n=length(x);
%f=zero(n,n);
f=[1200*x(1)^2-400*x(2)+2,-400*x(1);-400*x(1),             200];
end

5.主函数

%这个问题的精确值是x=(1,1)',f(x)=0;
clear all
clc
x0=[-1.2 1]';
[x,val,k]=dampnm('fun','gfun','Hess',x0);
disp('迭代次数:k=')
disp(k)
disp(['最优解:x = '])
disp(x)
disp(['此时: f(x) = ',num2str(val)]) 

6.结果显示

牛顿法的matlab实现相关推荐

  1. matlab牛顿法原理,牛顿法的matlab实现

    牛顿法的matlab实现 牛顿法的 MATLAB 实现摘要:性能学习是神经网络中的一类很重要的学习规则,其旨在找到一个最优点来提高网络的性能.牛顿法是一种基于二阶泰勒级数的算法,逐步迭代来实现进一步的 ...

  2. 牛顿法的matlab实现,利用matlab基础语句实现牛顿法matlab潮流计算

    问题描述 现代电力系统分析课程留了用计算机进行潮流计算的作业,可以使用各种软件实现,matlab就包含在其中,按老师的意思应该是使用matlab中的某个app. 可是我头铁,app是什么,当然要自己写 ...

  3. matlab 牛顿法 最优化,matlab最优化牛顿法

    最优化算法与MATLAB的Global Optimization Toolbox_计算机软件及应用_IT/计算机_专业资料.最优化算法与 MATLAB的Global Optimization Tool ...

  4. matlab 牛顿法 非线性方程,Matlab学习手记——非线性方程组求解:牛顿法

    功能:牛顿法求解非线性方程组. 调用示例 命令行输入: [r, n]=mul_Newton([0 0 0], 1e-5) 得到结果: r = 0.4996 -0.0900 -0.5259 n = 5 ...

  5. 牛顿法的matlab实现例题,【MATLAB|MATLAB牛顿插值法例题与程序Word版】

    『易坊知识库摘要_MATLAB|MATLAB牛顿插值法例题与程序Word版』x12345678y22.523.324.421.7025.228.524.825.4二.数学原理假设有n+1个不同的节点及 ...

  6. 牛顿法在MATLAB中的实现

    牛顿迭代法又称为切线法,简单来说就是不断求切线与x轴的交点,来逐渐接近解的迭代过程.方法使用函数f(x)的泰勒级数的前面几项来寻找方程f(x) = 0的根.具体迭代的方法可以看度娘的解释,或者相关的教 ...

  7. 牛顿法迭代法 | matlab实现

    function Newt(file_name, x0, xmin, xmax, n_points) % file_name 是要进行迭代的函数 % x0 是选取的初始值 % xmin,xmax分别为 ...

  8. matlab共轭梯度法_优化算法之牛顿法

    牛顿法(Newton's method)是一种在实数域和复数域上近似求解方程的方法,,它使用函数f(x)的泰勒级数的前面几项来寻找方程f(y)=0的根. 牛顿法最初由艾萨克·牛顿在<Method ...

  9. matlab实现进退法、0.618法、牛顿法

    文章目录 实验一 一维最优化方法 实验目的及要求: 实验原理: 算法1:进退法 算法2:0.618法 算法3:牛顿法 实验内容(方法和步骤) 例题 题目1 编写程序实现进退法. 题目2 利用进退法求解 ...

最新文章

  1. 【HAOI2010】订货
  2. utf-8 字符串转为Unicode编码格式
  3. centos运行java图形化界面_Linux/CentOS关闭图形界面(X-window)和启用图形界面命令
  4. php mysql 值是否存在_php检测mysql表是否存在的方法小结
  5. python源码文件_从源代码生成Python文件
  6. Oracle-1 / Oracle及PlsqlDeveloper的设置
  7. ftp完成版本更新php,php – 将开发团队从FTP转换为版本控制系统
  8. T-SQL之公用表表达式(CTE)
  9. 随想录(关于aarch64)
  10. numactl mysql_CentOS学习笔记 - 10. 开发机mysql安装
  11. 推荐几个超实用公众号,与众不同
  12. tuxedo中间件tmadmin的命令使用
  13. 日期格式化java_JAVA格式化时间日期
  14. Linux下.run文件的安装和卸载
  15. 运动世界校园显示服务器异常,运动世界校园跑完是异常成绩,计入有效成绩里吗?...
  16. 作为大数据技术面试官,我喜欢什么样的应届毕业生?
  17. 如何做一份淹没的水深分布图
  18. 20组免费的Photoshop渐变效果素材
  19. Android接入极光消息推送
  20. JAVA实现CRC16校验

热门文章

  1. Pandas - Review
  2. 基于unity制作的AR视频播放
  3. django数据库报错Table 'xxx' doesn't exist或Unknown table 'xxx'
  4. 中文语音克隆|MockingBird(拟声鸟)github项目运行流程(一次跑通)
  5. 手把手教你用owncloud搭建属于自己的云盘
  6. css——图片缩放,拉伸,变形的解决办法
  7. PHP修改根目录路径
  8. 智力测试情商测试小程序源码/带流量主提升智力微信小程序源码
  9. OPPO A7X 刷机小结
  10. OpenWrt各大软件源地址