黄金分割法是一种常用的精确一维搜索。它适用于在已知极值区间的前提下,利用不断缩小区间的思想,最终得出极值的近似值。该方法只要求函数单峰,可以不连续。因此,这种方法的适用范围非常广泛。
黄金分割法也是建立在区间消去法原理基础上的试探方法,即在搜索区间[a,b]内适当插入两点a1、a2,并计算其函数值。a1、a2将原来区间分成三段,再应用函数的单峰性质,通过函数值大小的比较,删除其中一段,使搜索区间得以缩小。然后在保留下来的区间上做同样的处理,如此迭代下去,使搜索区间无限缩小,从而得到极小值点的数值近似解。
黄金分割法是用于一元函数f(x)在给定的初始区间[a,b]内搜索极小值点a∗的一种方法。它是优化计算中的经典算法,以算法简单、收敛速度均匀、效果较好著称,是具许多优化算法的基础。但它只适用于一维区间上的凸函数,即只在单峰区间内才能进行一维寻优,其收敛效率较低。其基本原理是依照去劣存优原则、对称原则及等比收缩原则来逐步缩小搜索区间。黄金分割法的基本步骤如下:
①给定区间[a,b]及eps>0;
②计算r=a+0.382(b-a),u=a+0.618(b-a);
③若f(r)>f(u),则进行下一步,否则,直接进行第⑤步;
④若u-r<eps,则停止计算,输出x∗=u,f∗=f(u),否则,令a=r,r=u,u=a+0.618(b-a),转到第③步;
⑤若u-r<eps,则停止计算,输出x∗=r,f∗=f(r),否则,令b=u,u=r,r=a+0.382(b-a),转到第③步。
根据以上步骤,编写黄金分割算法的MATLAB代码如下:
例5.1 根据黄金分割法编写程序,求函数f(x)=(sinx)6 [tan(1-x)]e30x在区间[0,1]上的极大值。
解:令g(x)=-f(x)=-(sinx)6 [tan(1-x)]e30x,求。
编写函数代码如下:(www.daowen.com)
运行后结果如下:
即,也就是说,f(x)在区间[0,1]上的极大值为-4.108 6e10。
例5.2 求函数ψ x( )=2e-t+et在[1,1]内的极小值。
解:编写函数代码如下:
根据函数和黄金分割算法代码,求解代码如下:
即函数ψ x( )=2e-t+et在[1,1]内的极小值为0.346 6。
例5.3 函数f(x)=x2-2x,给定搜索区间为[-2,6],精度为0.000 1,求此函数的极小值点。
解:编写黄金分割算法代码如下:
再编写主程序MATLAB代码如下:
MATLAB运行得到结果如下:
即函数f(x)=x2-2x在区间[-2,6]上的点x=1处取得极小值-1,一共经历了24次迭代。
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。