最优化理论与算法------阻尼牛顿法(附Matlab实现)

 

 

 

1 function[x,val,k]=dampnm(fun,gfun,Hess,x0) 2 %功能:用阻尼牛顿法求解无约束优化问题:minf(x); 3 %输入:x0是初始点,fun,gfun,Hess分别是目标函数和梯度Hess阵函数; 4 %输出:x,va1分别是近似最优解和近似最优值,k是迭代次数; 5 maxk = 5000; 6 rho = 0.55; 7 sigma =0.4; 8 k = 0; 9 epsion = 1e-8; 10 while (k<maxk) 11 gk=feval(gfun,x0); 12 Gk=feval(Hess,x0); 13 dk=-inv(Gk)*transpose(gk); 14 if(norm(dk)<epsion) 15 break; 16 end 17 m=0; 18 mk=0; 19 while(m<20) 20 if(feval(fun,x0+rho^m*dk)<=feval(fun,x0)+sigma*rho^m*gk*dk) 21 mk=m; 22 break; 23 end 24 m=m+1; 25 end 26 x0=x0+rho^mk*dk; 27 k=k+1; 28 end 29 x=x0; 30 val=feval(fun,x);

 

 

 

1 function y = fun(x) 2 %原函数 3 y = (1 - x(1))^2 + 100*(x(2)-x(1)^2)^2;

 

 

 

1 function g = gfun(x) 2 %求一阶偏导函数 3 g = [-2+2*x(1)-400*x(1)*(x(2)-x(1)^2),200*(x(2)-x(1)^2)];

 

 

 

1 function He = Hess(x) 2 n = length(x); 3 He = zeros(n,n); 4 %求二阶偏导函数 5 He = [2-400*(x(2)-3*x(1)^2),-400*x(1);-400*x(1),200];

 

 

注意修改原函数,一阶偏导函数,二阶偏导函数。


__EOF__

本文作者北漂的尘埃
本文链接https://www.cnblogs.com/shizhe99/p/14148259.html
关于博主:评论和私信会在第一时间回复。或者直接私信我。
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角推荐一下。您的鼓励是博主的最大动力!
posted @   北漂的尘埃  阅读(4445)  评论(5编辑  收藏  举报
编辑推荐:
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
阅读排行:
· 25岁的心里话
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 一起来玩mcp_server_sqlite,让AI帮你做增删改查!!
· 零经验选手,Compose 一天开发一款小游戏!
点击右上角即可分享
微信分享提示