MATLAB实验二:最速下降法程序设计
一、实验目的
通过最速下降法的程序设计,为今后的约束优化方法的学习和编程奠定基础;掌握负梯度方向的定义和最速下降法的迭代公式;通过此次实验,进一步巩固最速下降法的基本原理和思想。
二、实验内容
(1)求解无约束优化问题:
(2)完成最速下降法(负梯度法)的MATLAB编程、调试;
(3)要求选取多个不同的初始点,并给出迭代次数,最优函数值等相关信息,有能力的同学尝试画出最优值随迭代次数变化的曲线图.
function [x,val,k]=grad(fun,gfun,x0) %功能:用最速下降法求解无约束问题:min f(x) %输入: x0是初始点,fun,gfun分别是目标函数和梯度 %输出: x,va1分别是近似最优点和最优值,k是迭代次数. maxk=5000; %最大迭代次数 rho=0.5;sigma=0.4; k=0; epsilon=1e-5; while(k<maxk) g=feval(gfun,x0);%计算梯度 d=-g; %计算搜索方向 if(norm(d)<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; k=k+1; end x=x0; val=feval(fun,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))]'; x0=[-1.2 1]'; [x,val,k]=grad('fun','gfun',x0)
结果
>> Untitled5 x = 1.0000 1.0000 val = 1.1985e-10 k = 1435
作者:冰稀饭Aurora
出处:https://www.cnblogs.com/rsy-bxf150/p/17436767.html
版权:本作品采用「署名-非商业性使用-相同方式共享 4.0 国际」许可协议进行许可。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!