无约束问题
三类:
a.只知道 f(x):一维搜索法
b.f(x),▽f(x)已知:梯度法
c…f(x),▽f(x),▽2f(x)已知:牛顿法
a.只知道 f(x)
解法:一维搜索法
条件:f(x)是单峰函数(指定区间内仅有一个极点){分段}
1.算法阐述:
给定初始区间包含极值,随后在保证极值在区间内的条件下缩小区间,直至|a b|区间长度趋向0,则趋向x*(极值)
假设:max f(x) {在(a,b)内}
则性质:(a,x*)上升 (x*,b)下降
缩小区间:对区间内任意两点 x1<x2
比较 f(x1) 和 f(x2),新区间是老区间去掉小的那方的边缘部分
1.if: f(x1) < f(x2) ⇒ 新区间 [x1 , b ]
2.if: f(x1) > f(x2) ⇒ 新区间 [a , x2 ]
3.if: f(x1) = f(x2) ⇒ 新区间 [x1 , x2 ]
2.To get x1 & x2
方法一:二分法
含义:新的x1,x2选在老区间的中点左右各△/2处, △很小
x1(k)=(xR(k-1)+xL(k-1) - △)/2
x2(k)=(xR(k-1)+xL(k-1) + △)/2
设原区间长度 C
这样每次减去的区间长度 = | (C-△)/2 |
c0 =C
c1 = C/2 - △/2
c2 = c1/2 -△/2 = C/4 - △3/4
c3 = C/8 - △7/8
…
cn = C/2n-1 - △(1 - 1/2n-1)
limn->∞ = △
反思:
二分法虽然快速,但是每次都需要计算 f(x1) & f(x2) ,显然计算很复杂
而在刚才的迭代过程中,我们发现始终还有一个点在新区间中,我们不禁思考
如果我们想办法使得新的区间中的x1,x2是原来的某个点,以此来简化运算
从而得到下面的这个方法。
方法二:黄金分割法
我们现在推导黄金分割法的 点迭代式
令 C(k)= xR(k)-xl(k)
x1(k) = xR(k-1) - a C(k-1)
x2(k) = xL(K-1) +a C(k-1)
x1(k+1) = x2(k) - a C(k)
x2(k+1) = xL(K) +a C(k)
_________________________________________________________
XL X1(k) X2(k) XR
______________________________________________
XL X1(k+1) X2(K+1) X2(k)
所以这里我们认为 X1(k)= X2(k+1)
代入上式得:
xR(k-1) - a C(k-1) = xL(K) +a C(k)
化简,结合其他式子得:
a2 + a - 1 = 0
⇒ a = (√ 5 - 1 )/2
所以我们得到了黄金分割的迭代式:
C(k)= xR(k)-xl(k)
a = (√ 5 - 1 )/2 = 0.618
x1(k) = xR(k-1) - a C(k-1)
x2(k) = xL(K-1) +a C(k-1)
x1(k+1) = x2(k) - a C(k)
x2(k+1) = xL(K) +a C(k)
c1 = C
c2 = 0.618 C
c3 = 0.6182 C
…
cn = 0.618n C
limn->∞ = 0
b.知道 f(x),▽f(x)
解法:梯度法
算法阐述: X(k)是初始值,梯度方向▽f(x(k))找下一个点
r为步长
X(r) = X(k) + r ▽f(x(k)) : max
X(r) = X(k) - r ▽f(x(k)) : min