黄金分割法,进退法,基础原理及经过流程图_第1页
黄金分割法,进退法,基础原理及经过流程图_第2页
黄金分割法,进退法,基础原理及经过流程图_第3页
黄金分割法,进退法,基础原理及经过流程图_第4页
黄金分割法,进退法,基础原理及经过流程图_第5页
已阅读5页,还剩8页未读 继续免费阅读

下载本文档

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

文档简介

1、*1黄金分割法的优化问题(1)黄金分割法基本思路:黄金分割法适用于a , b区间上的任何单股函数求极小值问题, 对函 数除要求“单谷”外不做其他要求,甚至可以不连续。因此,这种方 法的适应面非常广。黄金分割法也是建立在区间消去法原理基础上的 试探方法,即在搜索区间a, b内适当插入两点al, a2,并计算其 函数值。al, a2将区间分成三段,应用函数的单谷性质,通过函数 值大小的比较,删去其中一段,是搜索区间得以缩小。然后再在保留 下来的区间上作同样的处理,如此迭代下去,是搜索区间无限缩小, 从而得到极小点的数值近似解。(2)黄金分割法的基本原理一维搜索是解函数极小值的方法之一,其解法思想为

2、沿某一已知方向 求目标函数的极小值点。一维搜索的解法很多,这里主要采用黄金分 割法(0.618法)。该方法用不变的区间缩短率 0.618代替斐波那契 法每次不同的缩短率,从而可以看成是斐波那契法的近似, 实现起来 比较容易,也易于人们所接受。rl=a+0,382(>-a) r2=a+0,618Cb-a) 如图班2户母4) 所以新区间为a ,于2以为新区间,继域求新的试点黄金分割法是用于一元函数f(x)在给定初始区间a,b内搜索极 小点* *的一种方法。它是优化计算中的经典算法,以算法简单、收 敛速度均匀、效果较好而著称,是许多优化算法的基础,但它只适用 于一维区间上的凸函数6,即只在单峰

3、区间内才能进行一维寻优,其 收敛效率较低。其基本原理是:依照“去劣存优”原则、对称原则、 以及等比收缩原则来逐步缩小搜索区间7。具体步骤是:在区间a,b 内取点:al , a2把a,b分为三段。如果f(a1)>f(a2),令 a=a1,a1=a2,a2=a+r*(b-a);如果 f(a1)<f(a2),令 b=a2,a2=a1,a1=b-r*(b-a), 如果 | (b-a)/b | 和 | (y1-y2)/y2| 都大于收敛精度e重新开始。因为a,b为单峰区间,这样每次可将搜索区间 缩小0.618倍或0.382倍,处理后的区间都将包含极小点的区间缩小, 然后在保留下来的区间上作同

4、样的处理,如此迭代下去,将使搜索区a,b逐步缩小,直到满足预先给定的精度时,即获得一维优化问题 的近似最优解。黄金分割法原理如图1所示,(3)程序流程如下:*4实验所编程序框图结束#include math.h#include «stdio.h»#define f(x) x*x+2*xdouble calc(double *a,double *b,double e,int *n) double x1,x2,s;if(fabs(*b-*a)<=e)s=f(*b+*a)/2);else x1=*b-0.618*(*b-*a);x2=*a+0.618*(*b-*a);if(

5、f(x1)>f(x2)*a=x1;else*b=x2;*n=*n+1;s=calc(a,b,e,n);return s;main() double s,a,b,e;int n=0;scanf("%lf %lf %lf",&a,&b,&e);s=calc(&a,&b,e,&n);printf("a=%lf,b=%lf,s=%lf,n=%dn",a,b,s,n);5程序运行结果如下图:2进退法(1)算法原理进退法是用来确定搜索区间(包含极小值点白区间)的算法,其理论依据是:f(x)为单谷函数(只有一个极值

6、点),且a,b为其极小值点的一个搜索区间,对于任意xla,b,如果f k fX2,则a, X2为极小值的搜索区间,如果fxifX2,则xi,b为极小值的搜索区间。因此,在给定初始点xo,及初始搜索步长h的情况下,首先以初始步长向前搜索一步,计算f x0 h。(1)如果 f x0f x0 h则可知搜索区间为%x0 h,其中%寺求,为确定 %后退一步计算f(x°h),为缩小系数,且01,直接找到合适的,使得f(xoh) f xo ,从而确定搜* .索区间xoh, xo h。(2)如果 f % f x0 h则可知搜索区间为xo,%,其中%寺求,为确定 前进一步计算f (xoh), 为、,a

7、一,、 a 4、一*放大系数,且 1 ,知道找到合适的,使得f % hf (xoh),从而确定搜索*.区间xo, %h。进退法求极值基本思想:对f(x)任选一个初始点xi及初始步长ho,通过比较这两点函数值的大 小,确定第三点位置,比较这三点的函数值大小,确定是否为“高一低-高”形态。 算法原理 1.试探搜索:选定初始点(a)(b)x1, x2= x 1+ ho,计算 y1=f(x1),y2=f(x2)如y1>y2,转2向右前进;如 y1<y22.前进搜索加大步长 h=2 h ,广生新点 x3= x2+ 2h o ;*(a)如y2<y3,则函数在xi,x3内必有极小点,令 a

8、=xi,b= x3搜索区间为a, b;(b)如 y2>y3,令 xi=x2 , y产y2 ;x2=x3 , y2=y3 ; h=2h重新构造新点 x3=x2+h,y2<y3。图8.23.后退搜索令h = -ho,令x3=x 1产生新点x3= x 2+ h ;(a)如y2<y3,则函数在为a, b(b)如 y2>y3,y3=yi ; xi=x2 , yi=y2 ;xi, x3内必有极小点,x2=x3 , y2=y3 ; h=2h;a= x3, b= x i,搜索区间令 xi=x2 , yi=y2 ; x2=x3 , y2=y3 ; 重新构造新点x3=x2+h,并比较y2、

9、y3的大小, 搜索区间为a, b;h=2h直至ij y2<y3。令 a= xi, b= x 3,图8.3(2)算法步骤用进退法求一维无约束问题min f(x),x R的搜索区间(包含极小值点的区间)的基本算法步骤如下:(1) 给定初始点x(0),初始步长ho,令hho, x(i)x(0), k 0 ;(2) 令xxh,置k k 1;(3) 若f xf x,则转步骤(4),否则转步骤(5);(4)令 x(2)x x(1)x(4), f x(2)f x(1) , f x f x(4),令 h 2h,转步骤(2);(5) 若k 1 ,则转步骤(6)否则转步骤(7);(6)令h h, xx,f

10、x f x,转步骤(2); 令xx,xx,xx,停止计算,极小值点包含于区间x(1),x(3)或x(3),x(1)(3)算法的MATLAB 实现在MATLAB中编程实现的进退函数为:min JT功能:用进退法求解一维函数的极值区间。调用格式:min x,max x min JT( f, x0, h0,eps)其中,f :目标函数;x0:初始点;h0:初始步长;eps :精度;minx:目标函数取包含极值的区间左端点; maxx:目标函数取包含极值的区间又端点。进退法的MATLAB 程序代码如下:function minx,maxx=minJT(f,x0,h0,eps)%目标函数:f;%初始点:x0;%初始步长:h0;%精度:eps;%目标函数取包含极值的区间左端点:minx;%目标函数取包含极值的区间又端点:maxx;format long;if nargin=3eps=1.0e-6;endx1=x0;k=0;h=h0;while 1x4=x1+h;%试探步k=k+1;f4=subs(f,findsym,x4);f1=subs(f,findsym,x1);

温馨提示

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

评论

0/150

提交评论