黄金分割法机械优化设计_第1页
黄金分割法机械优化设计_第2页
黄金分割法机械优化设计_第3页
黄金分割法机械优化设计_第4页
黄金分割法机械优化设计_第5页
已阅读5页,还剩4页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、机械优化设计黄金分割法班级:学硕一班学号:姓名:黄金分割法黄金分割法也成为0.618法,是一种应用广泛的一维搜索方法。该方法对函数无特殊要求,函数甚至可以是不连续的。黄金分割法是利用序列消去原理,通过不断缩小单峰区间长度,使搜索区间不断缩小,从而不断逼近目标函数极小点的一种优化方法。一、基本思想在搜索区间a,b内必须按下述规则对称地取和两点,使,这两点把区间分为三段,计算插入点的函数值,如图1-1所示。根据单峰函数的性质,通过比较函数值大小,删去其中一段,使搜索区间缩小。在新的区间继续上面的过程,使搜索区间不断缩小,当搜索区间无限缩小时,便可得到函数在极小点附近的近似解。在第一次缩小区间后,新

2、区间只需要再插入一点即可形成区间新三段。按比例缩小,新区间三段与原区间三段具有相同的比例分布,每次缩小所得新区间长度与原区间长度之比成为区间收缩率。图1-1设初始区间长度为L,为了保证区间收缩率不变,第一次收缩后的长度为,第二次收缩后的长度为,而第二次的收缩率应该相等。解次方程并舍去负根,就可得到。所以,和两点的取法为:,。所以,对于黄金分割法,适用于设计变量少的优化问题中的一维搜索。二、黄金分割法的搜索过程1)给出初始搜索区间及收敛精度,将赋以0.6182)按坐标点计算公式计算,;并计算其对应的函数值。3)根据区间消去法原理缩短搜索区间。为了能用原来的坐标点计算公式,需进行区间名称的代换,并

3、在保留区间中计算一个新的试验点及其函数值。如果,则新区间 令,记N0=0;如果,则新区间令,记N0=1;如图2-1所示。图2-14)检查区间是否缩短到足够小和函数值收敛到足够精度,如果收敛条件满足,则取最后两试验点的平均值作为极小点的数值近似解。如果条件不满足则转向步骤5。5)产生新的插入点,然后再进行新的区间缩小。总体如图2-2所示。图2-2从迭代过程可以看出,除第一次缩小区间长度时需要在选定的单峰区间内增加两个点外,以后每次缩小区间长度只需要增加一个点,因此区间长度缩小次数应等于缩小区间长度所增加的点数减一。例如,为了达到规定的收敛精度所需要增加的点数为n,则为达到规定的收敛精度所需缩小区

4、间长度的次数k=n-1。第一次缩小后新区间长度第二次缩小后新区间长度第k次缩小后新区间长度设k次缩小后区间长度已缩到足够小,满足规定的收敛精度,即由上式得:编程计算时,可以根据预先规定的精度求得所需插入的点数n,然后用n作为终止迭代的标志。三、算法框图四、机械优化的算例某公司要预制一零件工具箱,初始设计为使用一块长为4m,宽为3m的长方形铁板作为原材料,利用这块铁板按照一定比例分配,围成一个矩形制成工具箱的4个侧面,应该如何设计才能使工具箱的底面积最大?方案一二三四五长(a)0.30.611.21.8宽(b)1.71.410.80.2面积(S)0.510.8410.960.36根据方案可以看到

5、:选取不同的长宽比例,会影响到底面积的大小,并且底面积的大小类似正态分布的图形,也就是会出现一个峰值,因此可以使用黄金分割法进行简单的运算。如图:n 我们可以先设围成工具箱底面的矩形的长为X,因此宽则为2-X,而工具箱的底面积为S,这我们可以把题目传化为以下模型:n 目标函数:S=(2-X)*X;n 约束条件:0X2;n 设置搜索区间为:a,b=0,2,迭代精度为0.000001实现程序#include<math.h>#include<stdio.h>/#include "StdAfx.h"#define f(x) (2-x)*xint main()

6、 double F1,F2,F3,FP,x1,x2,x3,xp,a,b,e; int n; n=1;printf("设¦置目标函数为f(x)=(2-x)*xn"); printf("迭代精度:e="); scanf("%lf",&e); printf("搜索左区间:a="); scanf("%lf",&a); printf("搜索右区间:b="); scanf("%lf",&b); printf("n a b x

7、1 x2 F1 F2n"); x1=b-0.618*(b-a); x2=a+0.618*(b-a); F1=-f(x1); F2=-f(x2); printf("%d %.4lf %.4lf %.4lf %.4lf %.4lf %.4lfn",n,a,b,x1,x2,F1,F2); n=n+;do if(F1<F2) b=x2; x2=x1; F2=F1; x1=a+0.618*(b-a); F1=-f(x1); printf("%d %.4lf %.4lf %.4lf %.4lf %.4lf %.4lfn",n,a,b,x1,x2,F1

8、,F2); n=n+; else a=x1; x1=x2; F1=F2; x2=b-0.618*(b-a); F2=-f(x2); printf("%d %.4lf %.4lf %.4lf %.4lf %.4lf %.4lfn",n,a,b,x1,x2,F1,F2); n=n+; while(fabs(b-a)/b)>=e&&fabs(F2-F1)/F2)>=e); xp=(a+b)*0.5; FP=f(xp); printf("其中为迭代次数,最后求得和如下所示:n"); printf("x*=%.5lf F*=%

9、.5lfn",xp,FP); double c,d; c=xp; d=2-c; printf("取长a=%.5lf 宽b=%.5lfn",c,d); printf("所围成的最大底面积S=%.5lfn",FP);getchar();scanf("%lf",&e);运行结果:输入迭代精度0.000001。 如图3-1所示。图3-1 精度为0.000001当精度为0.1时,所得结果如图3-2所示。图3-2 精度为0.1当精度为0.00001时,所得结果如图3-3所示。图3-3 精度为0.00001当精度为0.1时,迭代次数只有2次;所得到的值精度一般;当精度为0.00001时,迭代次数只有5次;所得到的值精度比0.1所得的高;当精度为0.000001时,迭代次数有8次;所得到的值精度较高,接近结果;精度越高,则越接近最优解。验算黄金分割法的可行性:由S=(2-X)*X=2X-X*X;求导后得到S=2-2*X,另导数等于0,求的当X等于1的时候,面积S可以取最

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

最新文档

评论

0/150

提交评论