20110534-张成-《机械优化设计》课程实践报告.doc
- 格式:doc
- 大小:725.25 KB
- 文档页数:33
研究报告要求及格式模版合肥工业大学《机械优化设计》课程实践研究报告班级:机械设计制造及其自动化11-5班学号:20110534姓名:张成授课老师:王卫荣日期:2014年4 月10日一、研究报告内容:1、λ=0.618的证明、一维搜索程序作业;2、单位矩阵程序作业;3、连杆机构问题+自行选择小型机械设计问题或其他工程优化问题;(1)分析优化对象,根据设计问题的要求,选择设计变量,确立约束条件,建立目标函数,建立优化设计的数学模型并编制问题程序;(2)选择适当的优化方法,简述方法原理,进行优化计算;(3)进行结果分析,并加以说明。
4、写出课程实践心得体会,附列程序文本。
5、为响应学校2014年度教学工作会议的改革要求,探索新的课程考核评价方法,特探索性设立一开放式考核项目,占总成绩的5%。
试用您自己认为合适的方式(书面)表达您在本门课程学习方面的努力、进步与收获。
(考评将重点关注您的独创性、简洁性与可验证性)。
二、研究报告要求1、报告命名规则:学号-姓名-《机械优化设计》课程实践报告.doc2、报告提交邮址:weirongw@(收到回复,可视为提交成功)。
追求:问题的工程性,格式的完美性,报告的完整性。
不追求:问题的复杂性,方法的惟一性。
评判准则:独一是好,先交为好;切勿拷贝。
目录1、λ=0.618的证明 (4)2、编写0.618算法程序 (6)2.1 求f(x)=cosx最小值 (6)2.2 求f(x)=(x-2)2+3最小值 (7)3、单位矩阵程序作业 (8)4、连杆机构问题 (11)5、自行选择小型机械设计问题或其他工程优化问题 (17)6、写出课程实践心得体会,附列程序文本 (21)7、为响应学校2014年度教学工作会议的改革要求,探索新的课程考核评价方法,特探索性设立一开放式考核项目,占总成绩的5% (22)具体内容1:λ= 0.618的证明(y2 > y1)证明:0.618法黄金分割法,又称作黄金分割法,适用于[a,b] 区间上的任何单谷函数求极小值问题。
黄金分割法是建立在区间消去法原理基础上的试探方法,即在搜索区间[a,b] 内适当插入两点α1、α2,并计算其函数值。
α1、α2 将区间分成三段。
应用函数的单谷性质,通过函数值大小的比较,删去其中一段,使搜索区间得以缩短。
然后再在保留下来的区间上做同样的位置,如此迭代下去,使搜索区间无限缩小,从而得到极小点的数值近似值。
0.618法要求插入点α1、α2 的位置相对于区间[a,b] 两端点具有对称性,即α1 = b –λ( b –a )α2=a+λ(b–a)其中,λ为待定常数。
下面证明λ= 0.618。
除对称性要求外,黄金分割法还要求保留下来的区间内再插入一点所形成的区间新三段,与原来区间的三段具有相同的比例分布。
设原有区间[a,b] 长度为1如图所示,保留下来的区间[a,b] 长度为λ,区间缩短率为λ。
为了保持相同的比例分布,新插入点α3应在λ( 1 –λ) 位置上,α1在元区间的1 –λ位置应相当于在保留区间的λ²位置。
故有1 –λ= λ²即λ²+ λ–1 = 0取方程正数解得若保留下来的区间为[α1,b] ,根据插入点的对称性,也能推得同样的λ的值。
若保其0.618法的程序框图如下:2.1:用0.618的算法程序求函数在〔a,b〕区间上的极小值。
用C语言编写程序如下:2.1 a=0,b=2π,y=cosx,收敛精度e=0.001#include<math.h>#include<stdio.h>#define f(x) cos(x)double calc(double *a,double *b,double e,int *n) { double x1,x2,s;if(fabs(*b-*a)<=e)s=f((*b+*a)/2);else{x1=*b-0.618*(*b-*a);x2=*a+0.618*(*b-*a);if(f(x1)>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=%d\n",a,b,s,n);}输入a,b,及精度e的值,输出极小点,函数极小值。
如下:2.2:用0.618的算法程序求函数在〔a,b〕区间上的极小值。
用C语言编写程序如下:2.2 a=0,b=10,y=(x-2)2+3,收敛精度e=0.001#include<stdio.h>#include<math.h>void main(){float a,b,c=0.618,x[4],y[4],e; scanf("%f,%f,%f",&a,&b,&e); x[1]=b-c*(b-a);x[2]=a+c*(b-a);y[1]=(x[1]-2)*(x[1]-2)+3;y[2]=(x[2]-2)*(x[2]-2)+3;do{ if(y[1]>=y[2]){ a=x[1];x[1]=x[2];y[1]=y[2];x[2]=a+c*(b-a);y[2]=(x[2]-2)*(x[2]-2)+3;}else{ b=x[2];x[2]=x[1];y[2]=y[1];x[1]=b-c*(b-a);y[1]=(x[1]-2)*(x[1]-2)+3;}}while(fabs((b-a)/b)>e);x[0]=(a+b)/2;y[0]=(x[0]-2)*(x[0]-2)+3;printf("x*=%f\n",x[0]);printf("y=%f\n",y[0]);}输入a,b,及精度e的值,输出极小点,函数极小值。
如下:3:编写生成单位矩阵的程序用C语言编写程序如下:#include<stdio.h>void main(void){ int i,j,n;printf("%3d",n);scanf("%3d",&n);for(i=0;i<=n;i++){for(j=0;j<=n;j++){if(i==j)printf("%3d",1);else printf("%3d",0);}printf("\n");}}运行结果:当n=6时:当n=15时:4、(一)连杆机构问题4.1.1 问题描述设计一曲柄连杆摇杆机构,要求曲柄l1从1l 从︒+=900ϕϕm 时,摇杆3l 的转角最佳再现已知的运动规律:200)(32ϕϕπψψ-+=E 且1l =1,4l =5,0ϕ为极位角,其传动角允许在︒︒≤≤13545γ范围内变化。
设计变量为[][]tT l l x x x 3221== 目标函数的表达式:()([)()]12301-=--=∑i i Ei i i x f ϕϕϕϕ约束条件是:GX(1)=-X(1)≤0GX(2)=-X(2) ≤0GX(3)=-(X(1)+X(2))+6.0≤0GX(4)=-(X(2)+4.0)+X(1) ≤0GX(5)=-(4.0+X(1))+X(2) ≤0GX(6)=-(1.4142*X(1)*X(2)-X(1)**2-X(2)**2)-16.0≤0GX(7)=-(X(1)**2+X(2)**2+1.4142*X(1)*X(2))+36.0≤04.1.2 编写程序C ======================SUBROUTINE FFX(N,X,FX)C ======================DIMENSION X(N)COMMON /ONE/I1,I2,I3,I4,NFX,I6NFX=NFX+1P0=ACOS(((1.0+X(1))**2-X(2)**2+25.0)/(10.0*(1.0+X(1)))) Q0=ACOS(((1.0+X(1))**2-X(2)**2-25.0)/(10.0*X(2)))T=90.0*3.1415926/(180.0*30.0)FX=0.0DO 10 K=0,30PI=P0+K*TQE=Q0+2.0*(PI-P0)**2/(3.0*3.1415926)D=SQRT(26.0-10.0*COS(PI))AL=ACOS((D*D+X(2)*X(2)-X(1)*X(1))/(2.0*D*X(2)))BT=ACOS((D*D+24.0)/(10.0*D))IF(PI.GE.0.0 .AND. PI.LT.3.1415926) THEN QI=3.1415926-AL-BTELSEQI=3.1415926-AL+BTEND IFIF(K.NE.0 .OR. K.NE.30)THENFX=FX+(QI-QE)**2*TELSEFX=FX+(QI-QE)**2*T/2.0END IF10 CONTINUERETURNENDC =========================SUBROUTINE GGX(N,KG,X,GX)C =========================DIMENSION X(N),GX(KG)GX(1)=-X(1)GX(2)=-X(2)GX(3)=-(X(1)+X(2))+6.0GX(4)=-(X(2)+4.0)+X(1)GX(5)=-(4.0+X(1))+X(2)GX(6)=-(1.4142*X(1)*X(2)-X(1)**2-X(2)**2)-16.0GX(7)=-(X(1)**2+X(2)**2+1.4142*X(1)*X(2))+36.0 RETURNENDC =========================SUBROUTINE HHX(N,KH,X,HX)C =========================DIMENSION X(N),HX(KH)X(1)=X(1)RETURNEND输入数据如下:2,7,04.3,3.22.,0.2,0.01,0.00001,0.000010,1,03.5,2.8,5.5,4.54.1.3利用Fortran编译器生成可执行程序(1)将子程序存盘并命名(如:t001.txt)。
Copy asumt.for+t001.txt t001.for 然后回车将罚函数算法主程序asumt.for与问题的数学模型子程序t001.txt拷贝合成该问题的优化设计程序t001.for(2)编译、连接生成可执行文件t001.exe1)for1 t001; 然后回车2)for2 然后回车3)link t001; 然后回车,即可生成可执行程序t001.exe4)从xiti.txt 文件中加载数据,运行可执行文件t001.exet001<t001.txt>t001.rtf 然后回车(将结果存入t001.rtf文件中)。