牛顿法的matlab实现
简介:牛顿法是用来求解无约束优化问题的,它的基本思想是用迭代点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实现相关推荐
- matlab牛顿法原理,牛顿法的matlab实现
牛顿法的matlab实现 牛顿法的 MATLAB 实现摘要:性能学习是神经网络中的一类很重要的学习规则,其旨在找到一个最优点来提高网络的性能.牛顿法是一种基于二阶泰勒级数的算法,逐步迭代来实现进一步的 ...
- 牛顿法的matlab实现,利用matlab基础语句实现牛顿法matlab潮流计算
问题描述 现代电力系统分析课程留了用计算机进行潮流计算的作业,可以使用各种软件实现,matlab就包含在其中,按老师的意思应该是使用matlab中的某个app. 可是我头铁,app是什么,当然要自己写 ...
- matlab 牛顿法 最优化,matlab最优化牛顿法
最优化算法与MATLAB的Global Optimization Toolbox_计算机软件及应用_IT/计算机_专业资料.最优化算法与 MATLAB的Global Optimization Tool ...
- matlab 牛顿法 非线性方程,Matlab学习手记——非线性方程组求解:牛顿法
功能:牛顿法求解非线性方程组. 调用示例 命令行输入: [r, n]=mul_Newton([0 0 0], 1e-5) 得到结果: r = 0.4996 -0.0900 -0.5259 n = 5 ...
- 牛顿法的matlab实现例题,【MATLAB|MATLAB牛顿插值法例题与程序Word版】
『易坊知识库摘要_MATLAB|MATLAB牛顿插值法例题与程序Word版』x12345678y22.523.324.421.7025.228.524.825.4二.数学原理假设有n+1个不同的节点及 ...
- 牛顿法在MATLAB中的实现
牛顿迭代法又称为切线法,简单来说就是不断求切线与x轴的交点,来逐渐接近解的迭代过程.方法使用函数f(x)的泰勒级数的前面几项来寻找方程f(x) = 0的根.具体迭代的方法可以看度娘的解释,或者相关的教 ...
- 牛顿法迭代法 | matlab实现
function Newt(file_name, x0, xmin, xmax, n_points) % file_name 是要进行迭代的函数 % x0 是选取的初始值 % xmin,xmax分别为 ...
- matlab共轭梯度法_优化算法之牛顿法
牛顿法(Newton's method)是一种在实数域和复数域上近似求解方程的方法,,它使用函数f(x)的泰勒级数的前面几项来寻找方程f(y)=0的根. 牛顿法最初由艾萨克·牛顿在<Method ...
- matlab实现进退法、0.618法、牛顿法
文章目录 实验一 一维最优化方法 实验目的及要求: 实验原理: 算法1:进退法 算法2:0.618法 算法3:牛顿法 实验内容(方法和步骤) 例题 题目1 编写程序实现进退法. 题目2 利用进退法求解 ...
最新文章
- 【HAOI2010】订货
- utf-8 字符串转为Unicode编码格式
- centos运行java图形化界面_Linux/CentOS关闭图形界面(X-window)和启用图形界面命令
- php mysql 值是否存在_php检测mysql表是否存在的方法小结
- python源码文件_从源代码生成Python文件
- Oracle-1 / Oracle及PlsqlDeveloper的设置
- ftp完成版本更新php,php – 将开发团队从FTP转换为版本控制系统
- T-SQL之公用表表达式(CTE)
- 随想录(关于aarch64)
- numactl mysql_CentOS学习笔记 - 10. 开发机mysql安装
- 推荐几个超实用公众号,与众不同
- tuxedo中间件tmadmin的命令使用
- 日期格式化java_JAVA格式化时间日期
- Linux下.run文件的安装和卸载
- 运动世界校园显示服务器异常,运动世界校园跑完是异常成绩,计入有效成绩里吗?...
- 作为大数据技术面试官,我喜欢什么样的应届毕业生?
- 如何做一份淹没的水深分布图
- 20组免费的Photoshop渐变效果素材
- Android接入极光消息推送
- JAVA实现CRC16校验