2023年5月20日(软件工程日报)

工程数学

实验三:Newton法程序设计

一、实验目的

掌握Hesse矩阵的计算方法和Newton法的基本思想及其迭代步骤;学会运用MATLAB编程实现常用优化算法;能够正确处理实验数据和分析实验结果及调试程序。

 

二、实验内容

(1)求解无约束优化问题:

(2)终止准则取

(3)完成Newton法(牛顿法)的MATLAB编程、调试;

(4)选取几个与实验二中相同的初始点,并给出相关实验结果的对比及分析(从最优解、最优值、收敛速度(迭代次数)等方面进行比较);

(5)按照模板撰写实验报告,要求规范整洁。

 

  

 

三、算法步骤、代码、及结果

   1. 算法步骤

    

  1. 代码
  2. function[x,val,k]=dampnm(fun,gfun,Hess,x0)
  3. %功能:用阻尼牛顿法求解无约束问题:minf(x)
  4. %输入:x0是初始点,fun,gfun,Hess分别是求
  5. %目标函数值,梯度,Hesse阵的函数
  6. %输出:x,val分别是近似最优点和最优值,k是迭代次数.
  7. maxk=100;
  8. %给出最大迭代次数
  9. rho=0.55;sigma=0.4;
  10. k=0;
  11. epsilon=1e-5;
  12. while(k<maxk)
  13. gk=feval(gfun,x0);%计算梯度
  14. Gk=feval(Hess,x0);
  15. %计算Hesse阵
  16. dk=-Gk\gk;%解方程组Gk*dk=-gk,计算搜索方向
  17. if(norm(gk)<epsilon),break;end
  18. %检验终止准则
  19. m=0;mk=0;
  20. while(m<20)
  21. %用Armijo搜索求步长
  22. if(feval(fun,x0+rho^m*dk)<feval(fun,x0)+sigma*rho^m*gk'*dk)
  23. mk=m;break;
  24. end
  25. m=m+1;
  26. end
  27. x0=x0+rho^mk*dk;
  28. k=k+1;
  29. end
  30. x=x0;
  31. val=feval(fun,x);
  32. function He=Hess(x)
  33. n=length(x);
  34. He=zeros(n,n);
  35. He=[1200*x(1)^2-400*x(2)+2,-400*x(1);-400*x(1),200];
  36. x0=[-1.2 1]';
  37. [x,val,k]=dampnm('fun','gfun','Hess',x0)

function f=fun(x)

f=100*(x(1)^2-x(2))^2+(x(1)-1)^2;

function g=gfun(x)

g=[400*x(1)*(x(1)^2-x(2))+2*(x(1)-1),-200*(x(1)^2-x(2))]';

   3. 结果

    x = (1.0000,1.0000)(最优点)

val =1.8955e-21(最优点值)

k = 22(迭代次数)

posted @   摆烂达人  阅读(12)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
点击右上角即可分享
微信分享提示