黄金分割法机械优化设计.docx
- 文档编号:14311738
- 上传时间:2023-06-22
- 格式:DOCX
- 页数:11
- 大小:690.99KB
黄金分割法机械优化设计.docx
《黄金分割法机械优化设计.docx》由会员分享,可在线阅读,更多相关《黄金分割法机械优化设计.docx(11页珍藏版)》请在冰点文库上搜索。
黄金分割法机械优化设计
黄金分割法机械优化设计
机械优化设计
黄金分割法
班级:
学硕一班
学号:
姓名:
黄金分割法
黄金分割法也成为0.618法,是一种应用广泛的一维搜索方法。
该方法对函数
无特殊要求,函数甚至可以是不连续的。
黄金分割法是利用序列消去原理,通过不断缩小单峰区间长度,使搜索区间不断缩小,从而不断逼近目标函数极小点的一种优化方法。
一、基本思想
在搜索区间[a,b]内必须按下述规则对称地取
和
两点,使
,
,这两点把区间分为三段,计算插入点的函数值,如图1-1所示。
根据单峰函数的性质,通过比较函数值大小,删去其中一段,使搜索区间缩小。
在新的区间继续上面的过程,使搜索区间不断缩小,当搜索区间无限缩小时,便可得到函数在极小点附近的近似解。
在第一次缩小区间后,新区间只需要再插入一点即可形成区间新三段。
按比例
缩小,新区间三段与原区间三段具有相同的比例分布,每次缩小所得新区间长度与原区间长度之比成为区间收缩率
。
图1-1
设初始区间长度为L,为了保证区间收缩率不变,第一次收缩后的长度为
,第二次收缩后的长度为
,而第二次的收缩率应该相等。
解次方程并舍去负根,就可得到
。
所以,
和
两点的取法为:
,
。
所以,对于黄金分割法,适用于设计变量少的优化问题中的一维搜索。
二、黄金分割法的搜索过程
1)给出初始搜索区间及收敛精度,将
赋以0.618
2)按坐标点计算公式计算
,
;并计算其对应的函数值。
3)根据区间消去法原理缩短搜索区间。
为了能用原来的坐标点计算公式,需进行区间名称的代换,并在保留区间中计算一个新的试验点及其函数值。
如果
,则新区间=
令
,记N0=0;
如果
,则新区间=
令
,记N0=1;如图2-1所示。
图2-1
4)检查区间是否缩短到足够小和函数值收敛到足够精度,如果收敛条件满足,则取最后两试验点的平均值作为极小点的数值近似解。
如果条件不满足则转向步骤5。
5)产生新的插入点,然后再进行新的区间缩小。
总体如图2-2所示。
图2-2
从迭代过程可以看出,除第一次缩小区间长度时需要在选定的单峰区间内增加两个点外,以后每次缩小区间长度只需要增加一个点,因此区间长度缩小次数应等于缩小区间长度所增加的点数减一。
例如,为了达到规定的收敛精度所需要增加的点数为n,则为达到规定的收敛精度所需缩小区间长度的次数k=n-1。
第一次缩小后新区间长度
第二次缩小后新区间长度
……
第k次缩小后新区间长度
设k次缩小后区间长度已缩到足够小,满足规定的收敛精度,即
由上式得:
编程计算时,可以根据预先规定的精度
求得所需插入的点数n,然后用n作为终止迭代的标志。
三、算法框图
四、机械优化的算例
某公司要预制一零件工具箱,初始设计为使用一块长为4m,宽为3m的长方形铁板作为原材料,利用这块铁板按照一定比例分配,围成一个矩形制成工具箱的4个侧面,应该如何设计才能使工具箱的底面积最大?
方案
一
二
三
四
五
长(a)
0.3
0.6
1
1.2
1.8
宽(b)
1.7
1.4
1
0.8
0.2
面积(S)
0.51
0.84
1
0.96
0.36
根据方案可以看到:
选取不同的长宽比例,会影响到底面积的大小,并且底面积的大小类似正态分布的图形,也就是会出现一个峰值,因此可以使用黄金分割法进行简单的运算。
如图:
⏹我们可以先设围成工具箱底面的矩形的长为X,因此宽则为2-X,而工具箱的底面积为S,这我们可以把题目传化为以下模型:
⏹目标函数:
S=(2-X)*X;
⏹约束条件:
0≤X≤2;
⏹设置搜索区间为:
[a,b]=[0,2],迭代精度为0.000001
实现程序
#include
#include
//#include"StdAfx.h"
#definef(x)(2-x)*x
intmain()
{
doubleF1,F2,F3,FP,x1,x2,x3,xp,a,b,e;
intn;
n=1;
printf("设¦置目标函数为f(x)=(2-x)*x\n");
printf("迭代精度:
e=");
scanf("%lf",&e);
printf("搜索左区间:
a=");
scanf("%lf",&a);
printf("搜索右区间:
b=");
scanf("%lf",&b);
printf("nabx1x2F1F2\n");
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%.4lf\n",n,a,b,x1,x2,F1,F2);
n=n++;
do
{
if(F1 { b=x2; x2=x1; F2=F1; x1=a+0.618*(b-a); F1=-f(x1); printf("%d%.4lf%.4lf%.4lf%.4lf%.4lf%.4lf\n",n,a,b,x1,x2,F1,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%.4lf\n",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*=%.5lfF*=%.5lf\n",xp,FP); doublec,d; c=xp; d=2-c; printf("取长a=%.5lf宽b=%.5lf\n",c,d); printf("所围成的最大底面积S=%.5lf\n",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。 与黄金分割法最后计算出来的面积相差甚少。 因此,可验证黄金分割法可行。 总结: 通过学习《机械优化设计》这门课。 我学习到了很多关于机械设计的方法,有传统的和现代的。 并且通过上课和训练学习了多种优化方法的思想和步骤。 在此次设计中,由于对C语言使用还不是很熟悉,所以程序设计上并不是很完美,以后还要多多训练。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 黄金分割 机械 优化 设计