机械优化设计——复合形方法及源程序
- 格式:doc
- 大小:138.00 KB
- 文档页数:7
《机械优化设计》实验报告目录1.进退法确定初始区间 (3)1.1 进退法基本思路 (3)1.2 进退法程序框图 (3)1.3 题目 (3)1.4 源程序代码及运行结果 (3)2.黄金分割法 (4)2.2黄金分割法流程图 (4)2.3 题目 (5)2.4 源程序代码及结果 (5)3.牛顿型法 (5)3.1牛顿型法基本思路 (6)3.2 阻尼牛顿法的流程图 (6)3.3 题目 (6)3.4 源程序代码及结果 (6)4.鲍威尔法 (7)4.1 鲍威尔法基本思路 (7)4.2 鲍威尔法流程图 (7)4.3 题目 (8)4.4 源程序代码及结果 (8)5. 复合形法 (15)5.1 复合行法基本思想 (15)5.3 源程序代码及结果 (15)6. 外点惩罚函数法 (23)6.1解题思路: (23)6.2 流程框图 (23)6.3 题目 (24)6.4 源程序代码及结果 (24)7.机械设计实际问题分析 (30)7.2计算过程如下 (30)7.3 源程序编写 (31)8.报告总结 (33)1.进退法确定初始区间1.1 进退法基本思路:按照一定的规则试算若干个点,比较其函数值的大小,直至找到函数值按“高-低-高”变化的单峰区间。
1.2 进退法程序框图1.3 题目:用进退法求解函数()2710=-+的搜索区间f x x x1.4 源程序代码及运行结果#include <stdio.h>#include <math.h>main(){float h,h0,y1,y2,y3,a1=0,a2,a3,fa2,fa3;scanf("h0=%f,y1=%f",&h0,&y1);h=h0;a2=h;y2=a2*a2-7*a2+10;if (y2>y1){h=-h;a3=a1;y3=y1;loop:a1=a2;y1=y2;a2=a3;y2=y3;}a3=a2+2*h;y3=a3*a3-7*a3+10;if (y3<y2){goto loop;}elseprintf("a1=%f,a2=%f,a3=%f,y1=%f,y2=%f,y3=%f\n",a1,a2,a3,y1,y2,y3);} 搜索区间为0 62.黄金分割法2.1黄金分割法基本思路:通过不断的缩短单峰区间的长度来搜索极小点的一种有效方法。
优化理论与最优控制作业——复合形法小组成员于童 1122227010杜娟 1122227005健华 1122227150王楠 1122227034海珍 1122227039复合形法流程图一.复合形法的基本原理复合形法的基本思路是在n维空间的可行域中选取K个设计点(通常取n+1<k<2n)作为初始复合形(多面体)的顶点。
然后比较复合形各顶点目标函数的大小,其中目标函数值最大的点作为坏点,以坏点之外其余各点的中心为映射中心,寻找坏点的映射点,一般说来此映射点的目标函数值总是小于坏点的,也就是说映射点优于坏点。
这时,以映射点替换坏点与原复合形除坏点之外其余各点构成K个顶点的新的复合形。
如此反复迭代计算,在可行域中不断以目标函数值低的新点代替目标函数值最大的坏点从而构成新复合形,使复合形不断向最优点移动和收缩,直至收缩到复合形的各顶点与其形心非常接近、满足迭代精度要求时为止。
最后输出复合形各顶点中的目标函数值最小的顶点作为近似最优点。
补充:关于复合形法定点数目的选取数目多少的选取,要视具体情况而定,一般说来,为了防止迭代过程中产生降维,顶点数目取多一些较好。
因为只要在k个顶点中有n+1个顶点所构成的n个矢量线性无关,搜索就不会在降维的空间里进行。
所以k值大些,降维的可能性就小些。
但是从另一方面看,顶点数目多,显然会降低计算速度。
为此,对于优化问题维数n<6时通常取k=2n;对于n>5的优化问题,一般应适当减少顶点数目,而取k=(1.25——1.5)n(取整)。
当然,顶点的最少数目不得低于n+1. 二.复合形法的优缺点复合形法不需要计算目标函数的导数,也不进行一维搜索,因此对目标函数和约束函数都没有特殊的要求,适用围较广。
复合形法的收敛速度较慢,特别当目标函数的维数较高和约束条件的数目增多时,这一缺点尤为突出。
另外,复合形法不能用于求解具有等式约束的优化问题。
三.问题求解下面分别用复合形法和matlab工具箱分别进行求解并比较计算结果22221112min f ()100()(1)2.048 2.048. 2.048 2.048X x x x x subject to x =-+--≤≤⎧⎨-≤≤⎩1-1函数的三维立体图1-2.复合形法求解寻优趋势图1-3.求解结果对照表方法 复合形法 Matlab 工具箱x1 1.0004 1 x2 1.0002 1 f 1.8048e-07-200-150-100-505022121212min f ()10cos(2)10cos(2)205.12 5.12. 5.12 5.12X x x x x x subject to x ππ=+--+-≤≤⎧⎨-≤≤⎩2-1函数的三维立体图2-2.复合形法求解寻优趋势图2-3.求解结果对照表方法 复合形法 Matlab 工具箱 x1 0.9950 -0.1431* e-05 x2 0 -0.1431* e-05 f0.99508.1197e-10-40-35-30-25-20-15-10-501212max f ()0.5(10.001())44.44X x x x subject to x =-++-≤≤⎧⎨-≤≤⎩2-1函数的三维立体图3-2.复合形法求解寻优趋势图3-3.求解结果对照表方法 复合形法 Matlab 工具箱x1 -2.9561 1.5345 x2 1.0558 1.5345 f0.99031.98600.40.50.60.70.80.91四.结果分析对于求解此类问题,做出目标函数的大致图形(当然只限于三维以)有利于我们判断函数的极值点位置以及估计函数值,同时也可以用来检验计算结果的正确性。
1 前言 (2)1.1复合形法减速器优化设计的意义 (2)1.1.1 机械优化设计与减速器设计现状 (2)1.1.2优化设计的步骤 (3)1.1.3减速器优化设计的分析 (5)1.1.4减速器的研究意义与发展前景 (6)1.2国内外发展状况 (7)1.2.1、国内减速器技术发展简况 (7)1.2.2、国内减速器技术发展简况 (8)1.3论文的主要内容 (9)2 齿轮啮合参数优化设计的数学模型的建立 (9)2.1设计变量的确定 (9)2.2目标函数的确定 (10)2.3约束条件的建立 (11)3优化设计方法-复合形法调优 (12)3.1复合形法介绍 (12)3.2复合形法计算步骤 (13)3.3单级圆柱齿轮减速器复合形法FORTRAN优化目标函数和约束函数子程序 (14)3.4优化结果 (16)4 减速器的常规设计 (16)4.1减速器的结构与性能介绍 (16)4.2.带传动零件的设计计算 (17)4.3齿轮的设计计算及结构说明 (18)4.4.联轴器的选择 (21)4.5.轴的设计及校核 (21)4.5.1.从动轴结构设计 (21)4.5.2.主动轴的设计 (22)4.5.3.危险截面的强度校核 (23)4.6.键的选择及校核 (25)4.7.轴承的选择及校核 (25)4.8.减速器润滑方式、密封形式 (25)4.8.1.密封 (26)4.8.2.润滑 (26)5优化结果分析 (26)6减速器3D简略设计过程(UG) (26)6.1.减速器机盖设计 (26)6.2减速器机座设计 (28)6.3轴的设计 (28)6.3.1传动轴的设计 (28)6.3.2齿轮轴的设计 (29)6.4齿轮的设计 (30)6.5轴承的设计(以大轴承为例) (32)6.5减速器的装配(其它零部件说明省略) (33)7 总结 (34)8 参考文献 (35)9 致谢 ......................................................................... 错误!未定义书签。
课程设计(实验)材料(3)机械优化设计课程设计(实验)报告专业班级:设计题目:复合形程序设计学生姓名:学生学号:任课教师:2013年月日一、设计要求:根据已知条件,用复合形法完成一次迭代,只用反射变换复合形即可。
已知条件:1、目标函数:f(x)=25/(x1*x2*x2*x2)2、约束条件:g(x) 30/(x1*x2*x2*x2)-50<=0G(x) 0.0004*x1*x2-0.001<=0X1>=2 x1<=4 x2<=1 x2>=0.53、初始复合形顶点:X1=[2.2,0.55] X2=[2.4,0.6] X3=[2.6,0.65] X4=[2.8,0,7]二、方法原理:复合形法的基本思路是在n维空间的可行域中选取K个设计点(通常取n+1<=K<=2*n)作为初始复合形的顶点。
然后比较复合形各顶点目标函数的大小,其中目标函数值最大的点作为坏点,以坏点之外其余各点的中心为映射中心,寻找坏点的映射点,一般说来此映射点的目标函数值总是小于坏点的,也就是说映射点优于坏点。
这时,以映射点替换坏点与原复合形除坏点之外其余各点构成K个顶点的新的复合形。
如此反复迭代计算,在可行域中不断以目标函数值低的新点代替目标函数值最大的坏点从而构成新复合形,使复合形不断向最优点移动和收缩,直至收缩到复合形的各顶点与其形心非常接近、满足迭代精度要求时为止。
最后输出复合形各顶点中的目标函数值最小的顶点作为近似最优点。
三、程序清单:# include <stdio.h># include <math.h># define p 1.3# define k 4float fr,fh;float xr[2][1],xc[2][1];int xb_h,xb_xh;float f(float x[2][1]);float x1[2][1] = {{2.2},{0.55}};float x2[2][1] = {{2.4},{0.63}};float x3[2][1] = {{2.6},{0.65}};float x4[2][1] = {{2.8},{0.7 }};float Max_value,Min_value,Max_h_value; float shuzu[4];void hanshu_Maxvalue(void);void hanshu_Max_h_value(void);void zhshuzu(void);void hanshu_Minvalue(void);void chu_h(void);int ke_xr(void);int main(void){ int kexing_flag = 0;zhshuzu();hanshu_Minvalue();hanshu_Maxvalue();hanshu_Max_h_value();chu_h();while(ke_xr()){kexing_flag = 1;switch(xb_xh){case 1: fr = f(xr);fh = f(x1);if(fr < fh){ x1[0][0] = xr[0][0];x1[1][0] = xr[1][0]; }break;case 2: fr = f(xr);fh = f(x2);if(fr < fh){ x2[0][0] = xr[0][0];x2[1][0] = xr[1][0]; }break;case 3: fr = f(xr);fh = f(x3);if(fr < fh){ x3[0][0] = xr[0][0];x3[1][0] = xr[1][0]; } break;case 4: fr = f(xr);fh = f(x4);if(fr < fh){ x4[0][0] = xr[0][0];x4[1][0] = xr[1][0]; }break;} if(kexing_flag == 1)break;} printf("替换后结果为");printf("x1=");printf("[%.1f,%.2f]\n",x1[0][0],x1[1][0]);printf("输出\n");printf("x2=");printf("[%.1f,%.2f]\n",x2[0][0],x2[1][0]);printf("x3=");printf("[%.1f,%.2f]\n",x3[0][0],x3[1][0]);printf("x4=");printf("[%.1f,%.2f]\n",x4[0][0],x4[1][0]);return 0;}float f(float x[2][1]){float hanshuvalue;hanshuvalue = (25 * 1.0) / (x[0][0] * pow(x[1][0],3));return hanshuvalue;}void zhshuzu(void){shuzu[0] = f(x1);shuzu[1] = f(x2);shuzu[2] = f(x3);shuzu[3] = f(x4);}void hanshu_Minvalue(void){int i;Min_value = shuzu[0] ;for(i = 0; i < 4; i++)if(shuzu[i] <= Min_value )Min_value = shuzu[i] ;}void hanshu_Max_h_value(void){int i;Max_h_value = shuzu[0] ;for(i = 0; i<4; i++){if( xb_h == i)continue;elseif(shuzu[i] >= Max_h_value)Max_h_value = shuzu[i];} }void hanshu_Maxvalue(void){int i;Max_value = shuzu[0] ;for(i = 0; i < 4; i++)if(shuzu[i] >= Max_value ){Max_value = shuzu[i] ;xb_h = i;}}void chu_h(void){switch( xb_h){case 0: xc[0][0] = 1.0*(x2[0][0] + x3[0][0] + x4[0][0]) / (k-1);xc[1][0] = 1.0*(x2[1][0] + x3[1][0] + x4[1][0]) / (k-1);xr[0][0] = xc[0][0] + p*(xc[0][0] - x1[0][0]);xr[1][0] = xc[1][0] + p*(xc[1][0] - x1[1][0]); xb_xh = 1;break;case 1: xc[0][0] = 1.0*(x1[0][0] + x3[0][0] + x4[0][0]) / (k-1);xc[1][0] = 1.0*(x1[1][0] + x3[1][0] + x4[1][0]) / (k-1);xr[0][0] = xc[0][0] + p*(xc[0][0] - x2[0][0]);xr[1][0] = xc[1][0] + p*(xc[1][0] - x2[1][0]); xb_xh = 2;break;case 2: xc[0][0] = 1.0*(x1[0][0] + x2[0][0] + x4[0][0]) / (k-1);xc[1][0] = 1.0*(x1[1][0] + x2[1][0] + x4[1][0]) /(k-1);xr[0][0] = xc[0][0] + p*(xc[0][0] - x3[0][0]);xr[1][0] = xc[1][0] + p*(xc[1][0] - x3[1][0]); xb_xh = 3;break;case 3: xc[0][0] = 1.0*(x1[0][0] + x2[0][0] + x3[0][0]) / (k-1);xc[1][0] = 1.0*(x1[1][0] + x2[1][0] + x3[1][0]) / (k-1);xr[0][0] = xc[0][0] + p*(xc[0][0] - x3[0][0]);xr[1][0] = xc[1][0] + p*(xc[1][0] - x3[1][0]); xb_xh = 4;break;}}int ke_xr(void){if((30*1.0 / (xr[0][0]*pow(xr[1][0],3)) - 50) <= 0){ if((0.0004*xr[0][0]*xr[1][0] -0.001) <= 0)if(2 <= xr[0][0] && xr[0][0] <= 4 )if(0.5 <= xr[1][0] && xr[1][0] <= 1)return 1;} else return 0;}四、实验结果(要求附上程序运行结果截图)五、手算过程计算初始复合形各顶点的值f(X1)=68.3 f (X2)=48.2f (X3)=35.0 f (X4)=26.0坏点X(H)=X1 好点X(L)=X4去掉坏点后各点的几何中心X(C) X(C)=[2.6,0.65] 取映射α=1.3映射X(R)=X(C)+α(X(C)-X(H))=[2.82,0.78] 将映射点代入约束条件验证0.0004*2.82*0.78-0.001=-0.0001202<0 满足约束条件X(R)=[2.82,0.78] 是新的复合形顶点最优点为X(R)=[3.12,0.78]。
一、实验目的本次实验旨在加深对机械优化设计方法的基本理论和算法步骤的理解,培养学生独立编制、调试计算机程序的能力,并掌握常用优化方法程序的使用方法。
通过实验,学生能够灵活运用优化设计方法解决工程实际问题。
二、实验内容本次实验主要涉及以下内容:1. 优化方法的基本原理2. 编程实现优化方法3. 优化方法的实际应用三、实验步骤1. 黄金分割法(1)基本原理黄金分割法是一种在给定初始区间内搜索极小点的一维搜索方法。
其基本原理是:在区间内取两个点,根据函数值的比较,将区间分为三段,保留包含极小值的段,再进行相同的操作,逐步缩小搜索区间。
(2)编程实现根据黄金分割法的基本原理,编写相应的C语言程序,实现一维搜索。
```c#include <stdio.h>#include <math.h>double f(double x) {// 定义目标函数return x x - 4 x + 4;}double golden_section_search(double a, double b, double tol) {double r = 0.618;double a1 = a + r (b - a); double a2 = b - r (b - a); double fa1 = f(a1);double fa2 = f(a2);while (fabs(b - a) > tol) { if (fa1 > fa2) {a = a1;a1 = a2;a2 = b - r (b - a); fa1 = fa2;fa2 = f(a2);} else {b = a2;a2 = a1;a1 = a + r (b - a); fa2 = fa1;fa1 = f(a1);}}return (a + b) / 2;}int main() {double x_min = golden_section_search(a, b, tol);printf("Optimal solution: x = %f\n", x_min);return 0;}```(3)结果分析通过运行程序,可以得到最优解 x = 2.000000,目标函数值为 f(x) = 0。
机床主轴机构优化设计机床主轴是机床中重要的零件之一,一般多为支撑空心阶梯轴。
为了便于使用材料力学进行结构分析,常常将阶梯轴简化成以当量直径表示的等截面轴。
如图0.1所示是一个已经简化处理的专用机床双主轴的力学模型。
从机床主轴制造成本较低和加工精度较高的要求出发,需要考虑主轴的自重和外身段挠度这样两个重要因素。
对于专用机床来说,并不追求过高的加工精度。
因此选取零件自身重量轻为设计目标,将主轴的刚度作为约束条件。
一、设计变量和目标函数当主轴的材料选定之后,与主轴重量设计方案有关设计变量主轴的外径D、孔径d、两支承跨度l、和外伸段长度a,如图0.1所示。
由于机床主轴的孔径主要取决于待加工棒料的直径,不能作为设计变量处理。
因此,设计变量为机床主轴重量最轻优化设计目标函数为二、约束条件1.刚度性条件机床的加工质量在很大程度上取决于主轴的刚度,主轴刚度是一个很重要的性能指标。
因此,要求主轴悬臂端挠度不超过给定的变形量y 0 。
根据材料力学可知,主轴悬臂端挠度为)()()(44231232d x E 3x x Fx 64EJ 3a l Fa y -+=+=π式中,)(44d -D 64J π=是空心主轴的惯性矩;E=2.1x105MPa 是主轴的弹性模量;F 是作用主轴外伸端的力。
整理得到主轴刚度的约束条件为0d x E 3x x Fx 64X g 442312301≥-+-=)()()(πy2.设计边界条件三个设计变量的边界约束条件为max min l l l ≤≤max min D D D ≤≤maxmin a a a ≤≤3.具体算例已知某机床主轴悬臂端受到的切削力F=15000N ,主轴内径d=30mm ,悬臂端许用挠度y 0=0.05mm 。
要求主轴两支承跨度mm lmm 650300≤≤,外径mm D mm 14060≤≤,悬臂长度mm a mm 15090≤≤。
建立优化的数学模型)30)((7854.0)(22231++=x x x X fTT a D l x x x X ],,[],,[321==0)30()(7009.91)(..44231231≥-+⨯-=x x x x X g t s01300/)(12≥-=x X g0650/1)(13≥-=x X g0160/)(24≥-=x X g0140/1)(25≥-=x X g0190/)(36≥-=x X g0150/1)(37≥-=x X g4.基于matlab 程序的复合形法实现优化(1)算法原理复合形法来源于无约束优化问题的单纯形法,通过构造复合形来求得最优解,新的复合形通过替换旧的复合形中的坏点(目标函数最大或次大的点)得到,替换方式仍是单纯性法中的反应、压缩、扩展这几个基本方法。