利用MATLAB实现黄金分割法求极值问题-北京理工大学-机械优化设计
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
利用MATLAB 实现黄金分割法求极值问题
姓名:xxx 学号:xxx
(北京理工大学机械与车辆学院车辆工程,北京 100081)
1. 黄金分割法的基本思想
黄金分割法(golden section method )是优化方法中的经典算法,以算法简单、效果显著而著称,是许多优化算法的基础。但它只适用于一维区间[,]a b 上的凸函数。其基本思想是:依照“去坏留好”原则、对称原则以及等比收缩原则,利用序列消去原理,通过不断缩小单峰区间长度,即每次迭代都消去一部分无用区间,使搜索区间不断缩小,来逐步缩小搜索范围,从而不断逼近目标函数极小点的一种优化方法。该方法对函数没有特殊要求,函数甚至可以是不连续的。
在搜索区间[,]a b 内必须按下述规则对称地取1a 和2a 两点:()1a b b a λ=--,()2a a b a λ=+-,1a 和2a 将区间分成三段,其中λ称为区间收缩率,黄金分割法中λ≈0.618,然后计算插入点的函数值。应用函数的单峰性质,通过函数值大小的比较,删去其中一段,使搜索区间得以缩小。然后再在保留下来的区间上作同样的处理,如此迭代下去,是搜索区间无限缩小,从而得到极小点的数值近似解。
黄金分割法程序结构简单,容易理解,但计算效率偏低,较适用于设计变量少的优化问题中的一维搜索。
2.迭代过程和算法流程图
2.1迭代过程
(1) 给定区间[],a b ,并输入0ε>;
(2) 计算10.618(-),20.618(-)a b b a a a b a =-=+;
(3) 判断b a ε-<,若成立,则迭代终止,到最后一步(7);否则,继续;
(4) 若(1)(2)f a f a ≤,转(5),否则转(6);
(5) 令2b a =,21a a =,a1=b-0.618(b-a),转(3);
(6) 令1a a =,12a a =,a2=a+0.618(b-a),转(3);
(7) 得出最优解:*()/2x a b =+,**()y f x =。
2.2算法流程图
黄金分割法的算法流程图如图3-1.
图 3-1 黄金分割法的算法框图
3.利用MATLAB 求解实例
3.1实例
本文以本章课后习题(3.1)为例来练习黄金分割法算法在MATLAB 里的实现。
用黄金分割法求解()(2)f x x x =+的近似极小点*x 及*()f x ,3a =-,5b =,0.01ε=。
程序如下:
(1) 首先建立函数。建立.m 文件,命名为fun_gs.m ,文件内容如下:
function y=fun_gs(x) y=x^2+2*x;
(2) 编写迭代程序主体。建立gs.m 文件,内容如下:
a=-3;
b=5;
eps=0.01;
n=0;
i=100;
a1=b-0.618*(b-a);
a2=a+0.618*(b-a);
y1=fun_gs(a1);
y2=fun_gs(a2);
for k=1:i
if (abs(b-a)<=eps)
y=fun_gs((b+a)/2);
break;
else
if (y1<=y2)
y2=fun_gs(a1);
b=a2;
a2=a1;
a1=b-0.618*(b-a);
y1=fun_gs(a1);
else
y1=fun_gs(a2);
a=a1;
a1=a2;
a2=a+0.618*(b-a);
y2=fun_gs(a2);
end
n=n+1;
end
end
n;x=(a+b)/2;y;
运行程序,结果为:
14
n=迭代次数
* 1.0013
x=-极小值点
* 1.0000
y=-极小值点的函数值
计算结果如图:
图3-2 计算结果(0.01
ε=)3.2实例结果分析
2
()(2)2
f x x x x x
=+=+的最小值为
2
1
22
b
x
a
=-=-=-时取得,此时有
1 y=-。
从上述计算结果可以看出,利用MATLAB实现的黄金分割法,通过14次迭代可以满足收敛精度要求,并且计算结果和理论结果基本一致,误差为
ε=时,即
(1.0013)(1)0.0013
∆=---=,即求得了函数的全局最优解。当0.001
收敛精度缩小为原来1/10,此时再进行一次迭代求解,计算结果如图3-3:
ε=)
图3-3 计算结果(0.001
∆=---=。
迭代次数增加到19次,最优点* 1.0001
x=-,(1.0001)(1)0.0001可见计算精度进一步提高,更加接近理论值。所以,在计算机性能允许的前提下,解决复杂优化问题时可以将收敛精度ε设为一个很小的值,以此来满足精度要求苛刻的工程问题。
由此可见,在MATLAB里编写黄金分割法算法求解最优化问题是有效可行的,具有一定理论及实际应用价值。
参考文献
[1]李志锋。机械优化设计。高等教育出版社。