优化设计实验报告(...)(1).doc
- 文档编号:2352737
- 上传时间:2022-10-29
- 格式:DOC
- 页数:14
- 大小:137KB
优化设计实验报告(...)(1).doc
《优化设计实验报告(...)(1).doc》由会员分享,可在线阅读,更多相关《优化设计实验报告(...)(1).doc(14页珍藏版)》请在冰豆网上搜索。
机械优化设计
实
验
报
告
姓名:
欧阳龙
学号:
2007500817
班级:
07机设一班
一、黄金分割法
1、数学模型
,
2、黄金分割法简介
黄金分割法适用于单谷函数求极小值问题,且函数可以不连续。
黄金分割法是建立在区间消去法原理基础上的试探方法,即在搜索区间内适当插入两点、,并计算其函数值。
、将区间分成三段。
应用函数的单谷性质,通过函数值大小的比较,删去其中一段,使搜索区间得以缩短。
然后再在保留下来的区间上作同样的处置,如此迭代下去,使搜索区间无限缩小,从而得到极小点的数值近似解。
黄金分割法能使相邻两次都具有相同的缩短率0.618,故黄金分割法又称作0.618法。
3、黄金分割法程序清单
#include
#include
/*目标函数*/
floatff(floatx)
{
floaty;
y=x*x+2*x;
return(y);
}
main()
{
floata,b,ab,Epsilon;
floaty1,y2,Alpha1,Alpha2;
floatLambda=0.618;
printf("pleaseinputthearearandEpsilon\n");
scanf("%f,%f,%f",&a,&b,&Epsilon);
Alpha1=b-Lambda*(b-a),Alpha2=a+Lambda*(b-a);
printf("%f,%f\n",Alpha1,Alpha2);
y1=ff(Alpha1);y2=ff(Alpha2);
printf("y1=%f,y2=%f\n",y1,y2);
do
{if(y1>=y2)
{a=Alpha1;
Alpha1=Alpha2;
y1=y2;
Alpha2=a+Lambda*(b-a);
y2=Alpha2*Alpha2+2*Alpha2;
}
else{
b=Alpha2;
Alpha2=Alpha1;
y2=y1;
Alpha1=b-Lambda*(b-a);
y1=Alpha1*Alpha1+2*Alpha1;
}
printf("a=%f,b=%f,y1=%f,y2=%f\n",a,b,y1,y2);
}while(!
(abs((b-a)/b) ab=0.5*(a+b); y1=ff(ab); printf("theresultis: %f",y1); getch(); } 4、运行结果: 一、变尺度法 1、数学模型 2、变尺度法简介 基本思想: (1)用简单矩阵代替二阶导数矩阵的逆矩阵 (2)用坐标变换简化目标函数 具体如下: 当用牛顿法寻求极小点时,其牛顿迭代公式为 其中 在迭代中建立变尺度矩阵来替换,即构造一个矩阵序列来逼近海赛逆矩阵序列。 每迭代一次,尺度就改变一次,这正是“变尺度”的含义。 这样,上式变为 其中是从出发,沿方向作一维搜索而得到 的最佳步长。 当(单位矩阵)时,它就变成最速下降法。 这就是变尺度法的基本思想。 变尺度法程序清单: /*计算f(x1,x2)=x1^2+8*x2^2-4*x1-2*x1*x2的无约束极值,初始点x0=[1,1]。 tt----一维搜索初始步长 ff----差分法求梯度时的步长 ac----终止迭代收敛精度 ad----一维搜索收敛精度 n-----设计变量的维数 xk[n]--迭代初始点 */ #include #include #include #include #definett0.01 #defineff1.0e-6 #defineac1.0e-6 #definead1.0e-6 #definen8 doubleia; doublefny(double*x) { doublex1=x[0],x2=x[1]; doublef; f=x1*x1+8*x2*x2-4*x1-2*x1*x2; returnf; } double*iterate(double*x,doublea,double*s) { double*x1; inti; x1=(double*)malloc(n*sizeof(double)); for(i=0;i x1[i]=x[i]+a*s[i]; returnx1; } doublefunc(double*x,doublea,double*s) { double*x1; doublef; x1=iterate(x,a,s); f=fny(x1); returnf; } voidfinding(doublea[3],doublef[3],double*xk,double*s) { doublet=tt; inti; doublea1,f1; a[0]=0;f[0]=func(xk,a[0],s); for(i=0;;i++) { a[1]=a[0]+t; f[1]=func(xk,a[1],s); if(f[1] if(fabs(f[1]-f[0])>=ad) { t=-t; a[0]=a[1];f[0]=f[1]; } else { if(ia==1)return; t=t/2;ia=1; } } for(i=0;;i++) { a[2]=a[1]+t; f[2]=func(xk,a[2],s); if(f[2]>f[1])break; t=2*t; a[0]=a[1];f[0]=f[1]; a[1]=a[2];f[1]=f[2]; } if(a[0]>a[2]) { a1=a[0]; f1=f[0]; a[0]=a[2]; f[0]=f[2]; a[2]=a1; f[2]=f1; } return; } doublelagrange(double*xk,double*ft,double*s) { inti; doublea[3],f[3]; doubleb,c,d,aa; finding(a,f,xk,s); for(i=0;;i++) { if(ia==1){aa=a[1];*ft=f[1];break;} d=(pow(a[0],2)-pow(a[2],2))*(a[0]-a[1])-(pow(a[0],2)-pow(a[1],2))*(a[0]-a[2]); if(fabs(d)==0)break; c=((f[0]-f[2])*(a[0]-a[1])-(f[0]-f[1])*(a[0]-a[2]))/d; if(fabs(c)==0)break; b=((f[0]-f[1])-c*(pow(a[0],2)-pow(a[1],2)))/(a[0]-a[1]); aa=-b/(2*c); *ft=func(xk,aa,s); if(fabs(aa-a[1])<=ad){if(*ft>f[1])aa=a[1];break;} if(aa>a[1]) { if(*ft>f[1]){a[2]=aa;f[2]=*ft;} elseif(*ft elseif(*ft==f[1]) { a[2]=aa;a[0]=a[1]; f[2]=*ft;f[0]=f[1]; a[1]=(a[0]+a[2])/2; f[1]=func(xk,a[1],s); } } else { if(*ft>f[1]){a[0]=aa;f[0]=*ft;} elseif(*ft elseif(*ft==f[1]) {a[0]=aa;a[2]=a[1]; f[0]=*ft;f[2]=f[1]; a[1]=(a[0]+a[2])/2; f[1]=func(xk,a[1],s); } } } if(*ft>f[1]){*ft=f[1];aa=a[1];} returnaa; } double*gradient(double*xk) { double*g,f1,f2,q; inti; g=(double*)malloc(n*sizeof(double)); f1=fny(xk); for(i=0;i {q=ff; xk[i]=xk[i]+q;f2=fny(xk); g[i]=(f2-f1)/q;xk[i]=xk[i]-q; } returng; } double*bfgs(double*xk) { doubleu[n],v[n],h[n][n],dx[n],dg[n],s[n]; doubleaa,ib; double*ft,*xk1,*g1,*g2,*xx,*x0=xk; doublefi; inti,j,k; ft=(double*)malloc(sizeof(double)); xk1=(double*)malloc(n*sizeof(double)); for(i=0;i { s[i]=0; for(j=0;j { h[i][j]=0; if(j==i)h[i][j]=1; } } g1=gradient(xk); fi=fny(xk); x0=xk; for(k=0;k { ib=0; if(ia==1){xx=xk;break;} ib=0; for(i=0;i for(i=0;i for(j=0;j s[i]+=-h[i][j]*g1[j]; aa=lagrange(xk,ft,s); xk1=iterate(xk,aa,s); g2=gradient(xk1); for(i=0;i if((fabs(g2[i])>=ac)&&(fabs(g2[i]-g1[i])>=ac)) {ib=ib+1;} if(ib==0){xx=xk1;break;} fi=*ft; if(k==n-1) {int
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 优化 设计 实验 报告