现代机械优化设计Matlab编程.doc
现代机械优化设计方法 程 序 指导老师: 学 生: 学 号: 机电工程学院2011年12月一、一维优化问题练习题1、 黄金分割法 黄金分割法的基本思想:黄金分割法是通过不断单峰区间的长度来搜索极小点的一种有效方法,它是搜索区间比例缩小,通过计算比较函数值,以确定取舍区间。黄金分割法程序框图黄金分割法 matlab程序: clcsyms t;f=t2-10*t+36;a=2;b=10;c=a+0.382*(b-a);d=a+0.618*(b-a);f1=subs(f,c);f2=subs(f,d);while(abs(b-a)>=0.01) if(f1>f2) a=c;c=d;f1=f2; d=a+0.618*(b-a);f2=subs(f,d); else if(f1<f2) b=d;d=c;f2=f1; c=a+0.382*(b-a);f1=subs(f,c); else a=c;b=d; c=a+0.382*(b-a); d=a+0.618*(b-a); end endendt=0.5*(b+a)f0=subs(f)结果分析,给出的结果为最优解:,由于定义为单精度类型,故满足了精度要求。Matlab运行结果如下:二、无约束优化问题1、初始点:(1)梯度法梯度法的基本思想:梯度方向就是函数值变化最大的方向,沿着梯度问题,函数值上升最快,而负梯度方向是函数值下降最快的方向,此方法是沿着负梯度方向进行搜索的无约束方法。梯度法程序框图梯度法在matlab程序:(1)function y=fun(x1,x2)y=4*(x1-5)2+(x2-6)2;%此定义子函数,并保存为fun.m文件。(2) clcsyms x1 x2 d;f=4*(x1-5)2+(x2-6)2;fx1=diff(f,'x1');fx2=diff(f,'x2');x1=8;x2=9;for n=1:100 f0=subs(f); f1=subs(fx1); f2=subs(fx2); if(double(sqrt(f12+f22)<=0.) n x1=vpa(x1) x2=vpa(x2) f0=vpa(f0) break; else D=fun(x1-d*f1,x2-d*f2); Dd=diff(D,'d'); dd=solve(Dd); x1=x1-dd*f1; x2=x2-dd*f2; endend %此为梯度法的主函数,并保存为tdf.m文件。经matlab运行结果如下: (2)牛顿法与一维搜索讲的牛顿法公式推导一样,只不过推广到n维。牛顿法收敛速度快。牛顿法程序框图牛顿法在matlab中的程序如下:clcsyms x1 x2;f=4*(x1-5)2+(x2-6)2;fx1=diff(f,'x1');fx2=diff(f,'x2');fx1x1=diff(fx1,'x1');fx1x2=diff(fx1,'x2');fx2x1=diff(fx2,'x1');fx2x2=diff(fx2,'x2');x1=8;x2=9;for n=1:100 f0=subs(f); f1=subs(fx1); f2=subs(fx2); if(double(sqrt(f12+f22)<=0.) n x1=vpa(x1) x2=vpa(x2) f0=vpa(f0) break; else X=x1 x2'-inv(fx1x1 fx1x2;fx2x1 fx2x2)*f1 f2' x1=X(1,1); x2=X(2,1); endend 经matlab运行结果如下:三、约束优化方法内点法基本思想这种方法是将新目标函数定义于可行域内,迭代过程均在可行域内进行,逐步逼近最优点。内点法只能用来求解具有不等式约束的优化问题。1)在可行域内选一个初始点内点X0,初始点应选择一个离约束边界较远的可行点。2)选取适当的罚因子初值r0,降低系数c(0<c<1),计算精度。内点法程序框图Matlab程序:clc;count=0;n=100;r=1;c=0.5;flag=0;x0=3,3'esp=1.0e-5;while(flag=0)&&(count<n) syms x1 x2; f=(x1-2)2+(x2-1)2; g1=x12-x2; g2=x1+x2-2; F=(x1-2)2+(x2-1)2+r*(log(g1)+log(g2); f1=diff(F,x1); f2=diff(F,x2); s=solve(f1,f2,'x1','x2'); x1=s.x1 s.x2' norm=subs(sqrt(x1(1)-x0(1)2+(x1(2)-x0(2)2); if(norm<esp) flag=1; break; end x0=x1; r=c*r; count=count+1;endx1=x0(1)x2=x0(2)f=subs(f)count程序的运行结果: