
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的第三方库,需要单独安装):

诚然,我们也直接用上面的方法求解线性方程组。