一维搜索方法的MATLAB实现
姓名: 班级:信息与计算科学 学号: 实验时间: 2014/6/21 一、实验目的:
通过上机利用Matlab数学软件进行一维搜索,并学会对具体问题进行分析。并且熟悉Matlab软件的实用方法,并且做到学习与使用并存,增加学习的实际动手性,不再让学习局限于书本和纸上,而是利用计算机学习来增加我们的学习兴趣。
二、实验背景: 黄金分割法
它是一种基于区间收缩的极小点搜索算法,当用进退法确定搜索区间后,我们只知道极小点包含于搜索区间内,但是具体哪个点,无法得知。
1、算法原理
黄金分割法的思想很直接,既然极小点包含于搜索区间内,那么可以不断
的缩小搜索区间,就可以使搜索区间的端点逼近到极小点。
2、算法步骤
用黄金分割法求无约束问题minf(x),x?R的基本步骤如下:
[a,b](1)选定初始区间11及精度??0,计算试探点: ?1?a1?0.382*(b1?a1) ?1?a1?0.618*(b1?a1)。
f??k??f??k?b?ak??(2)若k,则停止计算。否则当时转步骤(3)。 当f??k??f??k?转步骤(4)。 (3) ?ak?1??k?b?b?k?1k???k?1??k???k?1?ak?1?0.382*(bk?1?ak?1)转步骤(5) (4)
转步骤(5)
(5)令k?k?1,转步骤(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、实验结果(总结/方案)
黄金分割法求解极值实例。用黄金分割法求解下面函数的最小值:
f(t)??t4?t2?2t?5,其中t?[?10,10]
进退法
1. 算法原理
进退法是用来确定搜索区间(包含极小值点的区间)的算法,其理论依据是:f(x)为单谷函数(只有一个极值点),且[a,b]为其极小值点的一个搜索区间,对于任意x1,x2?[a,b],如果f?x1??f?x2?,则[a,x2]为极小值的搜索区间,如果f?x1??f?x2?,则[x1,b]为极小值的搜索区间。
因此,在给定初始点x0,及初始搜索步长h的情况下,首先以初始步长向前搜索一步,计算f?x0?h?。
(1) 如果f?x0??f?x0?h?
则可知搜索区间为[x,x0?h],其中x待求,为确定x,后退一步计算
f(x0??h),?为缩小系数,且0???1,直接找到合适的?*,使得
f(x0??*h)?f?x0?,从而确定搜索区间[x0??*h,x0?h]。 (2) 如果f?x0??f?x0?h?
则可知搜索区间为[x0,x],其中x待求,为确定x,前进一步计算f(x0??h),
?为放大系数,且??1,知道找到合适的?*,使得f?x0?h??f(x0??*h),从