最优化方法(黄金分割与进退法)实验报告
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
一维搜索方法的MATLAB 实现
姓名: 班级:信息与计算科学 学号: 实验时间: 2014/6/21 一、实验目的:
通过上机利用Matlab 数学软件进行一维搜索,并学会对具体问题进行分析。并且熟悉Matlab 软件的实用方法,并且做到学习与使用并存,增加学习的实际动手性,不再让学习局限于书本和纸上,而是利用计算机学习来增加我们的学习兴趣。
二、实验背景: 黄金分割法
它是一种基于区间收缩的极小点搜索算法,当用进退法确定搜索区间后,我们只知道极小点包含于搜索区间内,但是具体哪个点,无法得知。
1、算法原理
黄金分割法的思想很直接,既然极小点包含于搜索区间内,那么可以不断
的缩小搜索区间,就可以使搜索区间的端点逼近到极小点。
2、算法步骤
用黄金分割法求无约束问题min (),f x x R ∈的基本步骤如下:
(1)选定初始区间11[,]
a b 及精度0ε>,计算试探点: 11110.382*()a b a λ=+- 11110.618*()a b a μ=+-。
(2)若k k b a ε
-<,则停止计算。否则当()()k k f f λμ>时转步骤(3)。 当()()k k f f λμ≤转步骤(4)。 (3) 11111110.382*()k k k k k k k k k k a b b a b a λλμμ+++++++=⎧⎪=⎪⎨
=⎪⎪=+-⎩转步骤(5)
(4)
转步骤(5)
(5)令1k k =+,转步骤(2)。
算法的MATLAB 实现
function xmin=golden(f,a,b,e) k=0;
x1=a+0.382*(b-a); x2=a+0.618*(b-a); while b-a>e f1=subs(f,x1); f2=subs(f,x2); if f1>f2 a=x1; x1=x2; f1=f2;
x2=a+0.618*(b-a); else b=x2; x2=x1; f2=f1;
x1=a+0.382*(b-a); end k=k+1; end
xmin=(a+b)/2; fmin=subs(f,xmin)
fprintf('k=\n'); disp(k);
3、实验结果(总结/方案)
黄金分割法求解极值实例。用黄金分割法求解下面函数的最小值:
]10,10[,52)(24-∈+--==t t t t t f 其中
进退法
1. 算法原理
进退法是用来确定搜索区间(包含极小值点的区间)的算法,其理论依据是:()f x 为单谷函数(只有一个极值点),且[,]a b 为其极小值点的一个搜索区间,对于任意12,[,]x x a b ∈,如果()()12f x f x <,则2[,]a x 为极小值的搜索区间,如果()()12f x f x >,则1[,]x b 为极小值的搜索区间。
因此,在给定初始点0x ,及初始搜索步长h 的情况下,首先以初始步长向前搜索一步,计算()0f x h +。
(1) 如果()()00f x f x h <+
则可知搜索区间为0[,]x x h +,其中x 待求,为确定x ,后退一步计算
0()f x h λ-,λ为缩小系数,且01λ<<,直接找到合适的*λ,使得
()*00()f x h f x λ->,从而确定搜索区间*00[,]x h x h λ-+。
(2) 如果()()00f x f x h >+
则可知搜索区间为0[,]x x ,其中x 待求,为确定x ,前进一步计算0()f x h λ+,
λ为放大系数,且1λ>,知道找到合适的*λ,使得()*00()f x h f x h λ+<+,从
而确定搜索区间*00[,]x x h λ+。
2. 算法步骤
用进退法求一维无约束问题min (),f x x R ∈的搜索区间(包含极小值点的区间)的基本算法步骤如下:
(1) 给定初始点(0)x ,初始步长0h ,令0h h =,(1)(0)x x =,0k =; (2) 令(4)(1)x x h =+,置1k k =+;
(3) 若()()(4)(1)f x f x <,则转步骤(4),否则转步骤(5);
(4) 令(2)(1)(1)(4),x x x x ==,()()(2)(1)f x f x =,()()(1)(4)f x f x =,令2h h =,
转步骤(2);
(5) 若1k =,则转步骤(6)否则转步骤(7);
(6) 令h h =-,(2)(4)x x =,()()(2)(4)f x f x =,转步骤(2);
(7) 令(3)(2)(2)(1)(1)(4),,x x x x x x ===,停止计算,极小值点包含于区间
(1)(3)(3)(1)[,][,]x x x x 或
3. 算法的MATLAB 实现
function [A,B]=minJT(f,x0,h0,eps) %目标函数:f; %初始点:x0; %初始步长:h0; %精度:eps;
%目标函数取包含极值的区间的左端点:A; %目标函数取包含极值的区间的右端点:B; format long; if nargin==3; eps=1.0e-6; end x1=x0;
k=0; h=h0; while 1
x4=x1+h;%试探步 k=k+1;
f4=subs(f,findsym(f),x4); f1=subs(f,findsym(f),x1); if f4 h=2*h;%加大步长 else if k==1 h=-h;%反向搜索 x2=x4; f2=f4; else x3=x2; x2=x1; x1=x4; break; end end end A=min(x1,x3); B=x1+x3-A; format short; 例: 取初始点为0,步长为0.1,用进退法求函数22242()(1)(1)325f t t t t t t =-+-+=--+的极值区间。