前言
还记得第二章提出的矩阵分解的方法适用于解决中小型稠密矩阵的结论,那么面对大型稀疏矩阵该怎么解决呢?SOR迭代法是解大型稀疏线性方程组的有效方法,但是需要选取使用的松弛因子,后来出先的共轭梯度法是解大型稀疏线性方程组的理想方法之一,经过适当改进还可用于解病态线性方程组。
一、问题引入
共轭梯度法(conjugate gradient method, CG)是以共轭方向(conjugate direction)作为搜索方向的一类算法。
共轭梯度法是由Hesteness和Stiefel于1952年为求解线性方程组而提出的。后来用于求解无约束最优化问题,它是一种重要的数学优化方法。
传统的解线性方程组
由此,对
重要的点在于如何确定方向和步长。这里提出的第一种方法就是最速下降法,基于解析函数的梯度信息更新。下面我们详细了解一下最速下降法。
二、最速下降法
最速下降法基于梯度,我们都知道梯度方向代表函数增长最快的方向,那么负梯度方向就是下降最快的方向,也就是最陡峭的方向,我们沿该方向更新参数,效果一定是最好的。因此,对我们的无约束最优化公式
步长:寻求步长就是希望一步跨到最优解,那么
下面给出算法流程以及收敛定理
- 最速下降法相邻两步的方向是垂直的
-
与分别是模最大和最小的特征值,当两者想相差很大时,收敛很慢,当两者相差很小时,收敛速度很快。当r很小的时候,由于舍入误差的影响,会出现计算不稳定的现象,所以在实际计算中很少使用最速下降法。
下面看一下最速下降法的几何意义
最速下降法的问题在于只关注当前最大利益,没有全局意识,为了克服这个缺点提出了共轭梯度法。
三、共轭梯度法(CG法)
共轭梯度法同时考量上一步和当前方向
这样我们就得到了共轭梯度法的基本流程,下面给出算法流程。
使用共轭梯度法更新的几何示例如下
总结
至此为止,我们对于共轭梯度法的介绍已经完成了,利用共轭梯度法可以对很多问题良好的求解。共轭梯度法的介绍仅涉及计算过程以及简单的几何理解,具体的证明过程有兴趣可以参考专业的资料深入研究,上面的知识对使用共轭梯度法解决线性方程组的求解问题已经足够。
这是涉及矩阵相关知识的最后一部分内容,接下来会涉及数值计算内容,下一讲将介绍插值与逼近问题。