1、机械优化设计实验报告目录1.进退法确定初始区间 .31.1 进退法基本思路 .31.2 进退法程序框图 .31.3 题目 .41.4 源程序代码及运行结果 .42.黄金分割法 .52.2 黄金分割法流程图 52.3 题目 .52.4 源程序代码及结果 .53.牛顿型法 .63.1 牛顿型法基本思路 63.2 阻尼牛顿法的流程图 .63.3 题目 .73.4 源程序代码及结果 .74.鲍威尔法 .84.1 鲍威尔法基本思路 .84.2 鲍威尔法流程图 .843 题目 94.4 源程序代码及结果 .95. 复合形法 .165.1 复合行法基本思想 .165.3 源程序代码及结果 .166. 外点惩
2、罚函数法 .246.1 解题思路: 246.2 流程框图 .246.3 题目 .246.4 源程序代码及结果 .247.机械设计实际问题分析 .307.2 计算过程如下 307.3 源程序编写 .328.报告总结 .331.进退法确定初始区间1.1 进退法基本思路:按照一定的规则试算若干个点,比较其函数值的大小,直至找到函数值按“高-低-高”变化的单峰区间。1.2 进退法程序框图1.3 题目:用进退法求解函数 的搜索区间2710fx1.4 源程序代码及运行结果#include #include main()float h,h0,y1,y2,y3,a1=0,a2,a3,fa2,fa3;scanf
3、(“h0=%f,y1=%f“,h=h0;a2=h;y2=a2*a2-7*a2+10;if (y2y1)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 (y3eps)if(y1=y2)a=a1;a1=a2;y1=y2;a2=a+0.618*(b-a);y2=f(a2);elseb=a2;a2=a1;y2=y1;a1=b-0.618*(b-a);y1=f(a1);endendxxx=0.5*(a+b)f =Inline function:f(x) = x2-7*x+9xxx =3.49973.牛
4、顿型法3.1 牛顿型法基本思路:在 邻域内用一个二次函数 来近kxx似代替原目标函数,并将 的极小点作为对目标函数 求优的下一个迭f代点 。经多次迭代,使之逼近目标函数 的极小点。1kx fx3.2 阻尼牛顿法的流程图:3.3 题目:用牛顿阻尼法求函数 的极小点412112,fxx3.4 源程序代码及结果:开 始给 定结 束0,x21()kkkffdx1:min()kkkkfd1kx*1kx否是 1kk=0; ptol=1.0e-5;xk=input(input x0:) itcl=1;1; while norm(itcl)=ptol f1=4*xk(1,1)3-24*xk(1,1)2+50*
5、xk(1,1)-4*xk(2,1)-32;-4*xk(1,1)+8*xk(2,1); G=12*xk(1,1)2-48*xk(1,1)+50,-4;-4,8; dk=-inv(G)*f1; a=-(dk*f1)/(dk*G*dk); xk=xk+a*dk; itcl=a*dk; k=k+1; endf=(xk(1,1)-2)4+(xk(1,1)-2*xk(2,1)2; fprintf(n %d x* f :n,k); disp(xk); disp(f); 结果显示:input x0:1;1用阻尼牛顿法迭代 27 次后得到 极小点 x*及极小值 f 为:2.00001.00001.3270e-0
6、194.鲍威尔法4.1 鲍威尔法基本思路:在不用导数的前提下,在迭代中逐次构造 G 的共轭方向。 4.2 鲍威尔法流程图:43 题目 :求函数 f(x)= x0*x0+x1*x1-x0*x1-10*x0-4*x1+60 的最优点,收敛精度 =0.0014.4 源程序代码及结果:#include “stdio.h“#include “stdlib.h“#include “math.h“double objf(double x)double ff;ff=x0*x0+x1*x1-x0*x1-10*x0-4*x1+60;return(ff);void jtf(double x0,double h0,d
7、ouble s,int n,double a,double b)int i;double *x3,h,f1,f2,f3;for(i=0;i=f1)h=-h0;for(i=0;if2)for(i=0;ieps);for(i=0;idlt)dlt=df;m=j;sdx=0;for(i=0;i #include #include #include #define E0 1e-5 /*复合形法收敛控制精度*/ double *apply(int,int); /*申请矩阵空间 */ double f(double *); /*目标函数*/double *g(double *); /*约束函数 */ bo
8、ol judge(double *); /*可行点的判断*/ int main() int n,k;int i,j,k1;int l; double temporary; double restrain; /*收敛条件*/double reflect; /*反射系数 */srand(unsigned)time(NULL); printf(“请输入目标函数的维数 n:“); /*输入已知数据*/ scanf(“%d“, printf(“请输入复合形的顶点数 k:“);scanf(“%d“, double *x=apply(k,n); /*存放复合形顶点*/ double *y=(double *
9、)calloc(k,sizeof(double); /*存放目标函数值 */ double *p=(double *)calloc(3,sizeof(double); /*存放约束函数值 */ double *a=(double *)calloc(n,sizeof(double); /*存放设计变量的下限*/ double *b=(double *)calloc(n,sizeof(double); /*存放设计变量的上限 */ double *x_c=(double *)calloc(n,sizeof(double); /*存放可行点中心*/ double *x_r=(double *)cal
10、loc(n,sizeof(double); /*存放最坏点的反射点*/printf(“请输入选定的第一个可行点 x1(包含%d 个数):“,n); for(i=0;i0) break;if(i=3) return true;else return false; 6. 外点惩罚函数法6.1 解题思路:外点法是从可行域的外部构造一个点序列去逼近原约束问题的最优解。外点法可以用来求解含不等式和等式约束的优化问题。外点惩罚函数的形式为: 6.2 流程框图:6.3 题目:求函数 f(x)=(x1-5)*(x1-5)+4*(x2-6)*(x2-6)的最优点,约束条件:g1(x)=64-x1*x1-x2*x
11、20;g2(x)=x2-x1-100;g3(x)=x1-100;收敛精度=0.00001;6.4 源程序代码及结果:2211(,)max0,()()lijirfgrhxx#include #include#includedouble lamta10=0, 1.0 ,0 ,0 ,0 ,1 ,0 ,0 ,0 ,1;/鲍威尔方法初始化方向,线性无关double lamta13=0, 0 , 0;/暂存新的搜索方向double x14=0, 0 ,0, 0 ;/x1 到 x3 用于存储各共轭方向的点double x24=0, 0 ,0, 0 ;double x34=0, 0 ,0, 0 ;double
12、 x44=0, 0 ,0, 0 ;/x4 用于中间判断double x54=0, 0 ,0, 0 ;/x5 用存放于更换方向后产生的新点int m=0;/标志double x_4=0, 0, 0, 0;/暂存鲍威尔最优解double x04=0, 2, 2 , 2;/初值 double c=10;/递减系数double e=0.00001;/精度控制double r0=1;/初始惩罚因子double r=1;/函数声明部分void Powell(double r); /鲍威尔方法函数double fxy(double x1,double x2,double x3,double r); /待求函
13、数double ysearch(double x); /一维搜索的目标函数void search(double /区间搜索double yellowcut(double /黄金分割void sort(double *p,int size);/选择法排序void main() /约束优化方法主函数入口coute;changyan:Powell(r);double cmpare4;int flag1=0;for (int i=1;i0)?(64-x1*x1-x2*x2):0;n=(x2-x1-10)0)?(x2-x1-10):0;p=(x1-10)0)?(x1-10):0;return /惩罚函数
14、(x1-5)*(x1-5)+4*(x2-6)*(x2-6)+r*(m*m+n*n+p*p)+r*(x3*x3);void Powell(double r) /鲍威尔方法函数定义double det=0.0001; /迭代精度int k;my1: for (k=1;k=fyy2)if (f3=y1)h=-h,a3=a1,y3=y1;a1=a2,y1=y2,a2=a3,y2=y3;a3=a2+h,y3=ysearch(a3);while(y3*(p+j)k=*(p+i);*(p+i)=*(p+j);*(p+j)=k;7.机械设计实际问题分析7.1题目: 图示为一对称的两杆支架,在支架的顶点承受一个
15、载荷为图示为一对称的两杆支架,在支架的顶点承受一个载荷为2F=300000 ,支架之间的水平距离,支架之间的水平距离 2B=1520mm,若已选定壁厚,若已选定壁厚 T=2.5mm钢管,钢管,密度密度 p=8300kg/m3,屈服点,屈服点 ,材料的弹性模量,材料的弹性模量 。要求在满足强度与稳定性条件下设计最轻的支架尺寸。要求在满足强度与稳定性条件下设计最轻的支架尺寸。7.2 计算过程如下:解:计算压杆的临界柔度为:, 4.5107.2621 SE由于支架为空心杆,失效形式主要为屈服,故计算稳定性用屈服极限公式。根据题意可得方程组: 222rRBV70Mpas70Mpas 122.N/mE21 rRAFSS, Tr4sin1F代入整理得到内点混合惩罚函数法的标准形式为: 21435.2xfx 06.92132211 xgx5.21h构建惩罚函数: kkkkrX rxxrxrx 2212122121, 5.46.986.4 )(,.0c,01 ,的 初 值其 中kkc取 ,T00求 偏 导 数 :和分 别 对, 21rXx05.473.69211 kkrxrx02122kx解得: kkkkkrrxr381726.80.025.)(421令迭代精度为: ,由于函数是 X 的 2 次方程,故不必判别函数值的相7对变化量。 01.,1crkk