黄金分割法程序

黄金分割法程序

ID:30872546

大小:256.00 KB

页数:11页

时间:2019-01-04

黄金分割法程序_第1页
黄金分割法程序_第2页
黄金分割法程序_第3页
黄金分割法程序_第4页
黄金分割法程序_第5页
资源描述:

《黄金分割法程序》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库

1、一维搜索一维优化一般分为两大步骤:(1)确定初始搜索区间[a,bj,该区间应是包括一维函数极小点在内的单峰区间;(2)在搜索区间[a,b]内寻找极小点。搜索区间的确定一进退法基本思路是:由单峰函数性质可知,在极小点a*左边函数值应严格下降,而在极小点右边函数值应严格上升。因此,可从某一个给定的初始点aO出发,以初始步长hO沿着目标函数值的下降方向,逐步前进或后退,直到找到相继的3个试点的函数值按“大…小…■大”变化为止。-:确定搜索区间的外推法•首先确定函数的单谷性•然后从起点开始以初始步长向前试探,如果函数值变大,则改变步长方向。•如果

2、函数值下降,则维持原来的试探方向,并将步长加倍。搜索区间的确定流程图确定搜索区间的程序代码voidfindqujian(floata[3],floatf[3J)floatt=steplength,al,fl,ia;a[0]=0;f[0]=fc(a[0]);for(inti=0;;i++){a[l]制0]+t;f[l]=fc(a[l]);if(f[l]=e){t=-t;a[0]=a[l];f[0]=f[l];}else{if(ia==l)return;t=t/2;ia=l;}}f

3、oT(i=0;;i++){a[2]=a[l]+t;f[2]=fc(a[2]);if(f[2]>f[l])break;t=2*t;a[0]=a[l];f[0]=f[l];a[l]=a[21;f[l]=f[2];if(a[0]>a[2]){al=a[OJ;fl=f[OJ;a[0]=a[2];f[0]=f[2];a⑵=al;f[2]=fl;}return;一、黄金分割法黄金分割法是通过不断缩短搜索区间的长度来寻求一维函数的极小点,这种方法的基本原理是:在搜索区间[a,b]内按如下规则对称地取两点al和a2a1=a+0.382(b-a);a2=a

4、+0・618(b-a);黄金分割法的搜索过程是:1)给出初始搜索区间[a,b]及收敛精度e,将赋以0.6182)计算al和a2,并计算起对应的函数值f(al),f(a2);,3)根据期间消去法原理缩短搜索区间,为了能用原来的坐标点计算公式,需进行区间名城的代换,并在保留区间中计算一个新的试验点及其函数值。4)检查区间是否缩短到足够小和函数值收敛到足够近,如果条件不满足则返回到步骤2。5)如果条件满足,则取最后两试验点的平均值作为极小点的数值近似解。黄金分割法的流程图及程序清单需要说明的是搜索区间血b]不需要给定,只需输入搜索精度e;程序由

5、四个子程序构成;(1):输入输出子程序io();(2):floatfc(floatx)求输入函数在某一点的值;(3)voidfindqujian(floata[3],floatf[3])确定搜索区间;(4):floatxunyou(float*value)寻找最小值^include二iostream.h二^include二math・h=^include二saio.h二^include二conio.h二^definesiepcrngth0.01#definen3floate;floata,b,c;floatq[3];voidio(){cou

6、t«n假设多项式的最高次幕为2n«endl«endl;cout«n设多项式的一般形式为f=a*xA2+b*x+c',«endl«endl;cout«n请输入要求解的目标多项式的系数H«endl«endl;printf(na=H);scanf(n%f&a);q[2]=a;printf(nb=n);scanf(n%f&b);q[l]=b;printf(nc=H);scanf(n%f!,&c);q[O]=c;cout«endl;cout«"请输入搜索精度en«endl«endl;scanf(H%f&e);cout«endl;}floatf

7、c(floatx){inti;floatu=q[n-l];for(i=n-2;i>=0;i—)u二u*x+q[i];returnu;}voidfindqujian(floata[3],floatf[3]){floatt=float(steplength),al,fl,ia;a[0]=0;f[0]=fc(a[0]);for(inti=0;;i++){a[l]=a[O]+t;f[l]=fc(a[l]);if(f[l]=e){t=-t;a[0]=a[l];f[0]=f[l];}els

8、e{if(ia==l)return;t=t/2;ia=l;}}for(i=0;;i++){a[2]=a[l]+t;f[2]=fc(a[2]);if(f[2]>f[l])break;t=2*t;

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。