机械优化设计实验报告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 鲍威尔法流程图84、3 题目94、4 源程序代码及结果95、复合形法165、1 复合行法基本思想165、3 源程序代码及结果166、外点惩罚函数法246、1解题思路:246、2 流程框图246、3 题目246、4 源程序代码及结果247、机械设计实际问题分析307、2计算过程如下307、3 源程序编写328、报告总结331、进退法确定初始区间1、1 进退法基本思路:按照一定的规则试算若干个点,比较其函数值的大小,直至找到函数值按“高-低-高”变化的单峰区间。
1、2 进退法程序框图1、3 题目:用进退法求解函数的搜索区间1、4 源程序代码及运行结果#include <stdio、h>#include <math、h>main(){floath,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){gotoloop;}elseprintf("a1=%f,a2=%f,a3=%f,y1=%f,y2=%f,y3=%f\n",a1,a2,a3,y1,y2,y3);}搜索区间为062、黄金分割法2、1黄金分割法基本思路:通过不断的缩短单峰区间的长度来搜索极小点的一种有效方法。
按()缩小比较大小确定取舍区间。
2、2黄金分割法流程图2、3 题目:对函数,给定搜索区间时,试用黄金分割法求极小点2、4 源程序代码及结果:f=inline('x^2-7*x+9')a=0;b=8;eps=0、001;a1=b-0、618*(b-a);y1=f(a1);a2=a+0、618*(b-a);y2=f(a2);while(abs(b-a)>eps)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全文结束》》x=0、5*(a+b)f = Inline function: f(x)= x^2-7*x+9xxx =3、49973、牛顿型法3、1牛顿型法基本思路:在邻域内用一个二次函数来近似代替原目标函数,并将的极小点作为对目标函数求优的下一个迭代点。
经多次迭代,使之逼近目标函数的极小点。
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); 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-0194、鲍威尔法4、1 鲍威尔法基本思路:在不用导数的前提下,在迭代中逐次构造G的共轭方向。
4、2 鲍威尔法流程图:4、3 题目:求函数f(x)= x[0]*x[0]+x[1]*x[1]-x[0]*x[1]-10*x[0]-4*x[1]+60的最优点,收敛精度ε=0、0014、4 源程序代码及结果:#include "stdio、h"#include "stdlib、h"#include "math、h"double objf(double x[]){doubleff;ff=x[0]*x[0]+x[1]*x[1]-x[0]*x[1]-10*x[0]-4*x[1]+60;return(ff);}void jtf(double x0[],doubleh0,double s[],int n,double a[],double b[]){int i;double *x[3],h,f1,f2,f3;for(i=0;i<3;i++)x[i]=(double*)malloc(n*sizeof(double));h=h0;for(i=0;i<n;i++)*(x[0]+i) =x0[i];f1=objf(x[0]);for(i=0;i<n;i++)*(x[1]+i)=*(x[0]+i)+ h*s[i];f2=objf(x[1]);if(f2>=f1){h=-h0;for(i=0;i<n;i++)*(x[2]+i)=*(x[0]+i);f3=f1;for(i=0;i<n; i++){*(x[0]+i)=*(x[1]+i);*(x[1]+i)=*(x[2]+i);}f1=f2;f2=f3 ;}for(;;){h=2*h;for(i=0;i<n;i++)*(x[2]+i)=*(x[1]+i)+h*s[i ];f3=objf(x[2]);if(f2<f3)break;else{ for(i=0;i<n;i++){*(x[0]+i)=*(x[1]+i);*(x[1]+i)=*(x[2]+i);}f1=f2;f2=f3;}}if(h<0)for(i=0;i<n;i++){a[i]=*(x[2]+i);b[i]=*(x[0]+i);}elsefor(i=0;i<n;i++){a[i]=*( x[0]+i);b[i]=*(x[2]+i);}for(i=0;i<3;i++)free(x[i]);}doubl e gold(double a[],double b[],double eps,int n,double全文结束》》[]){int i;doublef1,f2,*x[2],ff,q,w;for(i=0;i<2;i++)x[i]=(double*)malloc(n*sizeof(double));for(i=0;i<n;i++){*(x[0]+i)=a[i ]+0、618*(b[i]-a[i]);*(x[1]+i)=a[i]+0、382*(b[i]-a[i]);}f1=objf(x[0]);f2=objf(x[1]);do{if(f1>f2){for(i=0;i <n;i++){b[i]=*(x[0]+i);*(x[0]+i)=*(x[1]+i);}f1=f2;for(i=0 ;i<n;i++)*(x[1]+i)=a[i]+0、382*(b[i]-a[i]);f2=objf(x[1]);}else{ for(i=0;i<n;i++){a[i]=*(x[1]+i );*(x[1]+i)=*(x[0]+i);}f2=f1;for(i=0;i<n;i++)*(x[0]+i)=a[ i]+0、618*(b[i]-a[i]);f1=objf(x[0]);}q=0;for(i=0;i<n;i++)q=q+(b[i]-a[i])*(b[i]-a[i]);w=sqrt(q);}while(w>eps);for(i=0;i<n;i++)xx[i]=0、5*(a[i]+b[i]);ff=objf(xx);for(i=0;i<2;i++)free(x[i]);retu rn(ff);}double oneoptim(double x0[],double s[],doubleh0,double epsg,int n,double 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);}doublepowell(double p[],double h0,double eps,double epsg,int n,double x[]){int i,j,m;double *xx[4],*ss,*s;doublef,f0,f1,f2,f3,fx,dlt,df,sdx,q,d;ss=(double*)malloc(n*(n+1)*sizeof(double));s=(double*)malloc(n*sizeof(double));for(i=0;i<n;i++){for(j=0;j<=n; j++)*(ss+i*(n+1)+j)=0;*(ss+i*(n+1)+i)=1;}for(i=0;i<4;i++) xx[i]=(double*)malloc(n*sizeof(double));for(i=0;i<n;i++)*(xx[0]+i)=p[i ];for(;;){for(i=0;i<n;i++){*(xx[1]+i)=*(xx[0]+i);x[i]=*(x x[1]+i);}f0=f1=objf(x);dlt=-1;for(j=0;j<n;j++){for(i=0;i<n;i++){*(xx[0]+i)=x[i];*(s+i )=*(ss+i*(n+1)+j);}f=oneoptim(xx[0],s,h0,epsg,n,x);df=f0-f;if(df>dlt){dlt=df;m=j;}}sdx=0;for(i=0;i<n;i++)sdx=sdx+f abs(x[i]-(*(xx[1]+i)));if(sdx<eps){free(ss);free(s);for(i=0;i<4;i+ +)free(xx[i]);return(f);}for(i=0;i<n;i++)*(xx[2]+i)=x[i]; f2=f;for(i=0;i<n;i++){*(xx[3]+i)=2*(*(xx[2]+i)-(*(xx[1]+i)));x[i]=*(xx[3]+i);}fx=objf(x);f3=fx;q=(f1-2*f2+f3)*(f1-f2-dlt)*(f1-f2-dlt);d=0、5*dlt*(f1-f3)*(f1-f3);if((f3<f1)||(q<d)){if(f2<=f3)for(i=0;i<n;i++)*(xx[0]+ i)=*(xx[2]+i);elsefor(i=0;i<n;i++)*(xx[0]+i)=*(xx[3]+i);} else{for(i=0;i<n;i++){*(ss+(i+1)*(n+1))=x[i]-(*(xx[1]+i));*(s+i)=*(ss+(i+1)*(n+1));}f=oneoptim(xx[0],s ,h0,epsg,n,x);for(i=0;i<n;i++)*(xx[0]+i)=x[i];for(j=m+1;j <=n;j++)for(i=0;i<n;i++)*(ss+i*(n+1)+j-1)=*(ss+i*(n+1)+j);}}}void main(){double p[]={1,2};doubleff,x[2];ff=powell(p,0、3,0、001,0、0001,2,x);printf("x[0]=%f,x[1]=%f,ff=%f\n",x[0],x[1],ff); getchar();}5、复合形法5、1 复合行法基本思想:在可行域中选取K个设计点(n+1≤K≤2n)作为初始复合形的顶点。