机械优化设计实验报告(23页).doc
《机械优化设计实验报告(23页).doc》由会员分享,可在线阅读,更多相关《机械优化设计实验报告(23页).doc(23页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、-机械优化设计实验报告-第 23 页机械优化设计实验报告目录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 流程框图2
2、46.3 题目246.4 源程序代码及结果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;i
3、f (y2y1)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 (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); endendxxx=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
5、*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.0000 1.00001.3270e-0194.鲍威尔法 4.1 鲍威尔法基本思路:在不用导数的前提下,在迭代中逐次构造G的共轭方向。 4.2 鲍威尔法流程图:43 题目:求函数f(x)= x0*x0+x1*x1-x0*x1-10*x0
6、-4*x1+60的最优点,收敛精度=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(doubl
7、e);h=h0;for(i=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(h
8、0)for(i=0;in;i+)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;fo
9、r(i=0;in;i+)*(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 ep
10、sg,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);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,d
11、lt,df,sdx,q,d;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);
12、dlt=-1;for(j=0;jn;j+)for(i=0;idlt)dlt=df;m=j;sdx=0;for(i=0;in;i+)sdx=sdx+fabs(xi-(*(xx1+i);if(sdxeps)free(ss);free(s);for(i=0;i4;i+)free(xxi);return(f);for(i=0;in;i+)*(xx2+i)=xi;f2=f;for(i=0;in;i+)*(xx3+i)=2*(*(xx2+i)-(*(xx1+i);xi=*(xx3+i);fx=objf(x);f3=fx;q=(f1-2*f2+f3)*(f1-f2-dlt)*(f1-f2-dlt);d=0.
13、5*dlt*(f1-f3)*(f1-f3);if(f3f1)|(qd)if(f2=f3)for(i=0;in;i+)*(xx0+i)=*(xx2+i);elsefor(i=0;in;i+)*(xx0+i)=*(xx3+i);elsefor(i=0;in;i+)*(ss+(i+1)*(n+1)=xi-(*(xx1+i);*(s+i)=*(ss+(i+1)*(n+1);f=oneoptim(xx0,s,h0,epsg,n,x);for(i=0;in;i+)*(xx0+i)=xi;for(j=m+1;j=n;j+)for(i=0;in;i+)*(ss+i*(n+1)+j-1)=*(ss+i*(n+1
14、)+j);void main()double p=1,2;double ff,x2;ff=powell(p,0.3,0.001,0.0001,2,x);printf(x0=%f,x1=%f,ff=%fn,x0,x1,ff);getchar();5. 复合形法 5.1 复合行法基本思想:在可行域中选取K个设计点 (n+1K2n)作为初始复合形的顶点。比较各顶点目标函数值的大小,去掉目标函数值最大的顶点(称最坏点),以坏点以外其余各点的中心为映射中心,用坏点的映射点替换该点,构成新的复合形顶点。 反复迭代计算,使复合形不断向最优点移动和收缩,直至收缩到复合形的顶点与形心非常接近,且满足迭代精度要求
15、为止。 5.2 题目:求函数f(x)=(x1-5)*(x1-5)+4*(x2-6)*(x2-6)的最优点,约束条件为g1(x)=64-x1*x1-x2*x20;g2(x)=x2-x1-100;g3(x)=x1-100;收敛精度自定义;5.3 源程序代码及结果:#include #include #include #include #define E0 1e-5 /*复合形法收敛控制精度*/ double *apply(int,int); /*申请矩阵空间*/ double f(double *); /*目标函数*/ double *g(double *); /*约束函数*/ bool judg
16、e(double *); /*可行点的判断*/ int main() int n,k; int i,j,k1; int l; double temporary; double restrain; /*收敛条件*/ double reflect; /*反射系数*/ srand(unsigned)time(NULL); printf(请输入目标函数的维数 n:); /*输入已知数据*/ scanf(%d,&n); printf(请输入复合形的顶点数 k:); scanf(%d,&k); double *x=apply(k,n); /*存放复合形顶点*/ double *y=(double *)ca
17、lloc(k,sizeof(double); /*存放目标函数值*/ double *p=(double *)calloc(3,sizeof(double); /*存放约束函数值*/ double *a=(double *)calloc(n,sizeof(double); /*存放设计变量的下限*/ double *b=(double *)calloc(n,sizeof(double); /*存放设计变量的上限*/ double *x_c=(double *)calloc(n,sizeof(double); /*存放可行点中心*/ double *x_r=(double *)calloc(n,
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 机械 优化 设计 实验 报告 23
限制150内