1. 黄金分割法
1.1 黄金分割法简介
黄金分割法适用于单谷函数求极小值问题,且函数可以不连续。黄金分割法是建立在区间消去法原理基础上的试探方法,即在搜索区间
内适当插入两点
、
,并计算其函数值。
、
将区间分成三段。应用函数的单谷性质,通过函数值大小的比较,删去其中一段,使搜索区间得以缩短。然后再在保留下来的区间上作同样的处置,如此迭代下去,使搜索区间无限缩小,从而得到极小点的数值近似解。黄金分割法能使相邻两次都具有相同的缩短率0.618,故黄金分割法又称作0.618法。
1.2 黄金分割法的计算框图
2. 应用MATLAB求解实例
2.1 算法的MATLAB实现
在MATLAB中编程实现的黄金分割法函数为:minHJ。
功能:用黄金分割法求解一维函数的极值。
调用格式:[x,minf]=minHJ(f,a,b,eps)
其中,f:目标函数;
a:极值区间的左端点;
b:极值区间的右端点;
eps:精度;
x:目标函数取最小值时的自变量值;
minf:目标函数的最小值。
2.2 一维搜索方法程序考核题
minf(t)=t4 -5t3+4t2-6t+60
最优解:t*=3.2796,f(t*)=22.6590
2.3 建立MATLAB语言程序
(1) 在M文件编辑器中输入下列MATLAB程序代码:
function [x,minf]=minHJ(f,a,b,eps)
format long;
if nargin==3
eps=1.0e-6;
end
l=a+0.382*(b-a); % 试探点
u=a+0.618*(b-a); % 试探点
k=1;
tol=b-a;
while tol>eps&&k<100000
fl=subs(f,findsym(f),l); % 试探点函数值
fu=subs(f,findsym(f),u); % 试探点函数值
if fl>fu;
a=l; % 改变区间左端点
l=u;
u=a+0.618*(b-a); % 缩短搜索区间
else
b=u; % 改变区间右端点
u=l;
l=a+0.382*(b-a); % 缩短搜索区间
end
k=k+1;
tol=abs(b-a);
end
if k==100000
disp; % 找不到最小值
x=NaN;
minf=NaN;
return;
end
x=(a+b)/2;
minf=subs(f,findsym(f),x);
format short;
(2) 在MATLAB命令窗口中输入:
syms t;
f=t^4-5*t^3+4*t^2-6*t+60;
[x,fx]=minHJ(f,-10,10)
2.4 程序运行结果
x=3.2797 % 极小值点
fx=22.6590 % 在极小值点处的函数值
图2 黄金分割法运算结果
2.5 结果讨论
从以上计算可以看出,利用MATLAB语言程序的求解方法可以满足收敛精度要求,与解析法求解的结果基本一致。
3 参考文献
[1] 孙靖民,梁迎春.机械优化设计(第四版)[M].北京:机械工业出版社,2006.
[2] 龚纯,王正林.精通MATLAB最优化计算[M].北京:电子工业出版社,2009.
[3] 陈玉莲,李俊文.基于MATLAB的黄金分割法的优化设计[J].科技创新导报,2010:510540.