机械优化设计实验指导书.docx
- 文档编号:8353478
- 上传时间:2023-01-30
- 格式:DOCX
- 页数:17
- 大小:18.94KB
机械优化设计实验指导书.docx
《机械优化设计实验指导书.docx》由会员分享,可在线阅读,更多相关《机械优化设计实验指导书.docx(17页珍藏版)》请在冰豆网上搜索。
机械优化设计实验指导书
济南大学
机械工程学院
机械优化设计
实验指导书
机械设计系
王玉增
一、实验目的
机械优化设计是一门实践性较强的课程,学生通过上机计算达到以下目的:
1、加深对机械优化设计方法的基本理论和算法步骤的理解。
2、培养学生独立编制、调试计算机程序的能力。
3、掌握常用优化方法程序的使用方法。
4、培养学生灵活运用优化设计方法解决工程实际问题的能力。
二、实验项目、学时分配及对每个实验项目的要求
序号
实验项目
学时数
实验要求
1
一维搜索方法
2
1、明确进退法、黄金分割法的基本原理及程序框图
2、编制进退法、黄金分割法程序
3、用考核题对所编程序进行考核
2
鲍威尔方法
2
1、明确鲍威尔法基本原理及程序框图
2、编制鲍威尔法程序
3、用考核题对所编程序进行考核
3
DFP方法
2
1、明确DFP方法法基本原理及程序框图
2、编制DFP方法法程序
3、用考核题对所编程序进行考核
4
随机方向法
2
1、明确随机方向法基本原理及程序框图
2、编制随机方向法程序
3、用考核题对所编程序进行考核
5
复合型法
2
1、明确复合形法基本原理及程序框图
2、编制复合形法程序
3、用考核题对所编程序进行考核
三、实验报告内容
每次上机实验结束后,学生要作一份完整的实验报告,实验报告内容应包括:
1、优化方法的基本原理简述及程序框图绘制。
2、编制优化方法程序。
3、用考核题对所编程序进行考核。
四、实验考核办法
本课程实验成绩依据以下几个方面进行考核
1、实验报告
2、考核所编制的程序
3、实验纪律、出勤等
实验一一维搜索方法
本实验求函数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){
h=-h0;x3=x1;y3=y1;
x1=x2;y1=y2;x2=x3;y2=y3;
}
for(;;){
h*=2.0;x3=x2+h;y3=f(x3);
if(y2 x1=x2;y1=y2;x2=x3;y2=y3; } if(h>0){*a=x1;*b=x3;} else{*a=x3;*b=x1;} } /* 黄金分割法 a,b---搜索区间[a,b];e---精度 x,y---最优解X*,F* */ voidsearch_gold(doublea,doubleb,doublee, double*x,double*y) { doublex1,x2,y1,y2; x1=a+0.382*(b-a);y1=f(x1); x2=a+0.618*(b-a);y2=f(x2); do{ if(y1 b=x2;x2=x1;y2=y1; x1=a+0.382*(b-a);y1=f(x1); }else{ a=x1;x1=x2;y1=y2; x2=a+0.618*(b-a);y2=f(x2); } }while(b-a>e); *x=0.5*(a+b);*y=f(*x); } /* 二次插值法 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){*xpt=x2;*fpt=f2;break;} xp=0.5*(x1+x3-c1/c2);fp=f(xp); if((xp-x1)*(x3-xp)<=0.0){ *xpt=x2;*fpt=f2; break; } if(k! =1)if(fabs(xp0-xp)<=e){ *xpt=xp;*fpt=fp; break; } if(xp>x2)if(f2 x3=xp;f3=fp; }else{ x1=x2;f1=f2;x2=xp;f2=fp; }elseif(f2 x1=xp;f1=fp; }else{ x3=x2;f3=f2;x2=xp;f2=fp; } 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);
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 机械 优化 设计 实验 指导书