黄金分割法进退法原理及流程图

上传人:s9****2 文档编号:545679318 上传时间:2023-10-25 格式:DOC 页数:7 大小:108KB
返回 下载 相关 举报
黄金分割法进退法原理及流程图_第1页
第1页 / 共7页
黄金分割法进退法原理及流程图_第2页
第2页 / 共7页
黄金分割法进退法原理及流程图_第3页
第3页 / 共7页
黄金分割法进退法原理及流程图_第4页
第4页 / 共7页
黄金分割法进退法原理及流程图_第5页
第5页 / 共7页
点击查看更多>>
资源描述

《黄金分割法进退法原理及流程图》由会员分享,可在线阅读,更多相关《黄金分割法进退法原理及流程图(7页珍藏版)》请在金锄头文库上搜索。

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

2、搜索的解法很多,这里主要采用黄金分割法0.618法。该方法用不变的区间缩短率0.618代替斐波那契法每次不同的缩短率,从而可以看成是斐波那契法的近似,实现起来比拟容易,也易于人们所承受。黄金分割法是用于一元函数f(*)在给定初始区间a,b内搜索极小点*的一种方法。它是优化计算中的经典算法,以算法简单、收敛速度均匀、效果较好而著称,是许多优化算法的根底,但它只适用于一维区间上的凸函数6,即只在单峰区间内才能进展一维寻优,其收敛效率较低。其根本原理是:依照“去劣存优原则、对称原则、以及等比收缩原则来逐步缩小搜索区间7。具体步骤是:在区间a,b内取点:a1 ,a2 把a,b分为三段。如果f(a1)f

3、(a2),令a=a1,a1=a2,a2=a+r*(b-a);如果f(a1)=y2a1=b-r*(b-a) y1=f(a1)a2=a+r*(b-a) y2=f(a2)否是(b-a)/b和 y2-y1/y2否是*include math.h*include stdio.h*define f(*) *+2*double calc(double *a,double *b,double e,int *n) double *1,*2,s; if(fabs(*b-*a)f(*2) *a=*1; else *b=*2; *n=*n+1; s=calc(a,b,e,n); return s; main() do

4、uble 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算法原理进退法是用来确定搜索区间包含极小值点的区间的算法,其理论依据是:为单谷函数只有一个极值点,且为其极小值点的一个搜索区间,对于任意,如果,则为极小值的搜索区间,如果,则为极小值的搜索区间。因此,在给定初始点,及初始搜索步长的情况下,首先以初始步长向前搜索一步,计算。(1) 如果则可知搜索区间为,其中待求,为确定,后退一步计算,为缩

5、小系数,且,直接找到适宜的,使得,从而确定搜索区间。(2) 如果则可知搜索区间为,其中待求,为确定,前进一步计算,为放大系数,且,知道找到适宜的,使得,从而确定搜索区间。进退法求极值根本思想:对f(*)任选一个初始点*1及初始步长h0,通过比拟这两点函数值的大小,确定第三点位置,比拟这三点的函数值大小,确定是否为“高低高形态。算法原理1.试探搜索:选定初始点*1, *2= *1+ h0,计算 y1f(*1),y2f(*2) a如y1y2,转2向右前进;b如y1y2, 转3向左后退;图8.12.前进搜索加大步长h2 h,产生新点*3= *2+ 2h0;a如y2y3,令*1=*2,y1=y2;*2

6、=*3,y2=y3;h=2h重新构造新点*3=*2+h,并比拟y2、y3的大小,直到y2y3。图8.23.后退搜索令h-h0,令*3=*1,y3=y1;*1=*2,y1=y2;*2=*3,y2=y3;h=2h;产生新点*3= *2+ h;a如y2y3,令*1=*2,y1=y2;*2=*3,y2=y3;h=2h重新构造新点*3=*2+h,并比拟y2、y3的大小,直到y2y3。令a= *1,b= *3,搜索区间为a,b ;图8.32算法步骤用进退法求一维无约束问题的搜索区间包含极小值点的区间的根本算法步骤如下:(1) 给定初始点,初始步长,令,;(2) 令,置;(3) 假设,则转步骤4,否则转步骤

7、5;(4) 令,令,转步骤2;(5) 假设,则转步骤6否则转步骤7;(6) 令,转步骤2;(7) 令,停顿计算,极小值点包含于区间3算法的MATLAB实现在MATLAB中编程实现的进退函数为:功能:用进退法求解一维函数的极值区间。调用格式:其中,:目标函数;:初始点;:初始步长;:精度;:目标函数取包含极值的区间左端点;:目标函数取包含极值的区间又端点。进退法的MATLAB程序代码如下:function min*,ma*=minJT(f,*0,h0,eps)%目标函数:f;%初始点:*0;%初始步长:h0;%精度:eps;%目标函数取包含极值的区间左端点:min*;%目标函数取包含极值的区间又

8、端点:ma*;format long;if nargin=3 eps=1.0e-6;end*1=*0;k=0;h=h0;while 1 *4=*1+h; %试探步 k=k+1; f4=subs(f,findsym(f),*4); f1=subs(f,findsym(f),*1); if f4f1 *2=*1; *1=*4; f2=f1; f1=f4; h=2*h; %加大步长 else if k=1 h=-h; %反向搜索 *2=*4; f2=f4; else *3=*2; *2=*1; *1=*4; break; end endendmin*=min(*1,*3);ma*=*1+*3-min*;format short;流程图如下:. z.

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 医学/心理学 > 基础医学

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号