1、 最优化方 法 题 目: 斐波那契法分析与实现 院 系: 信息与计算科学学院 专 业: 统计学 姓名学号: 小熊熊 11071050137 指导教师: 大胖胖 日 期: 2014 年 01 月 10 日
2、 摘 要 科学的数学化是当代科学发展的一个主要趋势,最优化理论与算法是一个重 要的数学分支,它所研究的问题是讨论在众多的方案中什么样的方案最优以及怎 样找出最优方案. 一维搜索是指寻求一元函数在某个区间上的最优点的方法.这类方法不仅有 实用价值,而且大量多维最优化方法都依赖于一系列的一维最优化.本文就斐波 那契法的一维搜索进行了详细的分析,并且成功的用 MATLAB 实现了斐波那契法 求解单峰函数的极小值问题. 斐波那契法的一维搜索过程是建立在一个被称为斐波那契数列的基础上进 行的,斐波那契法成功地实现了单峰函数极值范围的缩减.从理论上来说,斐波 那契法的精度比黄金
3、分割法要高.但由于斐波那契法要事先知道计算函数值的次 数,故相比之下,黄金分割法更为简单一点,它不需要事先知道计算次数,并且 当 n ³ 7 时,黄金分割法的收敛速率与斐波那契法越来越接近.因此,在实际应用 中,常常采用黄金分割法. 斐波那契法也是一种区间收缩算法,和黄金分割法不 同的是:黄金分割法每次收缩只改变搜索区间的一个端点,即它是单向收缩法. 而斐波那契法同时改变搜索区间的两个端点,是一种双向收缩法. 关键字:一维搜索 斐波那契法 单峰函数 黄金分割法 MATLAB Abstract Mathematical
4、 sciences is a major trend in contemporary scientific development, optimization theory and algorithms is an important branch of mathematics, the problems it was discussed in numerous research programs in the best of what programs and how to find the optimal solution . One-dimensional search is the
5、best method of seeking functions of one variable on the merits of a certain interval. Such methods not only have practical value, but also a large number of multi-dimensional optimization methods rely on a series of one-dimensional optimization article on Fibonacci the one-dimensional search
6、 method carried out a detailed analysis, and successful in MATLAB Fibonacci method for solving unimodal function minimization problem. Fibonacci method of one-dimensional search process is based on the Fibonacci sequence is called a Fibonacci conducted on, Fibonacci metho
7、d successfully achieved a unimodal function extreme range reduction. Theory , Fibonacci method accuracy is higher than the golden section method, but the number of times due to the Fibonacci method to calculate function values to know in advance, so the contrast, the golden section
8、method is more simply, it does not need to know in advance the number of calculations and at that time, the rate of convergence of golden section and the Fibonacci method getting closer, so in practical applications, often using the golden section method. Fibonacci method is also a range contraction
9、 algorithm, and the golden section method the difference is: golden section each contraction only one endpoint to change the search range that it is unidirectional shrinkage law Fibonacci search method while changing the two endpoints of the range, is a two-way contraction method. Key words:
10、 one-dimensional search Fibonacci method unimodal function Golden Section function MATLAB 目 录 1.前言……………………………………………………………………1 1.1 一维搜索………………………………………………………………………1 1.2 单峰函数………………………………………………………………………1 1.3 单峰函数的性质………………………………………………………………1 2.斐波那契法分
11、析………………………………………………………2 2.1 区间缩短率……………………………………………………………………2 2.2 斐波那契数列…………………………………………………………………3 2.3 斐波那契法原理………………………………………………………………3 2.4 斐波那契法与黄金分割法的关系……………………………………………6 3.斐波那契法实现………………………………………………………7 3.1 斐波那契算法步骤……………………………………………………………7 3.2 斐波那契法的 MATLAB 程序…………………………………………
12、…………8 3.3 斐波那契算法举例 ………………………………………………………… 10 4.课程设计总结 ………………………………………………………12 4.1 概述 …………………………………………………………………………12 4.2 个人心得体会 ………………………………………………………………12 5.参考文献 ……………………………………………………………13 1. 前言 一维搜索是指寻求一元函数在某区间上的最优值点的方法.这类方法不仅有 实用价值,而且大量多维最优化方法都依赖于一系列的一维最优化. 斐波
13、那契法的一维搜索过程是建立在一个被称为斐波那契数列的基础上进 行的.从理论上来说,斐波那契法的精度比黄金分割法要高.但由于斐波那契法要 事先知道计算函数值的次数,故相比之下,黄金分割法更为简单一点,它不需要 事先知道计算次数,并且当 n ³ 7 时,黄金分割法的收敛速率与斐波那契法越来 越接近.因此,在实际应用中,常常采用黄金分割法. ·1.1 一维搜索 很多迭代下降算法具有一个共同点,即得到点 x k 后,需要按某种规则确定 一个方向 d k ,再从 x k 出发,沿着方向 d k 在直线或射线上寻求目标函数的极小点, 进而得到 x k 的后继点 x k +1 .重复上面的做法,直至
14、求得问题的解.这里所谓求目标 函数在直线上的极小点,称为一维搜索或线性搜索. ·1.2 单峰函数 定义 1.2.1 设 f 是定义在闭区间[a, b]上的一元实函数,x* 是 f 在[a, b]上的极小 11 * 点,对 "x1 , x2 Î [a, b] 且 x1 < x2 ,当 x2 £ x 时, f (x1 ) > f (x2 ) ,当 x* £ x 时, 1 f (x2 ) > f (x1 ) ,则称 f 是闭区间[a, b]上的单峰函数. ·1.3 单峰函数的性质 单峰函数具有很重要的性质:通过
15、计算闭区间[a, b]内两个不同点处的函数 值,就能确定一个包含极小点的子区间.这也是斐波那契法的理论基础. 为了后面分析的方便,先证明下面的定理,这个定理是斐波那契方法的理论 基础. 定理 1.3.1 设 f 是闭区间 [a, b] 上的单峰函数, x1 , x2 Î [a, b] ,且 x1 < x2 .如果 f (x1 ) > f (x2 ) , 则 对 "x Î [a, x1 ] , 有 f (x) > f (x2 ) ; 如 果 f (x1 ) £ f (x2 ) , 则 对 "x Î [x2 , b],有 f (x) ³ f
16、 (x1 ) . 证明:(反证法)先证第一种情形.假设当 f (x1 ) > f (x2 ) 时, ,使得 f () £ f (x2 ) . (1.3.1.1) 显然 x1 不是极小点.这时有两种可能性,要么极小点 x Î [a, x1 ),要么 x Î (x1 , b] . 当 Î [a, x1 )时,根据单峰函数的定义,有 f (x2 ) > f (x1 ) . (1.3.1.2) 这与假设矛盾. 当 Î (x1 , b]时,根据单峰函数的定义,有 f () > f (x ) . 1
17、 (1.3.1.3) 由于假设 f (x1 ) > f (x2 ) ,因此(1.3.1.3)式与(1.3.1.1)式相矛盾.综上可知,当 f (x1 ) > f (x2 ) 时,对"x Î [a, x1 ],必有 f (x) > f (x2 ) . (1.3.1.4) 同理可以证明第二种情形. * 证毕. 根据上面的定理知:只需选择两个试探点,就可以将包含极小点的区间缩短. 事实上,如果 f (x1 ) > f (x2 ) ,则 x Î [x1 , b] ;如果 f (x1 ) £ f (x
18、2 ) ,则 x* Î [a, x ]. 2 这就是斐波那契法的理论基础. 2. 斐波那契法分析 斐波那契法的一维搜索过程是建立在一个被称为斐波那契数列的基础上进 行的.在此之前,有必要知道区间缩短率以及斐波那契数列的概念. ·2.1 区间缩短率 定义 2.1.1 在逐次缩短区间时,设 称tk (k = 1,2,× × ×) 为区间缩短率. 对于上面的tk 不外乎两种情况,要么tk = c ,要么tk ¹ c ( c 为常数).第一种 情况就可以引入前面提到的黄金分割法,第二种情况就是下面要分析的斐波那契 法. ·2.2
19、 斐波那契数列 斐波那契数列是 13 世纪,由意大利的数学家列昂纳多·斐波那契(Leonardo Fibonacci)提出的,当时和兔子的繁殖问题有关,它是一个很重要的数学模型. 斐波那契数列,又被称为“黄金分割数列”,它指的是这样的一个数列:数列的 第一个和第二个数都为 1,接下来每个数都等于前面两个数的和. 在数学上,斐波那契数列有如下的递归定义: 故,斐波那契数列如表 2.2.1 所示. 表 2.2.1 斐波那契数列表 n 0 1 2 3 4 5 6 7 8 9 … Fn 1 1 2 3 5 8 13 21
20、 34 55 … 斐波那契数列的通项公式(又称为“比内公式”)如下: 此时 2.3 斐波那契法原理 在定义2.1.1中,若,可取.其中满足斐波那契数列的递推关系。 斐波那契法成功地实现了单峰函数极值范围的缩减.现设某一单峰函数 在闭区间[a,b]上有一极小点,则在此区间内任意取两点,使得 分别计算其函数值可能出现的以下两种情况: (1) (2) 可以看出,只要在闭区间[a, b]内任意取两点 a1 和b1 (a1 < b1 ),再计算其函数 值加以比较,就可以把区间[a, b]缩短成[a, b1 ] 或[a1 , b].若要继续缩短搜索
21、区间, 只需要在前一次区间内再取一点算出其函数值并与 f (a1 ) 或 f (b1 ) 加以比较即可. 因此,计算函数的次数越多,搜索区间就会缩得越小,即区间的缩 短率与函数的计算次数有关.下面分析如何确定试探点. 假设第 k 次试探前的区间为[ak -1 , bk -1 ],试探点为 pk 、 qk , n 为达到预定精度需 要计算函数的次数,则有: 现在先证明用(2.3.1)和(2.3.2)计算试探点时,第k次迭代区间长度的缩短率为: 分别考虑一下两种情形: (1) ⑵当 f ( pk ) £f (qk ) 时,令 ak +1 = ak , bk +1
22、 = qk ; 从上面的结果可以看出,不论哪种情形,区间缩小的比例都是一样的. 利用上述比值,可以计算出经 n - 1 次迭代 (k = n - 1) 所得到的区间长度. 由此可知,只要给定初始区间的长度b1 - a1 和精度要求e,就可以求出计算 函数值的次数 n .令b - a £ e,即 ,故可以推出: 故先用(2.3.3)式计算出斐波那契数 Fn ,再根据 Fn 确定计算函数值的次数 n . 由于第一次迭代需计算两个试探点,以后每次计算一个.因此,经过 n - 1 次 迭代就计算完 n 个试探点.注意,在第 n - 1 次迭代中并没有
23、选择新的试探点.根据 (2.3.1)式和(2.3.2)式,必有 又因为 pn-1和qn-1 中的一个取自第 n - 2 次迭代中的试探点.为了在第 n - 1 次迭代 中能够缩短不确定区间,可以在第 n - 2 次迭代之后(此时,已确定 pn-1 = qn-1 ), 在 pn-1 的左边或右边取一点令: ·2.4 斐波那契法与黄金分割法的关系 斐波那契法也是一种区间收缩算法,和黄金分割法不同的是:黄金分割法每 次收缩只改变搜索区间的一个端点,即它是单向收缩法.而斐波那契法同时改变 搜索区间的两个端点,是一种双向收缩法. 可以证明,黄金分割法可作为
24、斐波那契法的极限形式. 斐波那契数列的递推关系为 Fk +1 = Fk + Fk -1 , (2.4.1) 其特征方程为 l2 - l- 1 = 0 , (2.4.2) 解(2.4.2)式,可以得到两个根 (2.4.3) 满足递推关系(2.4.1)的一般解是
25、 (2.4.4) 又因为 F0 = F1 = 1 ,故 因此有: 很明显,这个极限值恰好是黄金分割法中的参数a. 所以,从理论上来说,斐波那契法的精度比黄金分割法要高.斐波那契法的 缺点是要事先求出计算函数值的次数.相比之下,黄金分割法来得更简便一点, 它不需要事先知道计算次数,而且收敛速率与斐波那契法比较接近,当 n ³ 7 时, 有 因此,在实际应用中,一般采用黄金分割法. 3. 斐波那契实现 通过对上面的斐
26、波那契法的原理进行分析之后,可以写出斐波那契算法的步 骤如下: ·3.1 斐波那契算法步骤 用斐波那契法求无约束问题 min f (x), x Î R 的基本算法步骤如下: ⑴选定初始区间和精度要求e > 0 ,利用下式 求出计算函数值的次数 n .并设d > 0 .接着由下式 计算试探点 p1和q1 .令 k = 1 . ⑵如果 f ( pk ) > ⑶令 f (qk ),转⑶;否则转⑷
27、 若 k = n - 2 ,则转⑹;否则转⑸. ⑷令 若 k = n - 2 ,则转⑹;否则转⑸. ⑸令 k = k + 1,转⑵. ⑹令 pn = pn-1 , qn = pn-1 + d,计算 f ( pn )和f (qn ) .若则令 否则令 停止计算,极小点 ·3.2 斐波那契法的 MATLAB 程序 用
28、 MATLAB 编写斐波那契法程序如下所示: function [x,minf] = minFBNQ(f,a,b,delta,eps) format long; if nargin==4 %输入参数的个数 eps=1.0e-6; end F=ones(2,1); %产生一个2行1列值全为1的矩阵 N=(b-a)/eps; c=F(2)-N; n=2; while c<0 %求出计算函数值的次数n n=n+1; F(n)=F(n-1)+F(n-2); c=F(n)-N; end p=a+F(n-2)*(b-a)/F(n); %p和q为试探点 q=a+F(n-1)*(b-a
29、)/F(n); k=1; while 1 fp=subs(f,findsym(f),p); %fp和fq为试探点的函数值 fq=subs(f,findsym(f),q); if fp>fq a=p; %第一种情况,改变区间的左端点 p=q; q=a+F(n-k-1)*(b-a)/F(n-k); %缩短搜索区间 if(k==n-3) break; else k=k+1; end else b=q; %第二种情况,改变区间的右端点 q=p; p=a+F(n-k-2)*(b-a)/F(n-k); %缩短搜索区间 if(k==n-3) break; else k=k
30、1; end end end if k==100000 disp('未找到最小值!'); x=NaN; minf=NaN; %not a number! return; end q=p+delta; fp=subs(f,findsym(f),p); fq=subs(f,findsym(f),q); if fp>fq a=p; else b=p; end x=(a+b)/2; minf=subs(f,findsym(f),x); format short; end 调用格式:[x, min f ] = min FBNQ( f , a,
31、 b, delta, eps) . 符号说明: x …………目标函数取最小值时的自变量; min f ……目标函数的最小值; f …………目标函数; a …………极值区间左端点; b …………极值区间右端点; delta ………算法结束参数; eps ………精度; ·3.3 斐波那契算法举例 现在,用上面的 MATLAB 程序求解两个一维搜索问题,并进行验证. 问题一:试用斐波那契法求函数 f (x) = 3x 2 - 12x + 10 的极小点,要求缩短后的区 间不大于初始给定的区间[1,4]的 0.05 倍. 解:在 MATLAB 窗口输入如下命令
32、 >> syms x; >> f=3*x^2-12*x+10; >> [x,minf]=minFBNQ(f,1,4,0.05) 运行结果为 x = 2.0000 minf = -2.0000 >> 下面用数学分析的方法来验证所求结果的正确性: 因为 f (x) = 3x 2 - 12x + 10 是二次函数,将其配方后可得 f (x) = 3(x - 2)2 - 2 . 对称轴为直线 x = 2 .由于 x = 2 Î [1,4],抛物线的开口向上,故在顶点处取得极小 值(也是最小值).顶点的纵坐标 y = -2 即为函
33、数 f (x) = 3x 2 - 12x + 10 在区间[1,4] 上的极小点.证毕. 因此,这个结果和用 MATLAB 求解的结果是一致的.说明了斐波那契法的正确 性. 问题二:用斐波那契法求解下列问题 min f (x) = 2x 2 - x - 1 . 初始区间为[- 1,1],精度要求e £ 0.16 . 解:在 MATLAB 窗口输入如下命令 >> syms x; >> f=2*x^2-x-1; >> [x,minf]=minFBNQ(f,-1,1,0.16) 运行结果为 x = 0.2500 minf = -
34、1.1250 >> 下面用数学分析的方法验证所求结果的正确性: 二次函数的对称轴抛物线的开口向上故在顶点处取得最小值.顶点纵坐标为即为函数 在区间[-1,1]上的极小点(也是最小点).证毕 所以,跟上一个问题的结论一样,这个结果证明了斐波那契法的正确性. 4. 课程设计总结 ·4.1 概述 最优化理论与算法是一个重要的数学分支,它所研究的问题是讨论在众多的 方案中什么样的方案最优以及怎样找出最优方案.求解最优问题是一个艰难而具 有挑战性的过程,最优化方法涵盖了无约束最优化问题、凸集与凸函数、等式约 束最优化问题和不等式约束最优化问题等知识点.
35、本次课程设计的题目是:斐波那契分析与实现. 斐波那契法的一维搜索过程 是建立在一个被称为斐波那契数列的基础上进行的,斐波那契法成功地实现了单 峰函数极值范围的缩减.从理论上来说,斐波那契法的精度比黄金分割法要高. 但由于斐波那契法要事先知道计算函数值的次数,故相比之下,黄金分割法更为 简单一点,它不需要事先知道计算次数,并且当 n ³ 7 时,黄金分割法的收敛速 率与斐波那契法越来越接近.因此,在实际应用中,常常采用黄金分割法. 斐波 那契法也是一种区间收缩算法,和黄金分割法不同的是:黄金分割法每次收缩只 改变搜索区间的一个端点,即它是单向收缩法.而斐波那契法同时改变搜索区间 的两个端点,是一
36、种双向收缩法. ·4.2 个人心得体会 通过本次课程设计,我知道了一维搜索的概念,深刻理解了单峰函数的定义 和性质.学会了区间缩短率是怎样定义的以及斐波那契数列的定义和性质.在此 基础上,我还深刻理解了斐波那契法进行一维搜索的原理,并且知道了一维搜索 的斐波那契法与黄金分割法的关系,并进行相关证明和验证,增强了说服力.另 外,我成功的实现了斐波那契算法的 MATLAB 程序并用数学分析的理论方法证明 了程序求解的正确性.通过斐波那契的 MATLAB 实现,让我更加熟悉 MATLAB 编程 了,感觉使用 MATLAB 软件求解很多数学问题还是很方便的. 5. 参考文献 [1] 陈宝林.最优化理论与算法[M].北京:清华大学出版社,2005. [2] 董文永,刘进,丁健立,朱福喜.最优化技术与数学建模[M].北京:清华大 学出版社,2010. [3] 张光澄.非线性最优化计算方法[M].北京:高等教育出版社,2005. [4] 龚纯,王正林.精通 MATLAB 最优化计算(第 2 版)[M].北京:电子工业出版 社,2005.






