正文

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

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

分享到:

 1.编写线性搜索子程序 (1)精确线搜索, 用0.618方法或其它。 function [minx,miny,k]=GoldFind(confun,a,b,ep)%函数名:GoldFind--0.618法,搜索目标函数之极值%参  数:confun--目标函数名   [a,b]--搜索区间(a<b) ep--精度要求%返回值:minx--极值点  miny--极值点函数值  k--迭代次数  if a>=b    error('ERROR IN INPUTING!--a<b')    breakendt1=a+0.382*(b-a);t2=a+0.618*(b-a);f1=confun(t1);f2=confun(t2);k=1;while 1if f1<=f2      if t2-a<ep     minx=t1;      break      else      b=t2;      t2=t1;      t1=b-0.618*(b-a);      f2=f1;      f1=confun(t1);  endelseif b-t1<ep     minx=t2;      break      else      a=t1;      t1=t2;      t2=a+0.618*(b-a);      f1=f2;      f2=confun(t2);   end   k=k+1;  end  miny=confun(minx); (2)非精确线搜索。至少选择一种搜索准则,用二次插值,或三次插值,或二次+三次插值求解。 function [minx,miny,k]=SecInsert(confun,r)%函数名:SecInsert--二次插值,搜索目标函数之极值%参  数:confun--目标函数名   r--搜索步长%返回值:minx--极值点  miny--极值点函数值  k--迭代次数f0=confun(0);f1=confun(r);k=1;if f1<f0     f2=confun(2*r);    while f2<f1        f1=f2;        r=2*r;        f2=confun(r);        k=k+1;    end     minx=(4 * f1 - 3 * f0 - f2) * r / (2 * (2 * f1 - f0 - f2));else       while 1     f2=f1;    r=r/2;    f1=confun(r);    k=k+1;    if f1>f0        break    endend    minx=(4 * f1 - 3 * f0 - f2) * r / (2 * (2 * f1 - f0 - f2));end   miny=confun(minx);   Edited by Guassfans   2007-06-30

阅读(4708) | 评论(0)


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

评论

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