最小体积二级圆柱齿轮减速器的优化设计.doc

上传人:李主任 文档编号:3278018 上传时间:2019-08-07 格式:DOC 页数:15 大小:229.01KB
返回 下载 相关 举报
最小体积二级圆柱齿轮减速器的优化设计.doc_第1页
第1页 / 共15页
最小体积二级圆柱齿轮减速器的优化设计.doc_第2页
第2页 / 共15页
最小体积二级圆柱齿轮减速器的优化设计.doc_第3页
第3页 / 共15页
最小体积二级圆柱齿轮减速器的优化设计.doc_第4页
第4页 / 共15页
最小体积二级圆柱齿轮减速器的优化设计.doc_第5页
第5页 / 共15页
点击查看更多>>
资源描述

《最小体积二级圆柱齿轮减速器的优化设计.doc》由会员分享,可在线阅读,更多相关《最小体积二级圆柱齿轮减速器的优化设计.doc(15页珍藏版)》请在三一文库上搜索。

1、最小体积二级圆柱齿轮减速器的优化设计班级:机制072 学号: 姓名: 输入功率(P=31kw)一建立数学模型该减速器的总中心距计算式为 1.选取设计变量 由涉及的独立参数,取 2. 建立目标函数 3. 确定约束条件 (1)确定上、下限 从传递功率于转速可估计 标准值(3.5,4,5,6,7,8) 标准值(4,5,6,8,10) 综合考虑传动平稳等等各种因素,取: 由此建立12个不等式约束条件式 (2)按齿面接触强度公式 得到高速级和低速级齿面接触强度条件分别为 1 2(3)按轮齿弯曲强度计算公式 得到高速级和低速级大小齿轮的弯曲强度条件分别为 3 4 5 6 (4)按高速级大齿轮与低速轴不干涉

2、相碰条件 得 7对式1至式7代入有关数据:(注:查相关机械设计手册,得相关公式: 许用接触应力 许用弯曲应力 因螺旋角、材料、要求等与例题相同,各类系数(如K,之类)与例题相同;因材料与例题选取相同,则、等参数相同。所以由以上公式可推出本设计与例题的、只与的比有关。所以本设计在原有例题的数据基础上,对一些数据进行推算。当然第二种方法是也可以通过题目要求查机械设计手册,一步步计算出相关数据。本设计在正确的基础上,有较为简便的第一种方法。)由上得:、与、相比明显为消极约束,故可省略。共取17个约束条件。至此已形成了完整的数学模型。2 初始搜索区间的确定1) 将代入目标函数得2) 确定其搜索区间a,

3、b。设初始点,初始步长h=1。以下是基于c-free4.0上运行的C程序:#include #include void main() int a1=0,a2,a3,h=1; float f1,f2,f3,a,b; f1=67.33*a1+1/(1.5+a1)+1/(3-a1)+781, a2=a1+h,f2=67.33*a2+1/(1.5+a2)+1/(3-a2)+781; if (f2=f1) h=-h,a3=a1,f3=f1; while(f3a3) a=a3,b=a1; else a=a1,b=a3; printf(a=%.3f b=%.3fn,a,b); else a3=a2+h,f3

4、=67.33*a3+1/(1.5+a3)+1/(3-a3)+781; while(f3a3) a=a3,b=a1; else a=a1,b=a3; printf(a=%.3f b=%.3fn,a,b); 得到运行结果:a=-2.000,b=6.000所以初始区间为-2.000,6.000。3 然后用黄金分割法求其最优解以下是基于c-free4.0上运行的C程序: #include #include void main() float a1,a2,f1,f2,f3,a,b,am; a=-2,b=6; while(b-a0.01) a1=b-0.618*(b-a), f1=67.33*a1+1/(

5、1.5+a1)+1/(3-a1)+781; a2=a+0.618*(b-a), f2=67.33*a2+1/(1.5+a2)+1/(3-a2)+781; if(f1=f2) b=a2,a2=a1,f2=f1,a1=b-0.618*(b-a), f1=67.33*a1+1/(1.5+a1)+1/(3-a1)+781; else a=a1,a1=a2,f1=f2,a2=a+0.618*(b-a), f2=67.33*a2+1/(1.5+a2)+1/(3-a2)+781; am=0.5*(b+a); f3=67.33*am+1/(1.5+am)+1/(3-am)+781; printf(amin=%

6、.4fnf(min)=%.4fn,am,f3);得出结果为 amin=-1.5035所以最优解为 4 鲍威尔法#include #include #define m 10 /*数组长度m = 维数n */#define pi 3.1416 float f(float x);void mjtf(int n,float x0,float h,float s,float a,float b);void mhjfgf(int n,float a,float b,float flag,float x);void mpowell(int n,float x0,float h,float flag1,flo

