2.3.3 矩阵分解
尽管我们没有按照一般的线性代数教材那样,从线性方程组开始探讨矩阵,但还是少不了要用到它,毕竟矩阵以及第2.4节探讨的行列式,起初都是为了求解线性方程组。假设有如下线性方程组:
用矩阵表示,则为:
要解此线性方程组,可以使用高斯消元法,其本质就是对系数矩阵进行初等行变换,当然,在实际实施过程中,等号右侧的矩阵要同时变换,即通过增广矩阵的方式变换。此处仅仅演示系数矩阵的初等行变换:
经过三步初等行变换之后,得到一个阶梯形矩阵,而且它还有更特殊的,就是对角线以下的元素都是0,这样的矩阵称为上三角矩阵,言外之意还有下三角矩阵。在这里令,因为U的主元都不等于零,所以可知此线性方程组有唯一解,且系数矩阵是可逆矩阵。
在第2.1.5节中曾经介绍过,如果矩阵左乘一个初等矩阵,就可以实现对应的初等行变换,所以,上述各项行变换,分别对应着如下初等矩阵:
那么,前述初等行变换可以写成:
又因为初等矩阵都是可逆的,所以:
其中,,记录了行变换的过程(即消元的过程),而则代表着行变换的结果(即消元的结果)。再来看矩阵的特点:
矩阵是下三角矩阵,且主对角线的元素都是(称为单位下三角矩阵)。
如果把上面的示例推广,则有如下定义。
定义 将阶方阵表示为两个阶三角矩阵的乘积:
其中是单位下三角矩阵,是上三角矩阵。将这种形式,称为矩阵的分解(LU Matrixde Composition)。
但是,要注意,并非所有的可逆矩阵都可以分解,比如就不能分解成形式(读者可以用上述方法自行检验)。矩阵能够施行分解的必备条件是主对角线上的第一个元素不能为零,如果仍然坚持对刚才所写出的矩阵进行分解,就要先施行行变换,用初等矩阵对矩阵进行行变换:
这样,就可以写成形式了:,又因为,所以:
这样将原本不能写成形式的矩阵,变成了形式。此处的矩阵P称为置换矩阵,这种分解方式则称PLU分解。
从上述或者分解不难看出,通过矩阵分解,将原来的矩阵用比较简单的矩阵表示,这种“化繁为简”的方法,可以简化矩阵的运算,并且在机器学习中还能实现诸如降维等操作。关于矩阵分解的方法,除此处的分解之外,在第3章3.5节还会介绍其他方法。
另外,我们也不难发现,分解的本质就是高斯消元法,而高斯消元法是求解线性方程组的重要方法,因此分解的一个重要用途就是求解线性方程组。
设有线性方程组,并且A是可逆矩阵——注意这个条件,说明此线性方程组有唯一解。如果,则:
(2.3.1)
令,将(2.3.1)式改写为:
这样就将原来的线性方程改写为由两个三角矩阵构成的方程组,特别是在手工计算求解线性方程组的时候,这样做之后就减小了计算量。但是,对于计算机而言,并没有显示出其优势。不过,如果有多个方程组,如,则可以通过或分解减小计算量。
在科学计算专用库SciPy中提供了实现分解的函数lu()(SciPy是Python的第三方库,需要单独安装):
诚然,我们也直接用上面的方法求解线性方程组。