《机械优化设计上机实践报告书.pdf》由会员分享,可在线阅读,更多相关《机械优化设计上机实践报告书.pdf(45页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、 机械优化设计上机实践报告 班 级 :机械(茅以升)101 姓 名 :学 号 :1004010510 成 绩 :指导教师 :张 迎 辉 日 期 :2013.11.20 1 一维搜索方法上机实践报告 1、写出所选择的一维搜索算法的基本过程、原理(可附流程图说明)。(一)进退法 1.算法原理 进退法是用来确定搜索区间(包含极小值点的区间)的算法,其理论依据是:()f x为单谷函数(只有一个极值点),且,a b为其极小值点的一个搜索区间,对于任意12,x xa b,如果 12f xf x,则2,a x为极小值的搜索区间,如果 12f xf x,则1,x b为极小值的搜索区间。因此,在给定初始点0 x
2、,及初始搜索步长h的情况下,首先以初始步长向前搜索一步,计算0f xh。(1)如果 00f xf xh 则可知搜索区间为0,x xh,其中x待求,为确定x,后退一步计算0()f xh,为缩小系数,且01,直接找到合适的*,使得*00()f xhf x,从而确定搜索区间*00,xh xh。(2)如果 00f xf xh 则可知搜索区间为0,xx,其中x待求,为确定x,前进一步计算0()f xh,为放大系数,且1,知道找到合适的*,使得*00()f xhf xh,从而确定搜索区间*00,x xh。2.算法步骤 用进退法求一维无约束问题min(),f x xR的搜索区间(包含极小值点的区间)的基本算
3、法步骤如下:(1)给定初始点(0)x,初始步长0h,令0hh,(1)(0)xx,0k;(2)令(4)(1)xxh,置1kk;(3)若(4)(1)f xf x,则转步骤(4),否则转步骤(5);(4)令(2)(1)(1)(4),xxxx,(2)(1)f xf x,(1)(4)f xf x,令2hh,转步骤(2);(5)若1k,则转步骤(6)否则转步骤(7);(6)令hh,(2)(4)xx,(2)(4)f xf x,转步骤(2);(7)令(3)(2)(2)(1)(1)(4),xxxxxx,停 止 计 算,极 小 值 点 包 含 于 区 间 (1)(3)(3)(1),xxxx或 (二)黄金分割法 1
4、、黄金分割法基本思路:黄金分割法适用于a,b区间上的任何单股函数求极小值问题,对函数除要求“单谷”外不做其他要求,甚至可以不连续。因此,这种方法的适应面非常广。黄金分割法也是建立在区间消去法原理基础上的试探方法,即在搜索区间a,b内适当插入两点 a1,a2,并计算其函数值。a1,a2 将区间分成三段,应用函数的单谷性质,通过函数值大小的比较,删去其中一段,是搜索区间得以缩小。然后再在保留下来的区间上作同样的处理,如此迭代下去,是搜索区间无限缩小,从而得到极小点的数值近似解。2 黄金分割法的基本原理 一维搜索是解函数极小值的方法之一,其解法思想为沿某一已知方向求目标函数的极小值点。一维搜索的解法
5、很多,这里主要采用黄金分割法(0.618 法)。该方法用不变的区间缩短率0.618 代替斐波那契法每次不同的缩短率,从而可以看成是斐波那契法的近似,实现起来比较容易,也易于人们所接受。图 1 黄金分割法是用于一元函数 f(x)在给定初始区间a,b内搜索极小点*的一种方法。它是优化计算中的经典算法,以算法简单、收敛速度均匀、效果较好而著称,是许多优化算法的基础,但它只适用于一维区间上的凸函数6,即只在单峰区间内才能进行一维寻优,其收敛效率较低。其基本原理是:依照“去劣存优”原则、对称原则、以及等比收缩原则来逐步缩小搜索区间7。具体步骤是:在区间a,b内取点:a1,a2 把a,b分为三段。如果 f
6、(a1)f(a2),令 a=a1,a1=a2,a2=a+r*(b-a);如果 f(a1)=y2 a=a1 a1=a2 y1=y2 b=a2 a2=a1 y2=y1 a2=a+r*(b-a)y2=f(a2)a1=b-r*(b-a)y1=f(a1)(b-a)/b和 (y2-y1)/y2?a*=(a+b)/2 结束 是 否 是 算例 1:minf(x)=x*x+2*x(1)C+程序如下:#include#include#define f(x)x*x+2*x double calc(double*a,double*b,double e,int*n)double x1,x2,s。if(fabs(*b-*
7、a)f(x2)*a=x1。else *b=x2。*n=*n+1。s=calc(a,b,e,n)。return s。main()double s,a,b,e。int n=0。scanf(%lf%lf%lf,&a,&b,&e)。s=calc(&a,&b,e,&n)。printf(a=%lf,b=%lf,s=%lf,n=%dn,a,b,s,n)。2、程序运行结果:算例 2:minf=x2-10*x+36 理论最优解:x*=5.0,f(x*)=11.0 (1)MATLAB 程序清单:function f=myfun_yi(x)f=x2-10*x+36 fminbnd(myfun_yi,1,12)(2)
8、运行结果:fminbnd(myfun_yi,1,12)f=11.0407 f=18.8309 f=12.9691 f=11 f=11.0000 f=11.0000 ans=5 (3)结果分析:由迭代程序 f=11.0,ans=5,与理论结果相等 算例 3:minf=x4-5*x3+4*x2-6*x+60 理论最优解:x*=3.2796,f(x*)=22.6590 (1)MATLAB 程序清单:function f=myfun_yi(x)f=x4-5*x3+4*x2-6*x+60 fminbnd(myfun_yi,1,12)(2)运行结果:fminbnd(myfun_yi,1,12)f=165.
9、3948 f=1.5836e+03 f=24.8730 f=35.9194 f=23.9089 f=22.7621 f=31.7507 f=22.6673 f=22.6594 f=22.6590 f=22.6590 f=22.6590 f=22.6590 ans=3.2796 (3)结果分析:由迭代程序得 f=22.659,ans=3.2796,与理论最优解相等 2 无约束优化搜索方法上机实践报告 1、写出所选择的无约束优化搜索算法的基本过程、原理(可附流程图说明)。鲍威尔改进方法 鲍威尔(Powell)法是直接利用函数值来构造共轭方向的一种方法 在鲍威尔基本算法中,每一轮迭代都用连结始点和终
10、点所产生出的搜索方向去替换原向量组中的第一个向量,而不管它的“好坏”,这是产生向量组线性相关的原因所在。在改进的算法中首先判断原向量组是否需要替换。如果需要替换,还要进一步判断原向量组中哪个向量最坏,然后再用新产生的向量替换这个最坏的向量,以保证逐次生成共轭方向。2、程序计算结果分析:中间各步骤的结果分析及与理论计算结果分析对比。算例1:minf=4*(x(1)-5)2+(x(2)-6)2 初始点:x0=8。9,f(x0)=45 最优解:x*=5。6,f(x*)=0(1)MATLAB程序清单:function f=myfun_wuyueshu(x)f=4*(x(1)-5)2+(x(2)-6)2
11、 x,fval=fminunc(myfun_wuyueshu,x0)(2)运行结果:f=45 Warning:Gradient must be provided for trust-region algorithm。using line-search algorithm instead.In fminunc at 367 f=45.0000 f=45.0000 f=23.5625 f=23.5625 f=23.5625 f=2.6958 f=2.6958 f=2.6958 f=1.3788 f=1.3788 f=1.3788 f=0.0054 f=0.0054 f=0.0054 f=6.497
12、5e-05 f=6.4973e-05 f=6.4975e-05 f=6.1579e-09 f=6.1522e-09 f=6.1443e-09 f=1.7876e-12 f=1.8627e-12 f=1.5586e-12 Local minimum found.Optimization completed because the size of the gradient is less than the default value of the function tolerance.x=5.0000 6.0000 fval=1.7876e-12(3)结果分析:由迭代程序得 x=5.0000;6.
13、0000,fval=1.7876e-12,与理论最优解相等。算例2:minf=(x(1)2+x(2)-11)2+(x(1)+x(2)2-7)2 初始点:x0=1。1,f(x0)=106 最优解:x*=3。2,f(x*)=0 (1)MATLAB 程序清单:function f=myfun_wuyueshu(x)f=(x(1)2+x(2)-11)2+(x(1)+x(2)2-7)2 x,fval=fminunc(myfun_wuyueshu,x0)(2)运行结果:x0=1。1 x0=1 1 x,fval=fminunc(myfun_wuyueshu,x0)f=106 Warning:Gradient
14、 must be provided for trust-region algorithm。using line-search algorithm instead.In fminunc at 367 f=106.0000 f=106.0000 f=29.5430 f=29.5430 f=29.5430 f=1.7450e+04 f=1.7450e+04 f=1.7450e+04 f=90.3661 f=90.3661 f=90.3661 f=0.3575 f=0.3575 f=0.3575 f=0.0179 f=0.0179 f=0.0179 f=0.0064 f=0.0064 f=0.0064
15、 f=1.0048e-06 f=1.0044e-06 f=1.0049e-06 f=4.8639e-09 f=4.8567e-09 f=4.8781e-09 f=5.2125e-12 f=5.8703e-12 f=5.7870e-12 Local minimum found.Optimization completed because the size of the gradient is less than the default value of the function tolerance.x=3.0000 2.0000 fval=5.2125e-12(3)结果分析:由迭代程序得 x=3
16、。2,fval=5.2125e-12,与理论最优解相等 算例 3:ff=x0*x0+2*x1*x1-4*x0-2*x0*x1。(1)鲍威尔改进算法 C+程序清单:#include stdio.h#include stdlib.h#include math.h double objf(double x)double ff。ff=x0*x0+2*x1*x1-4*x0-2*x0*x1。return(ff)。void jtf(double x0,double h0,double s,int n,double a,double b)int i。double*x3,h,f1,f2,f3。for(i=0。i
17、3。i+)xi=(double*)malloc(n*sizeof(double)。h=h0。for(i=0。in。i+)*(x0+i)=x0i。f1=objf(x0)。for(i=0。i=f1)h=-h0。for(i=0。in。i+)*(x2+i)=*(x0+i)。f3=f1。for(i=0。in。i+)*(x0+i)=*(x1+i)。*(x1+i)=*(x2+i)。f1=f2。f2=f3。for(。)h=2.*h。for(i=0。in。i+)*(x2+i)=*(x1+i)+h*si。f3=objf(x2)。if(f2f3)break。else for(i=0。in。i+)*(x0+i)=*(
18、x1+i)。*(x1+i)=*(x2+i)。f1=f2。f2=f3。if(h0.)for(i=0。in。i+)ai=*(x2+i)。bi=*(x0+i)。else for(i=0。in。i+)ai=*(x0+i)。bi=*(x2+i)。for(i=0。i3。i+)free(xi)。double gold(double a,double b,double eps,int n,double xx)int i。double f1,f2,*x2,ff,q,w。for(i=0。i2。i+)xi=(double*)malloc(n*sizeof(double)。for(i=0。if2)for(i=0。in
19、。i+)bi=*(x0+i)。*(x0+i)=*(x1+i)。f1=f2。for(i=0。in。i+)*(x1+i)=ai+0.382*(bi-ai)。f2=objf(x1)。else for(i=0。in。i+)ai=*(x1+i)。*(x1+i)=*(x0+i)。f2=f1。for(i=0。in。i+)*(x0+i)=ai+0.618*(bi-ai)。f1=objf(x0)。q=0。for(i=0。ieps)。for(i=0。in。i+)xxi=0.5*(ai+bi)。ff=objf(xx)。for(i=0。i2。i+)free(xi)。return(ff)。double oneoptim
20、(double x0,double s,double h0,double epsg,int n,double x)double*a,*b,ff。a=(double*)malloc(n*sizeof(double)。b=(double*)malloc(n*sizeof(double)。jtf(x0,h0,s,n,a,b)。ff=gold(a,b,epsg,n,x)。free(a)。free(b)。return(ff)。double powell(double p,double h0,double eps,double epsg,int n,double x)int i,j,m。double*xx
21、4,*ss,*s。double f,f0,f1,f2,f3,fx,dlt,df,sdx,q,d。ss=(double*)malloc(n*(n+1)*sizeof(double)。s=(double*)malloc(n*sizeof(double)。for(i=0。in。i+)for(j=0。j=n。j+)*(ss+i*(n+1)+j)=0。*(ss+i*(n+1)+i)=1。for(i=0。i4。i+)xxi=(double*)malloc(n*sizeof(double)。for(i=0。in。i+)*(xx0+i)=pi。for(。)for(i=0。in。i+)*(xx1+i)=*(xx
22、0+i)。xi=*(xx1+i)。f0=f1=objf(x)。dlt=-1。for(j=0。jn。j+)for(i=0。idlt)dlt=df。m=j。sdx=0.。for(i=0。in。i+)sdx=sdx+fabs(xi-(*(xx1+i)。if(sdxeps)free(ss)。free(s)。for(i=0。i4。i+)free(xxi)。return(f)。for(i=0。in。i+)*(xx2+i)=xi。f2=f。for(i=0。in。i+)*(xx3+i)=2.*(*(xx2+i)-(*(xx1+i)。xi=*(xx3+i)。fx=objf(x)。f3=fx。q=(f1-2*f2
23、+f3)*(f1-f2-dlt)*(f1-f2-dlt)。d=0.5*dlt*(f1-f3)*(f1-f3)。if(f3f1)|(qd)if(f2=f3)for(i=0。in。i+)*(xx0+i)=*(xx2+i)。else for(i=0。in。i+)*(xx0+i)=*(xx3+i)。else for(i=0。in。i+)*(ss+(i+1)*(n+1)=xi-(*(xx1+i)。*(s+i)=*(ss+(i+1)*(n+1)。f=oneoptim(xx0,s,h0,epsg,n,x)。for(i=0。in。i+)*(xx0+i)=xi。for(j=m+1。j=n。j+)for (i=0
24、。in。i+)*(ss+i*(n+1)+j-1)=*(ss+i*(n+1)+j)。void main()double p=1,1。double ff,x2,x1,x2,f。ff=powell(p,0.3,0.001,0.0001,2,x)。printf(shuchuzuiyoujie:n)。x1=x1。x2=x2。f=ff。printf(x1=%f,x2=%f,f=%fn,x1,x2,f)。getchar()。(2)运行结果为:3约束优化搜索方法上机实践报告 1、写出所选择的约束优化搜索算法的基本过程、原理(可附流程图说明)。2、程序计算结果分析:中间各步骤的结果分析及与理论计算结果分析对比。
25、算例1:minf=(x(1)-2)2+(x(2)-1)2。s.t g1(x)=x(1)2-x(2)=0 g2(x)=x(1)+x(2)-2 x,fval=fmincon(myfun_constrain,x0,A,b,mycon)(2)运行结果:A=-1,0。0,-1 b=0。0 x0=3。3 A=-1 0 0 -1 b=0 0 x0=3 3 x,fval=fmincon(myfun_constrain,x0,A,b,mycon)Warning:The default trust-region-reflective algorithm does not solve problems with t
26、he constraints you have specified.FMINCON will use the active-set algorithm instead.For information on applicable algorithms,see Choosing the Algorithm in the documentation.In fmincon at 486 f=5 c=6 4 ceq=f=5.0000 c=6.0000 4.0000 ceq=f=5.0000 c=6.0000 4.0000 ceq=f=2.0000 c=1.0000 -1.0000 ceq=f=2.000
27、0 c=1.0000 -1.0000 ceq=f=2.0000 c=1.0000 -1.0000 ceq=f=1.0000 c=1.0e-15*0.9992 0.4441 ceq=f=1.0000 c=1.0e-07*0.2980 0.1490 ceq=f=1.0000 c=1.0e-07*-0.1490 0.1490 ceq=Local minimum found that satisfies the constraints.Optimization completed because the objective function is non-decreasing in feasible
28、directions,to within the default value of the function tolerance,and constraints are satisfied to within the default value of the constraint tolerance.Active inequalities(to within options.TolCon=1e-06):lower upper ineqlin ineqnonlin 1 2 x=1.0000 1.0000 fval=1.0000 (3)结果分析:由迭代程序得 x=1.0000。1.0000,fva
29、l=1.0000,与理论最优解相等 算例2.minf=1000-x(1)2-2*x(2)2-x(3)2-x(1)*x(2)-x(1)*x(3)。S.t g1(x)=x(1)2+x(2)2+x(3)2-25=0 g2(x)8*x(1)+14*x(2)+7*x(3)-56=0 g3(x)=-x(1)=0 g4(x)=-x(2)=0 g5(x)=-x(3)x,fval=fmincon(myfun_constrain,x0,A,b,mycon)(2)运行结果 A=-1,0,0。0,-1,0。0,0,-1 b=0。0。0 x0=2。2。2 A=-1 0 0 0 -1 0 0 0 -1 b=0 0 0 x
30、0=2 2 2 x,fval=fmincon(myfun_constrain,x0,A,b,mycon)Warning:The default trust-region-reflective algorithm does not solve problems with the constraints you have specified.FMINCON will use the active-set algorithm instead.For information on applicable algorithms,see Choosing the Algorithm in the docum
31、entation.In fmincon at 486 c=-13 2 ceq=c=-13.0000 2.0000 ceq=c=-13.0000 2.0000 ceq=c=-13.0000 2.0000 ceq=c=-5.9320 0 ceq=c=-5.9320 0.0000 ceq=c=-5.9320 0.0000 ceq=c=-5.9320 0.0000 ceq=c=1.1562 0.0000 ceq=c=1.1562 0.0000 ceq=c=1.1562 0.0000 ceq=c=1.1562 0.0000 ceq=c=31.5713 0.0000 ceq=c=8.1851 0.0000
32、 ceq=c=8.1851 0.0000 ceq=c=8.1851 0.0000 ceq=c=8.1851 0.0000 ceq=c=3.2553 0.0000 ceq=c=3.2553 0.0000 ceq=c=3.2553 0.0000 ceq=c=3.2553 0.0000 ceq=c=1.0789 -0.0000 ceq=c=1.0789 0.0000 ceq=c=1.0789 0.0000 ceq=c=1.0789 0.0000 ceq=c=0.4793 0.0000 ceq=c=0.4793 0.0000 ceq=c=0.4793 0.0000 ceq=c=0.4793 0.000
33、0 ceq=c=0.0039 -0.0000 ceq=c=0.0039 0.0000 ceq=c=0.0039 0.0000 ceq=c=0.0039 0.0000 ceq=c=1.0e-06*0.4884 0.0000 ceq=c=1.0e-06*0.8559 0.4187 ceq=c=1.0e-06*0.4948 0.2086 ceq=c=1.0e-06*0.8644 0.3705 ceq=Local minimum possible.Constraints satisfied.fmincon stopped because the predicted change in the obje
34、ctive function is less than the default value of the function tolerance and constraints are satisfied to within the default value of the constraint tolerance.Active inequalities(to within options.TolCon=1e-06):lower upper ineqlin ineqnonlin 1 2 x=3.5120 0.2170 3.5523 fval=961.7152 (3)结果分析:由迭代程序得 x=3
35、.5120。0.2170。3.5523,fval=961.7152,与理论结果相等。4平面连杆机构中再现已知运动规律的优化设计上机实践报告 1、写出所针对此实际的优化问题,所确定的优化目标函数和约束条件。例 8.5 设计一曲柄摇杆机构(如图 9 所示),要求曲柄1l从0转到900时,摇杆3l的转角最佳再现已知的运动规律:20032E,且已知5,141ll,0为极位角,其传动角允许在13545范围内变化。2、MATLAB 程序清单:function f=objfun(x)n=30。L1=1。L2=5。fx=0。fa0=acos(L1+x(1)2-x(2)2+L22)/(2*(L1+x(1)*L2
36、)。%pu0=acos(L1+x(1)2-x(2)2-L22)/(2*(x(2)*L2)。%for i=1:n fai=fa0+0.5*pi*i/n。pui=pu0+2*(fai-fa0)2/(3*pi)。ri=sqrt(L12+L22-2*L1*L2*cos(fai)。alfai=acos(ri2+x(2)2-x(1)2)/(2*ri*x(2)。betai=acos(ri2+L22-L12)/(2*ri*L2)。if fai0&faipi&fai x,fval=fmincon(objfun,x0,a,b,lb,ub,nonlinconstr,options)(2)运行结果:x0=4.0。4.
37、0。lb=1。1。ub=10。10。a=-1-1。1-1。-1 1。b=-6。4。4。options=optimset(LargeScale,on,TolFun,1e-6)。x,fval=fmincon(objfun,x0,a,b,lb,ub,nonlinconstr,options)Warning:The default trust-region-reflective algorithm does not solve problems with the constraints you have specified.FMINCON will use the active-set algorit
38、hm instead.For information on applicable algorithms,see Choosing the Algorithm in the documentation.In fmincon at 486 No feasible solution found.fmincon stopped because the size of the current search direction is less than twice the default value of the step size tolerance but constraints are not satisfied to within the default value of the constraint tolerance.x=6.6622 6.6622 fval=0.5720