美食网站建设毕业设计泰安人才市场
美食网站建设毕业设计,泰安人才市场,wordpress 分页显示,一份简短的项目计划书共轭梯度法无约束最优化程序 共轭梯度法、梯度下降法求解无约束最优化问题的MATLAB程序#xff0c;买家可通过修改程序中的fun1目标函数和gfun1目标函数的梯度函数求解自己的无约束最优化问题。
最近在折腾无约束优化问题的时候顺手写了套MATLAB工具#xff0c;今天拿出来和…共轭梯度法无约束最优化程序 共轭梯度法、梯度下降法求解无约束最优化问题的MATLAB程序买家可通过修改程序中的fun1目标函数和gfun1目标函数的梯度函数求解自己的无约束最优化问题。最近在折腾无约束优化问题的时候顺手写了套MATLAB工具今天拿出来和大家唠唠。这玩意儿特别适合手头有数学公式但懒得从头造轮子的朋友咱们重点聊聊怎么用梯度下降和共轭梯度法快速实现优化。先甩个梯度下降法的核心代码镇楼function [x,val,k] grad_descent(fun,gfun,x0) 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; while(m 20) if(feval(fun,x0 rho^m*d) feval(fun,x0) sigma*rho^m*g*d) break; end m m 1; end x0 x0 rho^m*d; k k 1; end x x0; val feval(fun,x); end这个实现有几个骚操作值得注意1用了Armijo非精确线搜索控制步长避免算不动点2设置双重循环防止死磕3变量名故意用x0而不是x提醒自己这是就地更新。不过梯度下降大家都懂就像下楼梯总得一步步蹭遇到山谷地形就扭成麻花了。重点看看共轭梯度法的升级版function [x,val,k] conj_gradient(fun,gfun,x0) maxk 5000; n length(x0); epsilon 1e-5; k 0; g0 feval(gfun,x0); d -g0; while(k maxk) % 精确线搜索 alpha golden_section(fun,x0,d); x1 x0 alpha*d; g1 feval(gfun,x1); if(norm(g1) epsilon), break; end % 共轭方向更新 if mod(k,n) 0 beta 0; else beta (g1*g1)/(g0*g0); % FR公式 end d -g1 beta*d; g0 g1; x0 x1; k k 1; end x x1; val feval(fun,x); end这里有几个关键点1用了黄金分割法做精确线搜索需要自己实现2每n步重置搜索方向防止累积误差3beta计算采用Fletcher-Reeves公式。特别是方向更新那句d -g1 beta*d这行代码堪称魔法——把梯度方向和前一步方向做线性组合强行制造共轭性相当于给优化路径加了惯性导航。共轭梯度法无约束最优化程序 共轭梯度法、梯度下降法求解无约束最优化问题的MATLAB程序买家可通过修改程序中的fun1目标函数和gfun1目标函数的梯度函数求解自己的无约束最优化问题。举个栗子对于目标函数f (x) x(1)^2 2x(2)^2梯度函数g (x) [2x(1);4*x(2)]初始点取[10,10]时梯度下降需要迭代23次达到精度1e-5而共轭梯度法仅需2次二维二次函数理论上应该两步收敛。实际跑起来能看到梯度下降的路径像喝醉似的走之字形共轭梯度则直插目标点。改用自己的目标函数时要注意fun1必须返回标量值gfun1的梯度维度必须与x一致非凸函数可能需要调大maxk强烈建议先数值验证梯度正确性可以用central difference最后给个调试小技巧在循环里加个fprintf(k%d, x[%.4f,%.4f], fval%.6f\n,k,x0(1),x0(2),feval(fun,x0));看着数值怎么跳动的比干瞪眼强多了。优化嘛本质就是让函数值在参数空间里跳广场舞咱们的任务就是帮它找最短路径。