7、at flag2,float a,float b,float x);float f(float x) float result; result=(x0*x2*(1+x4)+x1*x3*(1+31.5/x4)/2/cos(x5*pi/180) +1/(x0-3.5)+1/(8-x0)+1/(x1-3.5)+1/(10-x1)+1/(x2-14)+1/(22-x2) +1/(x3-16)+1/(22-x3)+1/(x4-5.8)+1/(7-x4)+1/(x5-8)+1/(15-x5) +1/(x0*x2-68.3722)+1/(x1*x3-66.7325)+ 1/(0.0000570*(1+x4)

8、*x0*x0*x0*x2*x2-cos(x5*pi/180)*cos(x5*pi/180) +1/(0.0000599*(31.5+x4)*x1*x1*x1*x3*x3-x4*x4*cos(x5*pi/180)*cos(x5*pi/180) +1/(x1*x3*(x4+31.5)-x4*(2*(x0+50)*cos(x5*pi/180)+x0*x2*x4); return result;/*搜索区间子程序*/void mjtf(int n,float x0,float h,float s,float a,float b) a0=2,b0=10; a1=2,b1=13; a2=14,b2=22;

9、 a3=16,b3=22; a4=5,b4=7; a5=8,b5=15;/*多维黄金分割法子程序*/void mhjfgf(int n,float a,float b,float flag,float x) int i; float x1m,x2m,f1,f2,sum; for(i=0;in;i+) /*计算初始两试点*/ x1i=bi-(float)0.618*(bi-ai); f1=f(x1); for(i=0;in;i+) x2i=ai+(float)0.618*(bi-ai); f2=f(x2); do if(f1=f2) /*判断消去区间*/ /*消去右*/ for(i=0;in;i

10、+) bi=x2i; for(i=0;in;i+) x2i=x1i; f2=f1; for(i=0;in;i+) x1i=bi-(float)0.618*(bi-ai); f1=f(x1); else /*消去左*/ for(i=0;in;i+) ai=x1i; for(i=0;in;i+) x1i=x2i; f1=f2; for(i=0;in;i+) x2i=ai+(float)0.618*(bi-ai); f2=f(x2); sum=0; for(i=0;iflag); for(i=0;in;i+) xi=(float)0.5*(bi+ai); /*已达到,输出极小点*/*鲍威尔法子程序*

11、/void mpowell(int n,float x0,float h,float flag1,float flag2,float a,float b,float x) int i,j,k,r; float x1m,x11m,x2m,f0,f1,f2,fnm,smm,sum; for(i=0;in;i+) /*方向矩阵初始化*/ for(k=0;kn;k+) if(i=k) sik=1; else sik=0; k=0; while(1) for(i=0;in;i+) x1i=x0i; x11i=x1i; for(i=0;in;i+) /*依次按每个方向搜索*/ mjtf(n,x1,h,si

12、,a,b); mhjfgf(n,a,b,flag1,x1); fni=f(x11)-f(x1); /*计算函数下降值*/ x11i=x1i; for(i=0;in;i+) /*计算映射点*/ x2i=2*x1i-x0i; for(i=1;in;i+) /*找出函数下降值中的最大值存入fn0*/ if(fn0=f0|(f0-2*f1+f2)*(f0-f1-fn0)*(f0-f1-fn0)=0.5*fn0*(f0-f2)*(f0-f2) /*判断是否需要换方向*/*不需要换*/ if(f1=f2) /*判断将终点还是将映射点赋给下一轮始点*/ sum=0; /*计算一轮中终点与始点的距离*/ fo

13、r(i=0;in;i+) sum+=(x1i-x0i)*(x1i-x0i); for(i=0;in;i+) /*将终点赋给下一轮始点*/ x0i=x1i; else sum=0; /*计算一轮中终点与始点的距离*/ for(i=0;in;i+) sum+=(x2i-x0i)*(x2i-x0i); for(i=0;in;i+) /*将映射点赋给下一轮始点*/ x0i=x2i; else for(i=r;in-1;i+) /*去掉第r+1个方向,其它方向前移*/ for(j=0;jn;j+) sij=si+1j; for(i=0;in;i+) /*生成新方向放最后*/ sn-1i=x1i-x0i;

14、 mjtf(n,x1,h,sn-1,a,b); /*按新方向搜索一次*/ mhjfgf(n,a,b,flag1,x1); sum=0; /*计算一轮中终点与始点的距离*/ for(i=0;in;i+) sum+=(x1i-x0i)*(x1i-x0i); for(i=0;in;i+) /*将终点赋给下一轮始点*/ x0i=x1i; if(sqrt(sum)=flag2) break; else k+=1; for(i=0;in;i+) /*输出极小点*/ xi=x1i;/*鲍威尔法主程序*/void main() int i,n; float h,flag1,flag2,x0m,am,bm,xm

15、; printf(nn); printf(请输入维数:n); scanf(%d,&n); printf(请输入初始点:); for(i=0;in;i+) printf(nx0%d=,i); scanf(%f,&x0i); printf(n请输入初始步长:n); scanf(%f,&h); printf(n请输入黄金分割法迭代精度:n); scanf(%f,&flag1); printf(n请输入鲍威尔法迭代精度:n); scanf(%f,&flag2); mpowell(n,x0,h,flag1,flag2,a,b,x); printf(n极小点坐标为:n); for(i=0;in;i+) p

16、rintf(x%d=%.4fn,i,xi); printf(n极小值为:n%.4fn,f(x); 输入数据:65,6,19,21,6,910.10.1输出结果:X0=2.1656X1=2.2277x2=14.1656X3=16.1242X4=5.0414X5=8.1449极小值为:240.8813五约束随机方向搜索法 以下是基于win-tc运行的c程序:#include #include #define pi 3.1416float x06=5,6,19,21,6,9,x6;float fx();float sueiji();float restrict();void main() float

17、 a0,a,e,f0,f,Nmax,y6,s; int n,i,k,jj,k1,k2,yy; printf(enter the number n a0 e Nmaxn); scanf(%d%f%f%f,&n,&a0,&e,&Nmax); for(i=0;in;i+) xi=x0i; f0=fx(); a=a0; do k=1; jj=0; do for(i=0;i6;i+) yi=sueiji(); s=1/sqrt(y0*y0+y1*y1+y2*y2+y3*y3+y4*y4+y5*y5); for(i=0;i6;i+) xi=x0i+a*s*yi; do yy=restrict(); if(

18、yy=1) f=fx(); else break; if(ff0) for(i=0;iNmax) k2=0; if(a=e) k1=0; printf(X=(%f,%f,%f,%f,%f,%f)n,x0,x1,x2,x3,x4,x5); printf(F=%fn,fx(); getch(); else k1=1; a=0.5*a; else k2=1; else k1=1; while(k2=1); while(k1=1); float fx() float f; f=(x0*x2*(1+x4)+x1*x3*(1+31.5/x4)/2/cos(x5*pi/180) +1/(x0-3.5)+1/

19、(8-x0)+1/(x1-3.5)+1/(10-x1)+1/(x2-14)+1/(22-x2) +1/(x3-16)+1/(22-x3)+1/(x4-5.8)+1/(7-x4)+1/(x5-8)+1/(15-x5) +1/(x0*x2-68.3722)+1/(x1*x3-66.7325)+ 1/(0.0000570*(1+x4)*x0*x0*x0*x2*x2-cos(x5*pi/180)*cos(x5*pi/180) +1/(0.0000599*(31.5+x4)*x1*x1*x1*x3*x3-x4*x4*cos(x5*pi/180)*cos(x5*pi/180) +1/(x1*x3*(x4+

20、31.5)-x4*(2*(x0+50)*cos(x5*pi/180)+x0*x2*x4); return(f); float sueiji() long i;float r; for(i=0;i39999;i+); srand(unsigned)time(NULL); r=(double)(rand()%100/(double)100); r=2*r-1; return(r); float restrict() if(x0-2)=0) return(0); if(7-x0)=0) return(0); if(x1-2)=0) return(0); if(7-x1)=0) return(0);

21、if(x2-14)=0) return(0); if(22-x2)=0) return(0); if(x3-16)=0) return(0); if(22-x3)=0) return(0); if(x4-5.8)=0) return(0); if(7-x4)=0) return(0); if(x5-8)=0) return(0); if(15-x5)=0) return(0); if(x0*x2-69.1865)=0) return(0); if(x1*x3-68.4876)=0) return(0); if(0.0000843*(1+x4)*x0*x0*x0*x2*x2-cos(x5*pi/

22、180)*cos(x5*pi/180)=0) return(0); if(0.0000912*(31.5+x4)*x1*x1*x1*x3*x3-x4*x4*cos(x5*pi/180)*cos(x5*pi/180)=0) return(0); if(x1*x3*(x4+31.5)-x4*(2*(x0+50)*cos(x5*pi/180)+x0*x2*x4)=0) return(0); return(1); 输入:6,2,0.1,10输出:X=4.846 , 5.846 , 18.846 , 20.846 , 5.846 , 8.846F=737.455六内点惩罚法 以下是基于c-free4.0

