当前位置:文档之家› 0.618法的matlab实现

0.618法的matlab实现

实验报告
实验题目: 0.618法的MATLAB实现学生姓名:
学号:
实验时间: 2013-5-13
一.实验名称: 0.618法求解单峰函数极小点
二.实验目的及要求:
1. 了解并熟悉0.618法的方法原理, 以及它的MATLAB 实现.
2. 运用0.618法解单峰函数的极小点.
三.实验内容:
1. 0.618法方法原理:
定理: 设f 是区间],[b a 上的单峰函数, ] ,[ ,)2()1(b a x x ∈, 且)2()1(x x <. 如果)()()2()1(x f x f >, 则对每一个],[)1(x a x ∈, 有)()()2(x f x f >; 如果)()()2()1(x f x f ≤,
则对每一个] ,[)
2(b x x ∈, 有)()()1(x f x f ≥. 根据上述定理, 只需选择两个试探点, 就可将包含极小点的区间缩短. 事实上, 必有 如果)()()2()1(x
f x f >, 则],[)1(b x x ∈; 如果)()()
2()1(x f x f ≤, 则][)2(x a x ,∈. 0.618 法的基本思想是, 根据上述定理, 通过取试探点使包含极小点的区间(不确定区间)不断缩短, 当区间长度小到一定程度时, 区间上各点的函数值均接近极小值, 因此任意一点都可作为极小点的近似.
0.618 法计算试探点的公式:
).
(618.0),(382.0k k k k k k k k a b a a b a -+=-+=μλ 2. 0.618法的算法步骤:
①置初始区间],[11b a 及精度要求0>L , 计算试探点1λ和1μ, 计算函数值)(1λf 和)(1μf . 计算公式是
).(618.0 ),(382.011111111a b a a b a -+=-+=μλ
令1=k .
②若L a b k k <-, 则停止计算. 否则, 当)()(k k f f μλ>时, 转步骤③; 当)()(k k f f μλ≤时, 转步骤④.
③置k k a λ=+1, k k b b =+1, k k μλ=+1,)(618.01111++++-+=k k k k a b a μ, 计算函数值)(1+k f μ, 转步骤⑤.
④置k k a a =+1, k k b μ=+1, k k λμ=+1,)(382.01111++++-+=k k k k a b a λ, 计算函数值)(1+k f λ, 转步骤⑤.
⑤置1:+=k k , 返回步骤②.
四.实验流程图及其MATLAB 实现:
1. 流程图:
2. 代码及数值算例:
(1) 程序源代码:
function [x,k]=GSe(f,a,b,delta)
% 0.618法求解单峰函数极小点
f=inline(f);
N=10000;
for k=1:N
m=a+0.382*(b-a);
n=a+0.618*(b-a);
if f(m)>f(n)
a=m;
m=n;
else b=n;
n=m;
end
if abs(b-a)<delta
x=0.5*(b+a);break ;
end
end
(2) 数值算例:
12def )(min 2--x x x f ,
初始区间]1,1[],[11-=b a , 精度16.0≤L .
(i) 键入命令:
>> [x,k]=GSe('2*x^2-x-1',-1,1,0.16)
(ii) 运行结果:
x =
0.2229
k =
6
五.总结:
0.618法(黄金分割法)适用于单峰函数, 故应先确定目标函数的单峰区间, 方可进行迭代计算. 但单峰区间不是很明显就能确定, 故可用进退法寻找并确定单峰区间.
六.参考文献:
陈宝林 编著《最优化 理论与算法》 清华大学出版社 2005年10月第2版。

相关主题