机械优化设计实验指导书doc资料.docx
- 文档编号:4199834
- 上传时间:2022-11-28
- 格式:DOCX
- 页数:15
- 大小:18.20KB
机械优化设计实验指导书doc资料.docx
《机械优化设计实验指导书doc资料.docx》由会员分享,可在线阅读,更多相关《机械优化设计实验指导书doc资料.docx(15页珍藏版)》请在冰豆网上搜索。
机械优化设计实验指导书doc资料
实验一一维搜索方法
本实验求函数f(x)=(x-3)2以及f(x)=-(x-3)2的搜索区间[a,b]。
并用黄金分割法和插值法分别求最优解。
进退法:
#include
#include
/*函数f(x)=(x-3)2*/
doublef(doublex)
{
return(x-3)*(x-3);
}
/*求搜索区间[a,b]的函数,x0---初始点;h0---初始步长*/
voidfind_ab(doublex0,doubleh0,double*a,double*b)
{
doubleh,x1,y1,x2,y2,x3,y3;
h=h0;
x1=x0;y1=f(x1);
x2=x1+h;y2=f(x2);
if(y2>=y1)
{
*****
******
}
for(;;)
{
h*=2.0;x3=x2+h;y3=f(x3);
if(y2 ********** } if(h>0){******} else{******} } /* 黄金分割法 a,b---搜索区间[a,b];e---精度 x,y---最优解X*,F* */ voidsearch_gold(doublea,doubleb,doublee,double*x,double*y) { doublex1,x2,y1,y2; x1=******;y1=f(x1); x2=******;y2=f(x2); do{ if(y1 ****** }else{ ****** } }while(b-a>e); ***** } /* 二次插值法 a,b---搜索区间[a,b];e---精度 xpt,ypt---最优解X*,F* */ voidsearch_insert(doublea,doubleb,doublee,double*xpt,double*fpt) { doublex1,x2,f1,f2,x3,f3,xp,fp,xp0,c1,c2; intk=1; x1=a;x3=b;x2=0.5*(a+b); f1=f(x1);f2=f(x2);f3=f(x3);xp0=0; for(;;){ c1=(f3-f1)/(x3-x1); c2=((f2-f1)/(x2-x1)-c1)/(x2-x3); if(c2==0.0){******,break;} xp=0.5*(x1+x3-c1/c2);fp=f(xp); if((xp-x1)*(x3-xp)<=0.0){ ******* break; } if(k! =1)if(fabs(xp0-xp)<=e){ ********* break; } if(xp>x2)if(f2 ****** }else{ ******** }elseif(f2 x1=xp;f1=fp; }else{ ********* } xp0=xp;k++; } } 实验二无约束优化方法---鲍威尔方法 本实验用鲍威尔方法求函数f(x)=(x1-5)2+(x2-6)2的最优解。 #include #include #include constMAXN=10; doublexkk[MAXN],xk[MAXN],sk[MAXN]; intN; doubleF(double*x) { return4*pow(x[0]-5,2.0)+pow(x[1]-6,2.0); } doublef(doublex) { for(inti=0;i returnF(xkk); } /* 无约束坐标轮换法 x0--初始点 e1--一维搜索精度 e2--求解精度 */ doublenc_trans(double*x0,doublee1,doublee2) { inti,j,k=1; doublea,b,ax,ay,d; for(;;){ for(j=0;j for(i=0;i for(j=0;j elsesk[j]=0; find_ab(0,1,&a,&b); search_gold(a,b,e2,&ax,&ay); for(j=0;j } d=0; for(j=0;j d+=(x0[j]-xkk[j])*(x0[j]-xkk[j]); d=sqrt(d); printf("k=%d;",k); for(j=0;j printf(",x[%d]=%lf;",j+1,xkk[j]); printf("d=%lf\n",d); if(d<=e1)break; for(j=0;j k++; } for(j=0;j returnF(xkk); } /* 鲍威尔法 x0--初始点 e1--一维搜索精度 e2--求解精度 */ doublenc_powell(double*x0,doublee1,doublee2) { inti,j,k=1,m; doublea,b,ax,ay,d; doubless[MAXN][MAXN],s1[MAXN], ff[MAXN],x[MAXN],xn[MAXN], xn1[MAXN],f0,f1,f2,f3; for(i=0;i ss[i][j]=1;elsess[i][j]=0; for(;;){ for(j=0;j for(i=0;i for(j=0;j find_ab(0,1,&a,&b); search_gold(a,b,e2,&ax,&ay); for(j=0;j ff[i]=F(xk); } for(j=0;j for(j=0;j sk[j]=xkk[j]-x0[j];s1[j]=sk[j]; } find_ab(0,1,&a,&b); search_gold(a,b,e2,&ax,&ay); for(j=0;j d=0; for(j=0;j d=sqrt(d); printf("k=%d;",k); for(j=0;j printf("x[%d]=%lf;",j+1,x0[j]); printf("d=%lf\n",d); if(d<=e1){ for(j=0;j break; } f0=F(x0);d=f0-ff[0];m=0; for(j=1;j m=j;d=ff[j-1]-ff[j]; } for(j=0;j f1=F(x0);f2=F(xn);f3=F(xn1); if(0.5*(f1-2*f2+f3)>=d){ if(f2 elsefor(j=0;j }else{ for(i=m+1;i ss[i-1][j]=ss[i][j]; for(j=0;j for(j=0;j } k++; } for(j=0;j returnF(xkk); } 实验三无约束优化方法---DFP方法 本实验用DFP方法求函数f(x)=(x1-5)2+(x2-6)2的最优解。 /*DFP法--求梯度*/ doubleDF(double*x,double*df) { df[0]=8*(x[0]-5);df[1]=2*(x[1]-6); return(sqrt(df[0]*df[0]+df[1]*df[1])); } /*DFP法--求构造矩阵Ak+1*/ voidcomputer_A(doubleA[][MAXN],double*cc, double*yy) { doubleB[MAXN][MAXN],C[MAXN][MAXN], D[MAXN][MAXN],E[MAXN][MAXN]; doublea,b,c;inti,j,k; for(i=0;i B[i][j]=cc[i]*cc[j]; for(i=0;i D[i][j]=yy[i]*yy[j]; for(i=0;i E[i][j]=0; for(k=0;k } for(i=0;i C[i][j]=0; for(k=0;k } a=0;for(i=0;i b=0; for(i=0;i c=0; for(j=0;j b+=c*yy[i]; } for(i=0;i A[i][j]+=B[i][j]/a-C[i][j]/b; } /* DFP法 x0--初始点 e1--一维搜索精度 e2--求解精度 */ doublenc_dfp(double*x0,doublee1,doublee2) { inti,j,k;doublea,b,ax,ay,d; doubleA[MAXN][MAXN],gk[MAXN], g0[MAXN],cc[MAXN],yy[MAXN]; d=DF(x0,g0); if(d<=e1)returnF(x0); for(;;){ for(i=0;i A[i][j]=1;elseA[i][j]=0; for(i=0;i for(k=0;k for(j=0;j sk[j]=0; for(i=0;i } find_ab(0,1,&a,&b); search_gold(a,b,e2,&ax,&ay); printf("==%lf==",ax); for(j=0;j d=DF(xk,gk); for(j=0;j printf("x[%d]=%lf;",j+1,xk[j]); printf("d=%lf\n",d); if(d<=e1){ for(i=0;i returnF(x0); } for(i=0;i cc[i]=xk[i]-x0[i];yy[i]=gk[i]-g0[i]; } computer_A(A,cc,yy); for(i=0;i } } } 实验四约束优化方法---约束随机方向法 本实验用随机方向法求目标函数的最优解。 数学模型: F(x)=(x1-8)2+(x2-8)2 g1(x)=x1 g2(x)=x2-1 g3(x)=11-x1-x2 #include #include #include #include #definesqr(x)((x)*(x)) #defineN10 intnt; doublefunt(double*x,double*g,int*b) {inti; g[0]=x[0];g[1]=x[1]-1;g[2]=11-x[0]-x[1]; *b=1; for(i=0;i returnsqr(x[0]-8)+sqr(x[1]-8); } voidfind_sk(intnmax,doublesk[]) {doublesm,c;inti; sm=0; for(i=0;i c=(double)(rand()+1.0)/RAND_MAX; c=2*c-1;sm+=c*c;sk[i]=c; } sm=sqrt(sm); for(i=0;i } voidmain() {doublea,a0,f0,f,e,sk[N],xk[N],x0[N],g[N]; intb1,b2,b,mt,M,i,k; nt=3;M=50;a0=0.4,e=0.01; x0[0]=2;x0[1]=3;mt=2; f0=funt(x0,g,&b); for(i=0;i if(! b)return; k=0; srand((unsigned)time(NULL)); for(;;){ if(a0<=e)break; if(k==M){a0=0.5*a0;k=0;} find_sk(mt,sk);a=a0; for(i=0;i f=funt(xk,g,&b1);b=0; if(! (b1&&f a=-a0; for(i=0;i f=funt(xk,g,&b2); if(b2&&f }elseb=1; if(! b){k++;continue;} k=0;f0=f; for(i=0;i for(;;){ for(i=0;i f=funt(xk,g,&b1); if((b1&&f elsebreak; } } printf("%s\n","********最优结果*********"); for(i=0;i printf("f*=%lf\n",f0); } /*********最优结果*********x*[1]=5.511014x*[2]=5.488826f*=12.501044*/ 实验五约束优化方法---复合型法 本实验用复合型法求目标函数的最优解。 数学模型: F(x)=(x1-8)2+(x2-8)2 g1(x)=x1 g2(x)=x2-1 g3(x)=11-x1-x2 #include #include #include #include #definesqr(x)((x)*(x)) #defineN10 intnt; doublefunt(double*x,double*g,int*b) { inti; g[0]=x[0];g[1]=x[1]-1;g[2]=11-x[0]-x[1]; *b=1; for(i=0;i returnsqr(x[0]-8)+sqr(x[1]-8); } /*排序--按函数值从小到大*/ voidsort(doublepx[N][N],double*pf,intK,intmt) { inti,j,k;doublet; for(i=0;i t=pf[i];pf[i]=pf[j];pf[j]=t; for(k=0;k } } voidmain() {inti,j,mt,b; doublea,f,f0,fr,d,e,c,g[N],x0[N],xr[N]; intH,K;/*H--坏点,K--复合形顶点数*/ doublepx[N][N],pf[N];/*复合形顶点及相应的函数值*/ doubleXL[N]={2,2},XH[N]={10,10};/*给定变量的下限和上限*/ nt=3;/*不等式个数*/ mt=2;/*变量个数*/ e=0.001; K=3; srand((unsigned)time(NULL)); for(i=0;i do{ for(j=0;j c=(double)(rand()+1.0)/RAND_MAX; px[i][j]=XL[j]+c*(XH[j]-XL[j]); } pf[i]=funt(px[i],g,&b); }while(! b); } sort(px,pf,K,mt); for(;;){ a=1.3;H=K-1; for(;;){ for(i=0;i x0[i]=0; for(j=0;j =H)x0[i]+=px[j][i]; x0[i]/=K-1; } for(i=0;i fr=funt(xr,g,&b); if(b&&fr if(a<1.0e-5){a=1.3;H--;}elsea*=0.5; } for(i=0;i pf[K-1]=fr; sort(px,pf,K,mt); d=0;for(i=1;i d=sqrt(d)/K;if(d d=0;for(i=1;i if(d d=0;for(i=1;i if(d } f0=pf[0];for(i=0;i printf("%s\n","********最优结果*********"); for(i=0;i printf("f*=%lf\n",f0); } //最优结果x*[1]=5.749423x*[2]=5.203676f*=12.884525
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 机械 优化 设计 实验 指导书 doc 资料