非线性规划中的割线法(Secant Method)
割线法是一种用于求解一元非线性方程 \(f(x) = 0\) 的经典迭代法。在无约束优化中,找到目标函数 \(F(x)\) 的极值点通常转化为求其导数(梯度)的零点,即求解 \(F'(x) = 0\)。因此,割线法是求解优化问题一阶最优性条件的有效工具,特别适用于导数计算困难或成本高昂的情况。
核心思想:用一条割线(通过当前两个迭代点的直线)来近似目标函数的曲线,并用该割线与横轴的交点作为新的迭代点,逐步逼近真实根。它本质上是牛顿法的近似,用差商代替导数,避免了计算导数的需求。
1. 基本公式与几何直观
假设我们需要求解方程 \(f(x) = 0\)。给定两个初始猜测点 \(x_{k-1}\) 和 \(x_k\),过点 \((x_{k-1}, f(x_{k-1}))\) 和 \((x_k, f(x_k))\) 作一条直线(割线),其斜率为:
\[m_k = \frac{f(x_k) - f(x_{k-1})}{x_k - x_{k-1}} \]
该割线的方程为:
\[y - f(x_k) = m_k (x - x_k) \]
令 \(y = 0\) 解得割线与 \(x\)-轴的交点,即下一个迭代点 \(x_{k+1}\):
\[x_{k+1} = x_k - \frac{f(x_k)}{m_k} = x_k - f(x_k) \cdot \frac{x_k - x_{k-1}}{f(x_k) - f(x_{k-1})} \]
这就是割线法的迭代公式。
几何解释:在每次迭代中,我们用通过最近两点的直线来局部近似函数 \(f(x)\),并用该直线的根来更新估计值。随着迭代进行,如果初始点选择合适,序列 \(\{x_k\}\) 将收敛到 \(f(x) = 0\) 的一个解。
2. 收敛性分析
割线法的收敛速度介于线性收敛和二次收敛之间,称为超线性收敛,其收敛阶约为 \(\frac{1+\sqrt{5}}{2} \approx 1.618\)(黄金比例)。这比二分法(线性收敛)快,但通常比牛顿法(局部二次收敛)慢。
收敛条件:
- 函数 \(f(x)\) 在根 \(x^*\) 附近连续可微。
- 初始点 \(x_0, x_1\) 需要足够靠近真实根 \(x^*\)。
- \(f'(x^*) \neq 0\)(即根是单根)。
由于割线法不计算导数,对初始点的选择比牛顿法更敏感,但比牛顿法更节省计算量(尤其当导数计算复杂时)。
3. 在优化中的应用:求驻点
在无约束优化问题 \(\min F(x)\) 中,一阶必要条件是 \(F'(x) = 0\)。因此,我们可以直接对 \(f(x) = F'(x)\) 应用割线法来寻找驻点。
步骤:
- 计算目标函数的导数 \(f(x) = F'(x)\)(解析式或数值差分)。
- 选择两个初始点 \(x_0, x_1\),计算 \(f(x_0), f(x_1)\)。
- 迭代更新:\(x_{k+1} = x_k - f(x_k) \cdot \frac{x_k - x_{k-1}}{f(x_k) - f(x_{k-1})}\)。
- 当 \(|x_{k+1} - x_k| < \epsilon\) 或 \(|f(x_{k+1})| < \epsilon\) 时停止,输出 \(x_{k+1}\) 作为近似驻点。
优点:无需计算二阶导数(即 \(F''(x)\)),适合导数容易获得但二阶导数复杂的问题。
4. 割线法的变体:抛物线法(二次插值)
割线法本质是线性插值求根。其自然推广是抛物线法(或二次插值法),它通过三个点构造二次多项式来近似函数,并取二次函数的一个根作为新迭代点。抛物线法通常收敛更快(收敛阶约1.839),但需要处理复数根的选择问题。
5. 多维推广:拟牛顿法
在一元函数中,割线法用差商近似导数。在多维优化问题 \(\min F(\mathbf{x})\) 中,对应的是用差商近似海森矩阵(二阶导数矩阵)。这类方法称为拟牛顿法(如BFGS、DFP算法),它们用割线条件(secant condition)来迭代更新海森矩阵的近似,从而避免了直接计算二阶导数。因此,拟牛顿法可视为割线法在多维空间的推广。
6. 优缺点总结
优点:
- 不需要计算导数(或只需一阶导数,无需二阶导数)。
- 收敛速度超线性,比二分法快。
- 每次迭代只需计算一个函数值(若保存前一次值)。
缺点:
- 需要两个初始点,且对初始点敏感。
- 不保证全局收敛,可能发散或不收敛到最近根。
- 对于重根(\(f'(x^*) = 0\))收敛速度会降为线性。
总结:割线法是一种简单而高效的一维求根方法,在优化中用于寻找驻点。其核心思想是用差商近似导数,避免了牛顿法对二阶导数的需求。理解割线法是学习更复杂的拟牛顿法和高维优化技术的重要基础。