#凸优化
本章我们主要讲解一维的搜索方法,也是最优化理论的一部分,我们怎么在一个区间内找到找到一个极值呢?
我们先来讨论一元单值函数的$f$,在区间$[a,b]$上的极小值点呢?
二分法
二分法是一种利用目标函数的一阶导数来连续压缩区间的方法,计算过程比较简单。
首先,确定初始区间的中点
$$
x=\frac{a+b}{2}
$$
然后计算函数$f$,在x处的一阶导数。
如果$f(x)'>0$说明极小点位于x的左侧,也就是说x是递增的,那么极小点肯定是x的左侧。
依次类推,不断的缩小范围,最终找到我们的极小值点。
牛顿法
首先我们举个例子,求如下函数的极小点,初始值$x_0=0.5$, 精度$\alpha=0.001$,就是两次迭代的结果小于$\alpha$就停止
$$
f(x)=\frac{1}{2}x^2-sinx
$$```
$$f(x)'=x-cosx$$
$$f(x)''=1+sinx$$
```math
$$
x_1=0.5-\frac{0.5-cos0.5}{1+sin0.5}
$$
就是用初始值减去两次导数的比值。
依次类推,就能达到当收敛时候,x的取值是多少。
不难看出,如果使用牛顿法,需要原函数有二阶导数,否则是无法使用的。
当$f(x)''>0$时候,牛顿法是能够逼近极小值点,反之是能够逼近极大值点。
我们可以给出牛顿法的迭代公式
$$
x_k=x-\frac{f(x)'}{f(x)''}
$$
来一个灵魂的拷问
牛顿法为什么能取到以上的效果呢?
牛顿法其实不断的逼近$f(x)$一阶导数为0的点,也就是极值点。
割线法
上文也提到过,牛顿法要求$f(x)$有二阶导数,如果没有二阶导数怎么办呢?
这个时候我们可以采用不同点处的一阶导数对其近似得到。
$$
f(x^k)''=\frac{f(x^k)'-f(x^{k-1})'}{x^k-x^{k-1}}
$$
带入上面的迭代公式,这样我们就还可以使用牛顿法,求极值。
以上描述的就是割线法。
结语
不知道读者发现没有,上面这些找极值的方法,有点像梯度方法,不断迭代逼近最优解,这也就是我们学习这些的理论的必要性,了解为什么这么做。