正文

Matlab优化程序设计(二)2007-06-30 14:11:00

【评论】 【打印】 【字体: 】 本文链接:http://blog.pfan.cn/emath/27226.html

分享到:

2.无约束优化方法子程序,至少选取Newton型方法的子程序(Newton方法 Quasi-Newton方法,包括BFGS、DFP方法。)、 最速下降方法、共轭梯度方法(至少选择PRP、FR方法中的一种)及直接方法(Powll方法,单纯形法,Rosenbrock算法等)中的一种。 function [minx,miny]=Quick(confun,x0,ep)%函数名:Quick--最速下降法搜索目标函数之极值%参  数:confun--目标函数名   x0--初始点   ep--精度要求%返回值:minx--极值点  miny--极值点函数值   [f,j]=confun(x0);d=-j;  %方向while 1%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%基于二次插值的最优步长搜索r=1;f0=confun(x0);x1=x0+d;f1=confun(x1); if f1<f0     x1=x0+2*r*d;    f2=confun(x1);    while f2<f1        f1=f2;        r=2*r;        x1=x0+r*d;        f2=confun(x1);           end     r=(4 * f1 - 3 * f0 - f2) * r / (2 * (2 * f1 - f0 - f2));else       while 1    f2=f1;    r=r/2;    x1=x0+r*d;    f1=confun(x1);       if f1<f0        break    endend    r=(4 * f1 - 3 * f0 - f2) * r / (2 * (2 * f1 - f0 - f2));end%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%    x0=x0+r*d;    [f,j]=confun(x0);    d=-j;    if  norm(d) < 0.00001        break    endendminx=x0;miny=confun(x0); eg: function [f,j]=Rosenbrock(x) f=100*(x(2)-x(1)^2)^2+(1-x(1))^2; j=[-400*x(1)*(x(2)-x(1)^2)-2*(1-x(1))  200*(x(2)-x(1)^2)]; %目标函数Jacobian阵 >>x0=[-1.2 1];[minx,miny]=Quick(@Rosenbrock,x0,0.00001) >>minx =1.0000    1.0000 miny = 7.7279e-011 比较: >> fminsearch(inline('100*(x(2)-x(1)^2)^2+(1-x(1))^2'),[-1.2;1]) ans = 1.00002202178357       1.00004221975177 Edited by Guassfans 2007-06-30

阅读(3996) | 评论(2)


版权声明:编程爱好者网站为此博客服务提供商,如本文牵涉到版权问题,编程爱好者网站不承担相关责任,如有版权问题请直接与本文作者联系解决。谢谢!

评论

loading...
您需要登录后才能评论,请 登录 或者 注册