最优化算法实验报告(附Matlab程序)
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
最优化方法(Matlab)实验报告
——Fibonacci 法
一、实验目的:
用MATLAB 程序实现一维搜索中用Fibonacc 法求解一元单峰函数的极小值问题。二、实验原理:
(一)、构造Fibonacci 数列:设数列{}k F ,满足条件:
1、011F F ==
2、11
k k k F F F +-=+则称数列{}k F 为Fibonacci 数列。(二)、迭代过程:
首先由下面的迭代公式确定出迭代点:
1
1
1
(),1,...,1(),1,...,1n k k k k k n k n k
k k k k n k F a b a k n F F u a b a k n F λ---+--+=+
-=-=+
-=-易验证,用上述迭代公式进行迭代时,第k 次迭代的区间长度缩短比率恰好为
1
n k
n k F F --+。故可设迭代次数为n ,因此有11121211221111223231
()()......()()n n n n n n n n n
F F F F F F b a b a b a b a b a F F F F F F F ------=
-=⨯-==⨯-=-若设精度为L ,则有第n 次迭代得区间长度111
()n n n
b a L
b a L
F -≤-≤,即
就是
111
()n
b a L F -≤,由此便可确定出迭代次数n 。
假设第k 次迭代时已确定出区间[,]k k a b 以及试探点,[,]k k k k u a b λ∈并且k k u λ<。计算试探点处的函数值,有以下两种可能:(1)若()()k k f f u λ>,则令
111111111,,()()
()
k k k k
k k k k n k k k k k n k
a b b f f F
a b a F λλμλμμ++++--++++-=====+-计算1()k f μ+的值。(2)()()k k f f u λ≤,则令
111121111,,()()
()
k k k k
k k k k n k k k k k n k
a a
b f f F
a b a F μμλμλλ++++--++++-=====+-计算1()k f λ+的值。
又因为第一次迭代确定出了两个迭代点,以后每迭代一次,新增加一个迭代点,这样在迭代n-1后便计算完了n 个迭代点。因此第n 次迭代中,选用第n-1次的迭代点以及辨别常数δ构造n λ和n μ:
1
1n n n n λλμλδ
--==+再用同样的方法进行判断:(1)、若()n f λ>()n f μ则令
1
n n n n a b b λ-==(2)、若()n f λ<=()n f μ则令
1n n n n
a a
b μ-==这样便可确定出最优解的存在区间[,]n n a b 。
三、实验步骤:
(1)给定初始区间11[,]a b 和期望达到的精度L ,求迭代次数n ,使得
11
n b a F L
-≥
置判别系数0δ>,计算试探点11u λ 和 ,其中
2
1111()n n
F a b a F λ-=+
-1
1111()n n
F u a b a F -=+
-计算函数值11()()f f u λ和,置k =1;
(2)若()()k k f f u λ>,则转(3);若()()k k f f u λ≤,则转(4);(3)令1111,,,()()k k k k k k k k a b b u f f u λλλ++++====,计算试探点1k u +,
1
1111()n k k k k k n k
F u a b a F --++++-=+
-若k =n -2,则转步骤(5);否则,计算1()k f u +,置k=k+1,转步骤(2);(4)令1111,,,()()k k k k k k k k a a b u u f u f λλ++++====,计算1k λ+,
2
1111()n k k k k k n k
F a b a F λ--++++-=+
-若k =n -2,则转步骤(5);否则,计算1()k f λ+,置k=k+1,转步骤(2);(5)令11,n n n n u λλλδ--==+,计算()()n n f f u λ和若()()n n f f u λ>,则令1,n n n n a b b λ-==若()()n n f f u λ≤,则令
1,n n n n
a a
b λ-==停止计算,极小点含于[,]n n a b 。四、算法流程图
五、用MATLAB 程序实现,并计算一个例题。(程序见附录)例题:用Fibonacci 法求解问题
2min ()1
def
f x t t =-+设初始区间11[,][1,1]a b =-,精度L=0.001,辨别常数0.0001δ=六、实验结果:
函数图像及迭代点变动图像如下图所示:
y=t 2-t+1
由运行结果看出,迭代进行18次便达到期望的精度,其迭代点序列向量如下:
a=[-1.0000
-0.23610.23610.23610.41640.41640.41640.45900.48530.48530.49530.49530.49530.49770.49920.49920.49960.4996];b=[1.0000
1.0000 1.00000.70820.70820.59670.52790.52790.52790.51160.51160.50540.50160.50160.50160.50060.50060.5001];r=[-0.23610.23610.52790.41640.52790.48530.4590
0.4853
0.5016
0.49530.50160.4992