- 一维搜索
Fibonacci法(分数法)
设y=f(t)是区间[a,b]上的下单峰函数(如下图),在此区间内它有唯一极小点t.若在此区间内任取两点c和d,c<d,并计算函数值f(c)和f(d),可能出现以下两种情形:
1. f(c)<f(d),这时极小点t必在区间[a,d]内.
2. f(c)≥f(d),这时极小点t必在区间[c,b]内.
在区间[a,b]内取两个不同的点,算出它们的函数值加以比较,就可以把搜索区间[a,b]缩小成[a,d]或[c,b](缩小后仍包含极小点).只要在[a,d]或[c,b]中再任取一点算出其函数值,并与f(c)或f(d)加以比较,就可以继续缩小搜索区间.只要缩小后的区间仍包含极小点t,则区间缩得越小,就越接近于函数的极小点,但计算函数值的次数也就越多.
在区间[a,b]内取两个不同的点,算出它们的函数值加以比较,就可以把搜索区间[a,b]缩小成[a,d]或[c,b](缩小后仍包含极小点).只要在[a,d]或[c,b]中再任取一点算出其函数值,并与f(c)或f(d)加以比较,就可以继续缩小搜索区间.只要缩小后的区间仍包含极小点t,则区间缩得越小,就越接近于函数的极小点,但计算函数值的次数也就越多.
用Fibonacci法缩短区间的步骤如下
1.确定试点的个数n.根据缩短率δ,即可用式 (6.30)算出Fn,然后由递推公式确定最小的n.
2.选取前两个试点的位置.由递推公式可知,第一次缩短时的两个试点位置是
t1 = b0+(a0- b0) Fn-1/ Fn
t1, = a0 +(b0- a0) Fn-1/ Fn
它们在区间内是对称的.
3.计算函数值f(t1)和f(t1,),并比较它们的大小.
若f(t1)<f(t1,),
则取
a1 =a0 b1=t1, t2,= t1
并令t2= b1+(a1- b1) Fn-2/ Fn-1
否则,
取 a1 = t1 b1=b0 t2= t1,
并令t2 , = a1+(b1 - a1) Fn-2/ Fn-1.
4.计算f(t2)或 f(t2,),如第三步那样一步步迭代.计算的一般公式为
tk= bk-1+(ak-1- bk-1) Fn-k/ Fn-k+1
tk , = ak-1+(bk-1 - ak-1) Fn-k/ Fn-k+1
其中k=1,2,…,n-1.
5.当进行至k=n-1时,
tn-1=tn-1,=1/2 (an-2 +bn-2)
无法比较函数值f(tn-1)和f(tn-1 ,)的大小以确定最后区间,为此 ,取
tn-1=1/2 (an-2 +bn-2)
tn-1,= an-2 +(1/2+ε) (bn-2 - an-2)
(其中ε为任意小的数,在tn-1和tn-1,中以函数值较小者为近似极小点,相应的函数值为近似极小值.)并取得最终区间[an-2 ,tn-1,]或[tn-1, bn-2].
由上述分析可知,Fibonacci使用对称搜索的方法,逐步缩短所考察的区间,它能以尽量少的函数求值次数,达到预定的某一缩短率.
0.618法(黄金分割法)
当用Fibonacci法以n个试点来缩短某一区间时,区间长度的第一次缩短率为Fn-1/ Fn,其后各次分别为
Fn-2/ Fn-1,Fn-3/ Fn-2 ,…,F1/F2