2023年5月20日(软件工程日报)
工程数学
实验三:Newton法程序设计
一、实验目的
掌握Hesse矩阵的计算方法和Newton法的基本思想及其迭代步骤;学会运用MATLAB编程实现常用优化算法;能够正确处理实验数据和分析实验结果及调试程序。
二、实验内容
(1)求解无约束优化问题:
(2)终止准则取
;
(3)完成Newton法(牛顿法)的MATLAB编程、调试;
(4)选取几个与实验二中相同的初始点,并给出相关实验结果的对比及分析(从最优解、最优值、收敛速度(迭代次数)等方面进行比较);
(5)按照模板撰写实验报告,要求规范整洁。
三、算法步骤、代码、及结果
1. 算法步骤
- 代码
- function[x,val,k]=dampnm(fun,gfun,Hess,x0)
- %功能:用阻尼牛顿法求解无约束问题:minf(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;
- end
- m=m+1;
- end
- x0=x0+rho^mk*dk;
- k=k+1;
- end
- x=x0;
- val=feval(fun,x);
- function He=Hess(x)
- n=length(x);
- He=zeros(n,n);
- He=[1200*x(1)^2-400*x(2)+2,-400*x(1);-400*x(1),200];
- x0=[-1.2 1]';
- [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(迭代次数)
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南