您好,欢迎访问三七文档
现代设计方法上机一、黄金搜索法1.程序框图2.参考程序:function[xstar,minvalue,a,b]=golden(f,a,b,e)%golden为黄金搜索方法,本程序只针对一元函数%[xstar,fminvalue]=golden(f,a,b,eps)为输入函数f为函数eps为允许误差(a,b)为初始点,xstar为极小值点,fminvalue为极值;%昆明理工大学机电工程学院机械工程系刘孝保2012年11月a1=a+0.382*(b-a);a2=a+0.618*(b-a);y1=subs(f,'x',a1);y2=subs(f,'x',a2);flag=true;k=0;disp(['黄金搜索过程如下:']);while(flag)disp(['k='num2str(k)';a='num2str(a)';a1='num2str(a1)';a2='num2str(a2)';b='num2str(b)';y1='num2str(subs(f,'x',a1))';y2='num2str(subs(f,'x',a2))]);if(y1y2)b=a2;a2=a1;y2=y1;a1=a+0.382*(b-a);y1=subs(f,'x',a1);elsea=a1;a1=a2;y1=y2;a2=a+0.618*(b-a);y2=subs(f,'x',a2);endlength=b-a;if(lengthe)flag=false;endk=k+1;endxstar=(b+a)/2;minvalue=subs(f,'x',xstar);disp(['******极小值点为:x='mat2str(xstar)';******极小值为fmin='num2str(minvalue)'。******']);3.自己尝试利用求f=x^2+2x在区间【-3,5】的极小值。二、最速下降法1.最速下降法程序框图2.参考程序function[xstar,fminvalue]=fsxsteep(f,e,a,b)%fsxsteep为最速下降法,本程序只针对二元函数%[xstar,fminvalue]=fsxsteep(f,e,a,b)为输入函数f为函数e为允许误差(a,b)为初始点,xstar为绩效指点,fminvalue为极值;%昆明理工大学机电工程学院机设系刘孝保disp(['================================================================']);开始给定结束0,x()kkfdx1:min()kkkkkkkfxxdxd1kkxx*1kxx否是1kk0kdisp(['******************2.无约束优化之最速下降法************************']);disp(['================================================================']);x1=a;x2=b;xx0=[x1,x2]';k=0;fx1=diff(f,'x1');%对x1求偏导数fx2=diff(f,'x2');%对x2求偏导数g=[fx1fx2]';%梯度g1=subs(g);%把符号变量转为数值d=-g1;fig=figure();plot(x1,x2,'o')%画初始点text(x1,x2,['('num2str(x1)','num2str(x2)')'])%画初始点坐标holdon;axisequalff=f-subs(f);hhh=ezplot(ff);%画目标函数等值线set(hhh,'linewidth',3);holdon;pause(1);alpha=YJFC(f,x1,x2,d);%求第一步最优步长disp(['初始迭代方向为:('mat2str(d)')。']);disp(['初始迭代的最优步长为alpha='num2str(alpha)'。']);while(abs(norm(g1))=e)disp(['*******************第'num2str(k)'次迭代*********************']);xx1=subs(xx0+alpha*d);x1=xx1(1);x2=xx1(2);xx1=subs(xx1);plot([xx0(1)xx1(1)],[xx0(2)xx1(2)],'red','linewidth',3)%画搜索方向和步长xx0=xx1;%变量换号g1=subs(g);%把符号变量转为数值d=-subs(g);if(abs(norm(g1))~=0)alpha=YJFC(f,x1,x2,d);%求第一步最优步长enddisp(['新的迭代方向为:('mat2str(d)')。']);disp(['最优步长alpha='num2str(alpha)'。']);disp(['新的点为:'mat2str(xx1)'。']);disp(['新的点的梯度为g1='mat2str(g1)'。']);%%%%colormap([001])%设置线条颜色为蓝色%画图plot(x1,x2,'o')%画迭代点if(k2)text(x1,x2,['('num2str(x1)','num2str(x2)')'])%画迭代点坐标endff=f-subs(f);hh=ezplot(ff);set(hh,'linewidth',2);%画等值线holdon;pause(1);xstar=xx1;fstar=subs(f);k=k+1;end;xstar=xstar;fminvalue=fstar;endfunction[x]=YJFC(f,x1,x2,d)%YJFCSummaryofthisfunctiongoeshere%Detailedexplanationgoesheresymsal;xx0=[x1,x2]';xx1=subs(xx0+al*d);x1=xx1(1);x2=xx1(2);f1=diff(subs(f),'al');x=subs(solve(f1));end3.利用最速下降法求f=x1^2+4x^2+x1x2+8的极小值4.修改函数YJFC,将其修改为利用牛顿插值法一维搜索。三、阻尼牛顿法1.阻尼牛顿法框图2.试模仿最速下降法编写阻尼牛顿法的程序,并求f=x1^2+4x^2+x1x2+8的极小值四、DFP方法1.程序框图开始给定结束0,x21[()]()kkkffdxx1:min()kkkkkkkfxxdxd1kkxx*1kxx否是1kk0k2.试模仿最速下降法编写DFP的程序,并求f=x1^2+4x^2+x1x2+8的极小值
本文标题:现代设计方法上机
链接地址:https://www.777doc.com/doc-6884347 .html