文档详情

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

新**
实名认证
店铺
PDF
506.37KB
约11页
文档ID:567313134
2022年黄金分割法-进退法-原理及流程图_第1页
1/11

1黄金分割法的优化问题〔1〕黄金分割法基本思路:黄金分割法适用于 [a ,b] 区间上的任何单股函数求极小值问题,对函数除要求“单谷”外不做其他要求,甚至可以不连续因此,这种方法的适应面非常广 黄金分割法也是建立在区间消去法原理基础上的试探方法,即在搜索区间[a ,b] 内适当插入两点 a1,a2,并计算其函数值 a1,a2将区间分成三段,应用函数的单谷性质,通过函数值大小的比较,删去其中一段,是搜索区间得以缩小然后再在保留下来的区间上作同样的处理,如此迭代下去,是搜索区间无限缩小,从而得到极小点的数值近似解〔2〕 黄金分割法的基本原理一维搜索是解函数极小值的方法之一, 其解法思想为沿某一已知方向求目标函数的极小值点 一维搜索的解法很多, 这里主要采用黄金分割法〔法〕该方法用不变的区间缩短率代替斐波那契法每次不同的缩短率,从而可以看成是斐波那契法的近似,实现起来比较容易,也易于人们所接受精选学习资料 - - - - - - - - - 名师归纳总结 - - - - - - -第 1 页,共 11 页 黄金分割法是用于一元函数f(x) 在给定初始区间 [a,b] 内搜索极小点α *的一种方法。

它是优化计算中的经典算法,以算法简单、收敛速度均匀、效果较好而著称,是许多优化算法的基础,但它只适用于一维区间上的凸函数[6],即只在单峰区间内才能进行一维寻优,其收敛效率较低其基本原理是:依照“去劣存优”原则、对称原则、以及等比收缩原则来逐步缩小搜索区间[7]具体步骤是:在区间 [a,b]内取点: a1 ,a2 把[a,b] 分为三段如果 f(a1)>f(a2),令a=a1,a1=a2,a2=a+r*(b-a);如果 f(a1)=y2 a=a1 a1=a2 y1=y2 b=a2 a2=a1 y2=y1 a2=a+r*(b-a) y2=f(a2) a1=b-r*(b-a) y1=f(a1) |(b-a)/b|<ε和|〔y2-y1 〕/y2 | <ε?a*=(a+b)/2 结束是否是精选学习资料 - - - - - - - - - 名师归纳总结 - - - - - - -第 4 页,共 11 页 #include 《》#include 《》#define f(x) x*x+2*x double 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(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; 精选学习资料 - - - - - - - - - 名师归纳总结 - - - - - - -第 5 页,共 11 页 scanf("%lf %lf %lf",&a,&b,&e); s=calc(&a,&b,e,&n); printf("a=%lf,b=%lf,s=%lf,n=%d\n",a,b,s,n); } 5 程序运行结果如下列图:2 进退法〔1〕算法原理进退法是用来确定搜索区间〔包含极小值点的区间〕的算法,其理论依据是:( )f x为单 谷 函 数 〔 只 有 一 个 极 值 点 〕 , 且[ , ]a b为 其 极 小 值 点 的 一 个 搜 索 区 间 , 对 于 任 意12,[ , ]x xa b, 如果12fxfx, 则2[ ,]a x为极小值的搜索区间,如果12fxfx,精选学习资料 - - - - - - - - - 名师归纳总结 - - - - - - -第 6 页,共 11 页 则1[, ]x b为极小值的搜索区间。

因此,在给定初始点0x,及初始搜索步长h的情况下, 首先以初始步长向前搜索一步,计算0fxh1)如果00fxfxh则可知搜索区间为0[ ,]x xh,其中x待求,为确定x,后退一步计算0()f xh,为缩小系数,且01,直接找到合适的*,使得*00()f xhfx,从而确定搜索区间*00[,]xh xh2)如果00fxfxh则可知搜索区间为0[, ]xx,其中x待求,为确定x,前进一步计算0()f xh,为放大系数,且1,知道找到合适的*,使得*00()fxhf xh,从而确定搜索区间*00[,]xxh进退法求极值基本思想:对 f ( x) 任选一个初始点x1及初始步长h0, 通过比较这两点函数值的大小,确定第三点位置,比较这三点的函数值大小,确定是否为“高—低—高”形态算法原理1. 试探搜索:选定初始点x1, x2= x1+ h0,计算y1= f(x1),y2=f(x2) 〔a〕如 y1>y2, 转 2 向右前进;〔b〕如 y1y3,令 x1=x2,y1=y2;x2=x3,y2=y3;h=2h重新构造新点x3=x2+h,并比较 y2、y3的大小,直到y2

令 h=-h0,令 x3=x1,y3=y1;x1=x2,y1=y2;x2=x3,y2=y3;h=2h;产生新点x3= x2+ h;〔a〕如 y2y3,令 x1=x2,y1=y2; x2=x3, y2=y3;h=2h重新构造新点x3=x2+h,并比较y2、y3的大小,直到y2

调用格式:[min,max]min( , 0, 0,)xxJT f xheps其中,f:目标函数;0x:初始点;0h:初始步长;eps:精度;min x:目标函数取包含极值的区间左端点;maxx:目标函数取包含极值的区间又端点进退法的 MATLAB程序代码如下:function [minx,maxx]=minJT(f,x0,h0,eps) %目标函数 :f; %初始点 :x0; %初始步长 :h0; %精度 :eps; %目标函数取包含极值的区间左端点:minx; %目标函数取包含极值的区间又端点:maxx; format long; if nargin==3 eps=1.0e-6; end x1=x0; k=0; h=h0; while 1 x4=x1+h; %试探步精选学习资料 - - - - - - - - - 名师归纳总结 - - - - - - -第 9 页,共 11 页 k=k+1; f4=subs(f,findsym(f),x4); f1=subs(f,findsym(f),x1); if f4

下载提示
相似文档
正为您匹配相似的精品文档