欢迎来到天天文库
浏览记录
ID:14175257
大小:375.00 KB
页数:6页
时间:2018-07-26
《优化设计应用实例》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、一、工程问题描述一条长为16米的铁丝截成两段,分别弯成两个正方形,要使如何截断才能使两个正方形的面积和最小?二、数学模型1、设计变量总长16米的铁丝,被截成两根时,若其中一根铁丝的长度确定,则另一根铁丝的长度也可以确定。并且铁丝截断后是被弯成正方形,如果正方形的周长确定,那么正方形的面积也能确定。故取其中一根铁丝的长度x为设计变量。2、目标函数本问题以两个正方形的面积为目标函数。两根铁丝围城的面积分别为S1和S2,其中,两根铁丝围城的总面积:目标函数:3、约束条件由于铁丝的长度和面积是非负数,故有即
2、4、优化方法黄金分割法适用于[a,b]区间上的任何单谷函数求极小值问题。对函数除要求“单谷”外不作其他要求,甚至可以不连续。因此,这种方法的适应面相当广。黄金分割法也是建立在区间消去法原理基础上的试探方法。在搜索区间内[a,b]适当插入两点,将区间分成三段,如图所示。利用区间消去法,使搜索区间缩小,通过迭代计算,使搜索区间无限缩小,从而得到极小点的数值近似解。黄金分割法的搜索过程:(1)给出初始搜索区间及收敛精度,将λ赋以0.618;(2)按坐标点计算公式计算;并计算其对应的函数值;(3)根据区间消
3、去法原理缩短搜索区间。为了能用原来的坐标点计算公式,需进行区间名称的代换,并在保留区间中计算一个新的试验点及其函数值。如果,则新区间=,取,令;如果,则新区间=,取,令;(4)检查区间是否缩短到足够小和函数值收敛到足够精度,如果收敛条件满足,则取最后两试验点的平均值作为极小点的数值近似解。如果条件不满足则转向步骤(5);(5)产生新的插入点:若,则若,则转向(3)进行新的区间缩小。一、算法编程与结果分析1.程序#include#includeusingnamesp
4、acestd;constfloate=0.001;floatfunk(float);floatlv=0;floatrv=16;floatnewlv(float,float);floatnewrv(float,float);floatminv;boolcheckv=false;voidmain(){cout<<"函数y=(x/4)*(x/4)+((16-x)/4)*((16-x)/4),05、0;i<100;i++){if(e<(rv-lv)){if(funk(newlv(lv,rv))>funk(newrv(lv,rv))){lv=newlv(lv,rv);rv=rv;}elseif(funk(newlv(lv,rv))==funk(newrv(lv,rv))){lv=lv;rv=rv;}elseif(funk(newlv(lv,rv))6、e;}}if(checkv){cout<<"当x取"<7、x2){x1=lv;x2=rv;floatres=lv+0.618*(rv-lv);returnres;}floatfunk(floatx){floaty;y=(x/4)*(x/4)+((16-x)/4)*((16-x)/4);returny;}1.结果分析,08、需修改lv和rv的值为目标函数的取值范围,同时修改调用函数floatfunk(floatx)中的函数为所需求的目标函数即可。运行结果:运行结果分析:(1),优化结果是x=3.14162时,函数取最优值:f(x)=-1;(2),优化结果是x=1.99983时,函数取最优值:f(x)=3.
5、0;i<100;i++){if(e<(rv-lv)){if(funk(newlv(lv,rv))>funk(newrv(lv,rv))){lv=newlv(lv,rv);rv=rv;}elseif(funk(newlv(lv,rv))==funk(newrv(lv,rv))){lv=lv;rv=rv;}elseif(funk(newlv(lv,rv))6、e;}}if(checkv){cout<<"当x取"<7、x2){x1=lv;x2=rv;floatres=lv+0.618*(rv-lv);returnres;}floatfunk(floatx){floaty;y=(x/4)*(x/4)+((16-x)/4)*((16-x)/4);returny;}1.结果分析,08、需修改lv和rv的值为目标函数的取值范围,同时修改调用函数floatfunk(floatx)中的函数为所需求的目标函数即可。运行结果:运行结果分析:(1),优化结果是x=3.14162时,函数取最优值:f(x)=-1;(2),优化结果是x=1.99983时,函数取最优值:f(x)=3.
6、e;}}if(checkv){cout<<"当x取"<7、x2){x1=lv;x2=rv;floatres=lv+0.618*(rv-lv);returnres;}floatfunk(floatx){floaty;y=(x/4)*(x/4)+((16-x)/4)*((16-x)/4);returny;}1.结果分析,08、需修改lv和rv的值为目标函数的取值范围,同时修改调用函数floatfunk(floatx)中的函数为所需求的目标函数即可。运行结果:运行结果分析:(1),优化结果是x=3.14162时,函数取最优值:f(x)=-1;(2),优化结果是x=1.99983时,函数取最优值:f(x)=3.
7、x2){x1=lv;x2=rv;floatres=lv+0.618*(rv-lv);returnres;}floatfunk(floatx){floaty;y=(x/4)*(x/4)+((16-x)/4)*((16-x)/4);returny;}1.结果分析,08、需修改lv和rv的值为目标函数的取值范围,同时修改调用函数floatfunk(floatx)中的函数为所需求的目标函数即可。运行结果:运行结果分析:(1),优化结果是x=3.14162时,函数取最优值:f(x)=-1;(2),优化结果是x=1.99983时,函数取最优值:f(x)=3.
8、需修改lv和rv的值为目标函数的取值范围,同时修改调用函数floatfunk(floatx)中的函数为所需求的目标函数即可。运行结果:运行结果分析:(1),优化结果是x=3.14162时,函数取最优值:f(x)=-1;(2),优化结果是x=1.99983时,函数取最优值:f(x)=3.
此文档下载收益归作者所有