利用MATLAB实现黄金分割法求极值问题-北京理工大学-机械优化设计

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 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]李志锋。机械优化设计。高等教育出版社。

相关文档
最新文档