1高等流体力学班级:机设15学硕班学号:2015200813姓名:张湘楠授课老师:毕新胜日期:2016年7月1日2一、研究报告内容:1、λ=0.618的证明、一维搜索程序作业;2、单位矩阵程序作业;3、连杆机构问题+自行选择小型机械设计问题或其他工程优化问题;(1)分析优化对象,根据设计问题的要求,选择设计变量,确立约束条件,建立目标函数,建立优化设计的数学模型并编制问题程序;(2)选择适当的优化方法,简述方法原理,进行优化计算;(3)进行结果分析,并加以说明。4、写出课程实践心得体会,附列程序文本。5、为响应学校2014年度教学工作会议的改革要求,探索新的课程考核评价方法,特探索性设立一开放式考核项目,占总成绩的5%。试用您自己认为合适的方式(书面)表达您在本门课程学习方面的努力、进步与收获。(考评将重点关注您的独创性、简洁性与可验证性)。二、研究报告要求1、报告命名规则:学号-姓名-《机械优化设计》课程实践报告.doc2、报告提交邮址:weirongw@hfut.edu.cn(收到回复,可视为提交成功)。追求:问题的工程性,格式的完美性,报告的完整性。不追求:问题的复杂性,方法的惟一性。评判准则:独一是好,先交为好;切勿拷贝。3目录:λ=0.618的证明、一维搜索程序作业①关于618.0的证明……………………………………………………4②一维搜索的作业采用matlab进行编程……………………………………………5采用C语言进行编程………………………………………………7单位矩阵程序作业①采用matlab的编程…………………………………………………9②采用c语言进行编程…………………………………………………9机械优化工程实例①连杆机构…………………………………………………………………11②自选机构…………………………………………………………………16课程实践心得……………………………………………………………………20附列程序文本……………………………………………………………………21进步,努力,建议………………………………………………………………254一、λ=0.618的证明、一维搜索程序作业①关于618.0的证明黄金分割法要求插入点1,2的位置相对于区间],[ba两端具有对称性,即)(1abb)(2aba其中为待定常数。此外,黄金分割法还要求在保留下来的区间内再插入一点所形成的区间新三段,与原来的区间三段具有相同的比例分布。黄金分割法还要求在保留下来的区间内再插一点所形成的区间新三段,与原来的区间三段有相同的比例分布。设原区间],[ba的长度为1,如图一所示,保留下来的区间],[21长度为,区间缩短率为。为了保持相同的分别比例。插入新点3应在-1位置上,1在原区间的-11位置应相当于在保留区间的2位置。故有:2-101-2解得618.021-5abα1α211-λλ图一aα22α3α1λλ(1-λ)λ2图二5编写0.618的程序,并计算下列问题osxxfbaNOc20:1.32100:2.2xxfbaNO(1)采用MATLAB进行编程%%%fun.m:黄金分割法求极值点%输入数据%a–搜索区间下限%b–搜索区间上限%e–精度%输出数据:%x–极小值点%其他常量:%c1,c2,c3–区间%r–黄金分割比例0.618%%%定义函数functionx=fun(a,b,e)r=0.618;c1=b-r*(b-a);c2=a+r*(b-a);y1=f(c1);y2=f(c2);while(abs((b-a)/b)e)&&(abs((y2-y1)/y2)e)ify1=y2a=c1;c1=c2;y1=y2;c2=a+r*(b-a);y2=f(c2);elseb=c2;c2=c1;y2=y1;c1=b-r*(b-a);y1=f(c1);endendx=0.5*(a+b);end对f函数的确立10functiony=f(x)y=(x-2)^2+3;end11functiony=f(x)y=cosxend程序框图6如果要计算y=(x-2)^2+3;的黄金分割法,则需要将图所示的f脚本中的函数写成如①所示如果要计算y=cosx;黄金分割法,则需要将图所示的f脚本中的函数写成如②所示fun函数表示对matlab的主程序语言。函数NO.2运算结果:函数NO.1运算结果:7(2)采用C语言进行编程#includestdio.h#defineK0.618doublef(double);/*****函数值计算函数声明*****/voidmain(void){doublea,b,size;doublea1,a2;intI;printf(“请输入区间两端点(端点值应大于0):”);scanf(“%lf,%lf”,&a,&b);/*****输入端点值*****/printf(“请输入精度:”);scanf(“%lf”,&size);/*****输入精度*****/printf(“区间为(%lf,%lf),精度为%lf\n”,a,b,size);printf(“序号\ta1\t\ta2\t\tf(a1)\t\tf(a2)\n”);for(i=0;i64;i++)printf(“-“);printf(“\n”);i=0;while((b-a)size)/*****用精度控制循环次数*****/{i++;a1=b-K*(b-a);/*****按0.618法插入两点*****/a2=a+K*(b-a);printf(“%2d:\t%f\ta%f\t%f\t%f\n”,I,a1,a2,f(a1),f(a2));/*****输出每次计算后a1,a2,f(a1),f(a2)的值*****/if(f(a1)=f(a2))a=a1;elseb=a2;}printf(“所求极小值点为:x=%lf\t极小值f(x)=%f\n”,a,f(b));}doublef(doublex)/*****函数值计算函数*****/{doublef;f=(x-2)*(x-2)+3;return(f);}8对于y=cosx,须在程序中加一个#include(math.h)头程序,以示我要调用函数语句。再将倒数第三行函数改为y=cos(x),再次编译运算即可。运行如图所示我们可以看出,大约在x=2处取到极值。与理论相符。运行如图所示我们可以看出,大约在π处取到极值。与理论相符。9二、用简单的语句写一个单位矩阵①采用matlab构造:Matlab构造的矩阵最是简便,因为本身就有一个单位矩阵的函数。由于matlab是基于C语言而设立的一个数学运用软件,所以他的集成度非常高,而且具有很好的开放性,于是我们得知eye函数,将其构造。Eg:若要构造一个3维的单位矩阵,则输入eye(3)若要构造一个n为的单位矩阵,这输入eye(n)②用C语言构造程序如图所示:#includestdio.hintmain(){intI,j,n;while(scanf(“%d”,&n)==1){for(I=0;In;++i){for(j=0;jn;++j)printf(“%d“,I==j);printf(“\n”);}}return0;10}11三、机械优化设计工程实例①连杆机构问题(1)连杆机构问题描述图1机构简图设计一曲柄连杆摇杆机构,要求曲柄1l从900m时,摇杆3l的转角最佳再现已知的运动规律:200)(32E且1l=1,4l=5,0为极位角,其传动角允许在13545范围内变化。(2)数学模型的建立设计变量:这里有两个独立参数2l和3l。因此设计变量为tTllxxx3221目标函数:将输入角分成30等分,并用近似公式计算,可得目标函数的表达式12301iiEiiixf约束条件:GX(1)=-X(1)0GX(2)=-X(2)0GX(3)=-(X(1)+X(2))+6.00GX(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.00GX(7)=-(X(1)**2+X(2)**2+1.4142*X(1)*X(2))+36.00(3)程序编制C======================SUBROUTINEFFX(N,X,FX)C======================DIMENSIONX(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.0DO10K=0,3012PI=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)THENQI=3.1415926-AL-BTELSEQI=3.1415926-AL+BTENDIFIF(K.NE.0.OR.K.NE.30)THENFX=FX+(QI-QE)**2*TELSEFX=FX+(QI-QE)**2*T/2.0ENDIF12CONTINUERETURNENDC=========================SUBROUTINEGGX(N,KG,X,GX)C=========================DIMENSIONX(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.0RETURNENDC=========================SUBROUTINEHHX(N,KH,X,HX)C=========================DIMENSIONX(N),HX(KH)X(1)=X(1)RETURNEND输入数据如下:2,7,04.3,3.2132.,0.2,0.01,0.00001,0.000010,1,03.5,2.8,5.5,4.5(4)可执行程序的生成13将程序文本保存成文件t001.txt,存放在OPT_EXAM\FORTRAN\0-fortran目录下。14使用DOS操作界面,OPT_EXAM\FORTRAN\0-fortran目录下,输入命令asumt.for+t001.txtt001.for回车。生成t001.for文件。15for1t001;回车;④for2回车;⑤linkt001;回车,即生成可执行程序t001.exe。⑥从t001.dat文件中加载数据,运行t001.exe。t001t001.datt001.rtf回车得到结果。操作过程如图:14操作步骤(5)结果与分析结果显示如下:==============PRIMARYDATA==============N=2KG=7KH=0X:.4300000E+01.3200000E+01FX:.7847605E-02GX:-.4300000E+01-.3200000E+01-.1500000E+01-.2900000E+01-