《机械优化设计实验报告》由会员分享,可在线阅读,更多相关《机械优化设计实验报告(33页珍藏版)》请在金锄头文库上搜索。
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. 外点惩罚函数法246.1解题思路:246.2 流程框图246.3 题目246.4 源程序代
2、码及结果247.机械设计实际问题分析307.2计算过程如下307.3 源程序编写328.报告总结331.进退法确定初始区间1.1 进退法基本思路:按照一定的规则试算若干个点,比较其函数值的大小,直至找到函数值按“高-低-高”变化的单峰区间。1.2 进退法程序框图1.3 题目:用进退法求解函数的搜索区间1.4 源程序代码及运行结果#include #include 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 (y2y1)h=-h;a3=a
3、1;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); else b=a2;a2=a1;y2=y1; a1=b-0.618*(b-a); y1=f(a1); endend xxx=0.5*(a+b)f = Inline function: f(x) = x2-7*x+9xxx = 3.49973.牛顿型法 3.1牛顿型法基本思路:在邻域内用一个二次函数 来近似代替原目标函数,并将 的极小
4、点作为对目标函数求优的下一个迭代点。经多次迭代,使之逼近目标函数的极小点。3.2 阻尼牛顿法的流程图: 3.3 题目:用牛顿阻尼法求函数的极小点3.4 源程序代码及结果: k=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*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);
5、 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.0000 1.00001.3270e-0194.鲍威尔法 4.1 鲍威尔法基本思路:在不用导数的前提下,在迭代中逐次构造G的共轭方向。 4.2 鲍威尔法流程图: 43 题目:求函数f(x)= x0*x0+x1*x1-x0*x1-10*x0-4*x1+60的最优点,收
6、敛精度=0.0014.4 源程序代码及结果: #include stdio.h#include stdlib.h#include math.hdouble 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,double s,int n,double a,double b)int i;double *x3,h,f1,f2,f3;for(i=0;i3;i+)xi=(double *)malloc(n*sizeof(double);h=h0;for(i=
7、0;in;i+)*(x0+i)=x0i;f1=objf(x0);for(i=0;i=f1)h=-h0;for(i=0;in;i+)*(x2+i)=*(x0+i);f3=f1;for(i=0;in;i+)*(x0+i)=*(x1+i);*(x1+i)=*(x2+i);f1=f2;f2=f3;for(;)h=2*h;for(i=0;in;i+)*(x2+i)=*(x1+i)+h*si;f3=objf(x2);if(f2f3) break;else for(i=0;in;i+)*(x0+i)=*(x1+i);*(x1+i)=*(x2+i);f1=f2;f2=f3;if(h0)for(i=0;in;i
8、+)ai=*(x2+i);bi=*(x0+i);elsefor(i=0;in;i+)ai=*(x0+i);bi=*(x2+i);for(i=0;i3;i+)free(xi);double gold(double a,double b,double eps,int n,double xx)int i;double f1,f2,*x2,ff,q,w;for(i=0;i2;i+)xi=(double *)malloc(n*sizeof(double);for(i=0;if2)for(i=0;in;i+)bi=*(x0+i);*(x0+i)=*(x1+i);f1=f2;for(i=0;in;i+)*(
9、x1+i)=ai+0.382*(bi-ai);f2=objf(x1);else for(i=0;in;i+)ai=*(x1+i);*(x1+i)=*(x0+i);f2=f1;for(i=0;in;i+)*(x0+i)=ai+0.618*(bi-ai);f1=objf(x0);q=0;for(i=0;ieps);for(i=0;in;i+)xxi=0.5*(ai+bi);ff=objf(xx);for(i=0;i2;i+)free(xi);return(ff);double oneoptim(double x0,double s,double h0,double epsg,int n,doubl
10、e x)double *a,*b,ff;a=(double *)malloc(n*sizeof(double);b=(double *)malloc(n*sizeof(double);jtf(x0,h0,s,n,a,b);ff=gold(a,b,epsg,n,x);free(a);free(b);return (ff);double powell(double p,double h0,double eps,double epsg,int n,double x)int i,j,m;double *xx4,*ss,*s;double f,f0,f1,f2,f3,fx,dlt,df,sdx,q,d;
11、ss=(double *)malloc(n*(n+1)*sizeof(double);s=(double *)malloc(n*sizeof(double);for(i=0;in;i+)for(j=0;j=n;j+)*(ss+i*(n+1)+j)=0;*(ss+i*(n+1)+i)=1;for(i=0;i4;i+)xxi=(double *)malloc(n*sizeof(double);for(i=0;in;i+)*(xx0+i)=pi;for(;)for(i=0;in;i+)*(xx1+i)=*(xx0+i);xi=*(xx1+i);f0=f1=objf(x);dlt=-1;for(j=0;jn;j+)f