23、平台运行的程序:#include #include #define m 10 /*数组长度m = 维数n */#define pi 3.142 int r=0.01;float f(float x);void mjtf(int n,float x0,float h,float s,float a,float b);void mhjfgf(int n,float a,float b,float flag,float x);void mpowell(int n,float x0,float h,float flag1,float flag2,float a,float b,float x);voi

24、d mndcfhs(int n,float h,float x0,float flag1,float flag2,float flag3,float a,float b,float x);float f(float x) float result; result=(x0*x2*(1+x4)+x1*x3*(1+31.5/x4)/2/cos(x5*pi/180) +r*(1/(x0-3.5)+1/(8-x0)+1/(x1-3.5)+1/(10-x1)+1/(x2-14)+1/(22-x2) +1/(x3-16)+1/(22-x3)+1/(x4-5.8)+1/(7-x4)+1/(x5-8)+1/(1

25、5-x5) +1/(x0*x2-68.3722)+1/(x1*x3-66.7325)+ 1/(0.0000570*(1+x4)*x0*x0*x0*x2*x2-cos(x5*pi/180)*cos(x5*pi/180) +1/(0.0000599*(31.5+x4)*x1*x1*x1*x3*x3-x4*x4*cos(x5*pi/180)*cos(x5*pi/180) +1/(x1*x3*(x4+31.5)-x4*(2*(x0+50)*cos(x5*pi/180)+x0*x2*x4); return result;/*多维进退法子程序*/void mjtf(int n,float x0,float

26、 h,float s,float a,float b) a0=2;b0=10; a1=2;b1=13; a2=14;b2=22; a3=16;b3=22; a4=5;b4=7; a5=8;b5=15; /*多维黄金分割法子程序*/void mhjfgf(int n,float a,float b,float flag,float x) int i; float x1m,x2m,f1,f2,sum; for(i=0;in;i+) /*计算初始两试点*/ x1i=bi-0.618*(bi-ai); f1=f(x1); for(i=0;in;i+) x2i=ai+0.618*(bi-ai); f2=

27、f(x2); do if(f1=f2) /*判断消去区间*/ /*消去右*/ for(i=0;in;i+) bi=x2i; for(i=0;in;i+) x2i=x1i; f2=f1; for(i=0;in;i+) x1i=bi-0.618*(bi-ai); f1=f(x1); else /*消去左*/ for(i=0;in;i+) ai=x1i; for(i=0;in;i+) x1i=x2i; f1=f2; for(i=0;in;i+) x2i=ai+0.618*(bi-ai); f2=f(x2); sum=0; for(i=0;iflag); for(i=0;in;i+) xi=0.5*(

28、bi+ai); /*已达到,输出极小点*/*鲍威尔法子程序*/void mpowell(int n,float x0,float h,float flag1,float flag2,float a,float b,float x) int i,j,k,r; float x1m,x11m,x2m,f0,f1,f2,fnm,smm,sum; for(i=0;in;i+) /*方向矩阵初始化*/ for(k=0;kn;k+) if(i=k) sik=1; else sik=0; k=0; while(1) for(i=0;in;i+) x1i=x0i; x11i=x1i; for(i=0;in;i+

29、) /*依次按每个方向搜索*/ mjtf(n,x1,h,si,a,b); mhjfgf(n,a,b,flag1,x1); fni=f(x11)-f(x1); /*计算函数下降值*/ x11i=x1i; for(i=0;in;i+) /*计算映射点*/ x2i=2*x1i-x0i; for(i=1;in;i+) /*找出函数下降值中的最大值存入fn0*/ if(fn0=f0|(f0-2*f1+f2)*(f0-f1-fn0)*(f0-f1-fn0)=0.5*fn0*(f0-f2)*(f0-f2) /*判断是否需要换方向*/*不需要换*/ if(f1=f2) /*判断将终点还是将映射点赋给下一轮始点

30、*/ sum=0; /*计算一轮中终点与始点的距离*/ for(i=0;in;i+) sum+=(x1i-x0i)*(x1i-x0i); for(i=0;in;i+) /*将终点赋给下一轮始点*/ x0i=x1i; else sum=0; /*计算一轮中终点与始点的距离*/ for(i=0;in;i+) sum+=(x2i-x0i)*(x2i-x0i); for(i=0;in;i+) /*将映射点赋给下一轮始点*/ x0i=x2i; else for(i=r;in-1;i+) /*去掉第r+1个方向,其它方向前移*/ for(j=0;jn;j+) sij=si+1j; for(i=0;in;i+) /*生成新方向放最后*/ sn-1i=x1i-x0i;

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 研究报告 > 信息产业


经营许可证编号:宁ICP备18001539号-1