2023年5月21日(软件工程日报)
工程数学
实验四:共轭梯度法程序设计 一、实验目的 掌握共轭梯度法的基本思想及其迭代步骤;学会运用MATLAB编程实现常用优化算法;能够正确处理实验数据和分析实验结果及调试程序。 二、实验内容 (1)求解无约束优化问题:; (2)终止准则取,搜索方法采用非精确搜索Armijo; (3)完成FR共轭梯度法的MATLAB编程、调试; (4)选取几个与实验二实验三中相同的初始点,并给出相关实验结果的对比及分析(从最优解、最优值、收敛速度(迭代次数)等方面进行比较); (5)按照模板撰写实验报告,要求规范整洁。 三、算法步骤、代码、及结果 1. 算法步骤 2. 代码 frcg.m function[x,val,k]=frcg(fun,gfun,x0) %功能:用FR共轭梯度法求解无约束问题:minf(x) %输入:x0是初始点,fun,gfun分别是目标函数和梯度 %输出:x,val分别是近似最优点和最优值,k是迭代次数. maxk=5000; %最大迭代次数 rho=0.6;sigma=0.4; k=0; epsilon=1e-4; n=length(x0); while(k<maxk) g=feval(gfun,x0); %计算梯度 itern=k-(n+1)*floor(k/(n+1)); itern=itern+1; %计算搜索方向 if(itern==1) d=-g; else beta=(g'*g)/(g0'*g0); d=-g+beta*d0; gd=g'*d; if(gd>=0.0) d=-g; end end if(norm(g)<epsilon),break;end %检验终止条件 m=0;mk=0; while(m<20) %Armijo搜索 if(feval(fun,x0+rho^m*d)<feval(fun,x0)+sigma*rho^m*g'*d) mk=m;break; end m=m+1; end x0=x0+rho^mk*d; val=feval(fun,x0); g0=g; d0=d; k=k+1; end x=x0; val=feval(fun,x); fun.m(求函数值) function f=fun(x) f=100*(x(1)^2-x(2))^2+(x(1)-1)^2; gfun.m(求梯度) function g=gfun(x) g=[400*x(1)*(x(1)^2-x(2))+2*(x(1)-1),-200*(x(1)^2-x(2))]'; frcgtest.m(调用共轭梯度法函数) x0=[-1.2 1]'; [x,val,k]=frcg('fun','gfun',x0) 3. 结果 x =(0.9999,0.9999) val =2.9396e-09 k =44
【推荐】国内首个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代理技术深度解析与实战指南