Mathematics for Machine Learning--学习笔记(解线性方程组)

1.3 Solving Systems of Linear Equations(解线性方程组)

  之前我们已经学会了线性方程组的矩阵表示,并且定义了矩阵的加法乘法等运算。接下来咱们就致力于解线性方程组并且提供一个求逆矩阵的算法。

1.3.1 Particular and General Solution(特解和通解)

  研究特解通解之前啊,先举个栗子,说一下,这其中的关系。这本书还是很透彻的,之前一直没理解到位,这么一看就有一种拨开云雾见日明的感觉。
[ 1 0 8 − 4 0 1 2 12 ] [ x 1 x 2 x 3 x 4 ] = [ 42 8 ] (1.3.1) \left[ \begin{matrix} 1 & 0 & 8& -4\\ 0 & 1 & 2 &12 \end{matrix} \right] \left[ \begin{matrix} x1\\x2\\x3\\x4 \end{matrix} \right]=\left[ \begin{matrix} 42\\8 \end{matrix} \right] \tag{1.3.1} [100182412]x1x2x3x4=[428](1.3.1)
  看上面这个例子。这个例子很简单,两个方程式四个未知数,总的来说就是让左边每一列对应的乘以右边每一行,找出一组x1~x4的取值得出 [ 42 8 ] \left[ \begin{matrix} 42\\ 8 \end{matrix} \right] [428]就行了。好巧不巧,仔细观察左边矩阵的前两列。我们可以得出 [ 42 8 ] = 42 [ 1 0 ] + 8 [ 0 1 ] \left[ \begin{matrix} 42\\8 \end{matrix} \right]=42\left[ \begin{matrix} 1\\0 \end{matrix} \right]+8\left[ \begin{matrix} 0\\1 \end{matrix} \right] [428]=42[10]+8[01]。我们让x3、x4等于0.就可以得出这个的一个解 [ 42 8 0 0 ] T \left[ \begin{matrix} 42&8&0&0 \end{matrix} \right]^T [42800]T,这就是一个特解啦。
  然而,这个方程不止这一个解。怎么找出更多的解呢?我们知道一个数加上零这个数是不会变的。所以从照这个思路想。我们用前两列来表示第三列 [ 8 2 ] = 8 [ 1 0 ] + 2 [ 0 1 ] \left[ \begin{matrix} 8\\2 \end{matrix} \right]=8\left[ \begin{matrix} 1\\0 \end{matrix} \right]+2\left[ \begin{matrix} 0\\1 \end{matrix} \right] [82]=8[10]+2[01]。我们用 c 1 、 c 2 、 c 3 、 c 4 c_1、c_2、c_3、c_4 c1c2c3c4表示前四列。这样也就是0= 8 c 1 + 2 c 2 − c 3 + 0 c 4 8c_1+2c_2-c_3+0c_4 8c1+2c2c3+0c4,也就是说。 [ 1 0 8 − 4 0 1 2 12 ] { λ 1 [ 8 2 − 1 0 ] } = λ 1 ( 8 c 1 + 2 c 2 − c 3 ) = 0 \left[ \begin{matrix} 1 & 0 & 8& -4\\ 0 & 1 & 2 &12 \end{matrix} \right]\{\lambda_1 \left[ \begin{matrix} 8\\2\\-1\\0 \end{matrix} \right] \}=\lambda_1(8c_1+2c_2-c_3)=0 [100182412]{λ18210}=λ1(8c1+2c2c3)=0
  同样的,我们用前两列表示第四列
[ 1 0 8 − 4 0 1 2 12 ] { λ 2 [ − 4 12 0 1 ] } = λ 2 ( − 4 c 1 + 12 c 2 − c 4 ) = 0 \left[ \begin{matrix} 1 & 0 & 8& -4\\ 0 & 1 & 2 &12 \end{matrix} \right]\{\lambda_2 \left[ \begin{matrix} -4\\12\\0\\1 \end{matrix} \right] \}=\lambda_2(-4c_1+12c_2-c_4)=0 [100182412]{λ241201}=λ2(4c1+12c2c4)=0
  我们把这所有解归纳起来,就得到了通解:
x = [ 42 8 0 0 ] + λ 1 [ 8 2 − 1 0 ] + λ 2 [ − 4 12 0 1 ] x=\left[ \begin{matrix} 42\\8\\0\\0\end{matrix}\right]+\lambda_1\left[ \begin{matrix} 8\\2\\-1\\0\end{matrix}\right]+\lambda_2\left[ \begin{matrix} -4\\12\\0\\1\end{matrix}\right] x=42800+λ18210+λ241201
归纳一下,我们求通解的步骤一般分为以下三步:

  1. 求Ax=b的一个特解
  2. 找到Ax=0的所有解
  3. 按照如上办法归纳起来

  当然啊这个例子很特殊,所以我们很简单就找到了通解。对于一般的方程怎么办呢?接下来就引入我们的——高斯消元法,而高斯消元的精髓就是接下来我们要讲的——初等变换

1.3.2 Elementary Transformations (初等变换)

  初等变换可以在保持解集不变的情况下把方程组变成更简单的形式

  1. 交换两个方程(也就是矩阵中的行)
  2. 方程(行)乘于一个常量
  3. 两个方程(行)相加
    例子:
    { − 2 x 1 + 4 x 2 − 2 x 3 − x 4 + 4 x 5 = 3 4 x 1 − 8 x 2 + 3 x 3 − 3 x 4 + x 5 = 2 x 1 − 2 x 2 + x 3 − x 4 + x 5 = 0 x 1 − 2 x 2 − 3 x 4 + 4 x 5 = a \left\{ \begin{array}{c} -2x_1+4x_2-2x_3-x_4+4x_5=3 \\ 4x_1-8x_2+3x_3-3x_4+x_5=2\\ x_1-2x_2+x_3-x_4+x_5=0\\ x_1-2x_2-3x_4+4x_5=a \end{array} \right. 2x1+4x22x3x4+4x5=34x18x2+3x33x4+x5=2x12x2+x3x4+x5=0x12x23x4+4x5=a

[ − 2 4 − 2 − 1 4 − 3 4 − 8 3 − 3 1 2 1 − 2 1 − 1 1 0 1 − 2 0 − 3 4 a ] \left[ \begin{array}{ccccc|c} -2 & 4 & -2& -1&4&-3\\ 4 & -8 & 3 &-3&1&2\\ 1&-2&1&-1&1&0\\ 1&-2&0&-3&4&a \end{array} \right] 24114822231013134114320a
具体过程就不赘述,经过一系列初等变换,变成了如下形式:
[ 1 − 2 1 − 1 1 0 0 0 1 − 1 3 − 2 0 0 0 1 − 2 1 0 0 0 0 0 a + 1 ] \left[ \begin{array}{ccccc|c} 1 & -2 & 1& -1&1&0\\ 0 & 0 & 1 &-1&3&-2\\ 0&0&0&1&-2&1\\ 0&0&0&0&0&a+1 \end{array} \right] 10002000110011101320021a+1
这个矩阵就是一个比较方便的阶梯型矩阵,把他写回多项式:
{ x 1 − 2 x 2 − x 3 − x 4 + x 5 = 0 x 3 − x 4 + 3 x 5 = − 2 x 4 − 2 x 5 = 1 0 = a + 1 \left\{ \begin{array}{c} x_1-2x_2-x_3-x_4+x_5=0 \\ x_3-x_4+3x_5=-2\\ x_4-2x_5=1\\ 0=a+1 \end{array} \right. x12x2x3x4+x5=0x3x4+3x5=2x42x5=10=a+1
很明显,只有当a=-1的时候才有解。此时方程的特解为: [ x 1 x 2 x 3 x 4 x 5 ] = \left[ \begin{array}{c} x_1\\x_2\\x_3\\x_4\\x_5 \end{array} \right]= x1x2x3x4x5= [ 2 0 − 1 1 0 ] \left[ \begin{array}{c} 2\\0\\-1\\1\\0 \end{array} \right] 20110通解为: x = [ 2 0 − 1 1 0 ] + λ 1 [ 2 1 0 0 0 ] + λ 2 [ 2 0 − 1 2 1 ] x=\left[ \begin{matrix} 2\\0\\-1\\1\\0 \end{matrix} \right] +\lambda_1 \left[ \begin{matrix} 2\\1\\0\\0\\0 \end{matrix} \right] + \lambda_2 \left[ \begin{matrix} 2\\0\\-1\\2\\1 \end{matrix} \right] x=20110+λ121000+λ220121
  接下来,让我仔细介绍找通解和特解的系统性方法,还有几个用到的定义。

  • 主元和梯形结构:每一行从左起第一个非零数叫主元,而每一个当前行的主元都在上一行的主元的右边,并且所有非零行都在全零行的上边,这种矩阵叫阶梯型矩阵。就像上面那个最终的结果,就是阶梯型的,见名知意嘛
  • 基础变量和自由变量:与主元对应的变量是基础变量,其他的是自由变量。如上题: x 1 , x 3 , x 4 x_1,x_3,x_4 x1,x3,x4是基础变量 x 2 , x 5 x_2,x_5 x2,x5是自由变量
  • 求特解:化为阶梯型后求特解就变得很简单。看上题,最后的形式我们把非主元列的系数都使他等于零就可以得到: λ 1 [ 1 0 0 0 ] + λ 2 [ 1 1 0 0 ] + λ 3 [ − 1 − 1 1 0 ] = [ 0 − 2 1 0 ] \lambda_1\left[ \begin{matrix} 1\\0\\0\\0 \end{matrix} \right]+\lambda_2\left[ \begin{matrix} 1\\1\\0\\0 \end{matrix} \right]+\lambda_3\left[ \begin{matrix} -1\\-1\\1\\0 \end{matrix} \right]=\left[ \begin{matrix} 0\\-2\\1\\0 \end{matrix} \right] λ11000+λ21100+λ31110=0210
    从后往前算,很容易得出 λ 1 = 1 , λ 2 = − 1 , λ 3 = 2 \lambda_1=1,\lambda_2=-1,\lambda_3=2 λ1=1,λ2=1,λ3=2所以这个方程组的一个特解就是 x = [ 2 0 − 1 1 0 ] T x= \left[ \begin{matrix} 2&0&-1&1&0 \end{matrix} \right]^T x=[20110]T
  • 简化行阶梯型:简化行阶梯型有三个要求
    (1) 他是行阶梯型的矩阵
    (2) 每个主元都是一
    (3) 主元素是这一列中唯一的非零元素
    也称作行规范型矩阵
  • 高斯消去:高斯消去就是通过初等航变换将矩阵或者方程组编程简化行阶梯型
    将上题变成行简化阶梯型就是:
    [ 1 − 2 0 0 − 2 0 0 1 0 1 0 0 0 1 − 2 0 0 0 0 0 ] \left[ \begin{matrix} 1 & -2 & 0& 0&-2\\ 0 & 0 & 1 &0&1\\ 0&0&0&1&-2\\ 0&0&0&0&0 \end{matrix} \right] 10002000010000102120
    求通解就是找Ax=0的解,也就是用主元列表示非主元列。按照1.3.1中的步骤。比如我们可以看出来第二列加两倍的第一列等于0.所以通解的一个就是 λ 1 [ 2 1 0 0 0 ] \lambda_1\left[ \begin{matrix} 2\\1\\0\\0\\0 \end{matrix} \right] λ121000

1.3.3 The Minus-1 Trick(巧用-1)

  这一节我们讲一个解出Ax=0的解的小诀窍。适用于列数比行数多的情况下快速解出Ax=0.
  首先假设A是一个简化行阶梯型矩阵。具体性质参考上小节。接下来仍拿上小节那个例子:
[ 1 − 2 0 0 − 2 0 0 1 0 1 0 0 0 1 − 2 0 0 0 0 0 ] \left[ \begin{matrix} 1 & -2 & 0& 0&-2\\ 0 & 0 & 1 &0&1\\ 0&0&0&1&-2\\ 0&0&0&0&0 \end{matrix} \right] 10002000010000102120
  我们添加新的行,使他的主对角线都变为1或者-1.新添加的行的格式是.0…-1…0,这样加完之后,上图矩阵就变成了如下的样子:
[ 1 − 2 0 0 − 2 0 − 1 0 0 0 0 0 1 0 1 0 0 0 1 − 2 0 0 0 0 − 1 ] \left[ \begin{matrix} 1 & -2 & 0& 0&-2\\ 0&-1&0&0&0\\ 0 & 0 & 1 &0&1\\ 0&0&0&1&-2\\ 0&0&0&0&-1 \end{matrix} \right] 1000021000001000001020121
  这样,-1作为主元的那些列,就是Ax=0的解。也就是第二列和第五列,我们会发现和我们原来得出的解是一样的。
        计算矩阵的逆
  求一个方阵A的逆,也就是求AX= I n I_n In的解X就是A的逆。具体方法就是用增广矩阵表示这组线性方程组。 [ A I n ] − > [ I n A − 1 ] \left[ \begin{array}{c|c} A&I_n \end{array} \right]->\left[ \begin{array}{c|c} I_n&A^{-1} \end{array} \right] [AIn]>[InA1],也就是说,我们把增广矩阵方程组变成行简化阶梯型后,右边就是逆矩阵,所以求逆也就是求线性方程组的解。

1.3.4 Algorithms for Solving a System of Linear Equations(求解线性方程组的算法)

  接下来我们简单地讨论一下解Ax=b这种线性方程组都有哪些方法方法。我们先假设他有解,没解的情况需要用到线性回归的方法找近似解,这我们以后再说。

  • 在A可逆时我们可以求出 A − 1 A^{-1} A1,这样的话Ax=b就可以写成x= A − 1 A^{-1} A1b
  • 在一般情况下,如果A有线性无关的列,我们可以用如下转化: A x = b ⇔ A T A x = A T b ⇔ x = ( A T A ) − 1 A T b Ax=b \Leftrightarrow A^TAx=A^Tb\Leftrightarrow x=(A^TA)^{-1}A^Tb Ax=bATAx=ATbx=(ATA)1ATb并且使用摩尔-彭若斯广义逆 ( A T A ) − 1 A T (A^TA)^{-1}A^T (ATA)1AT去得出解。同时这也是最小二乘最小范数解。他的缺点就是需要计算矩阵的乘积以及矩阵的逆
  • 高斯消去可以用于计算行列式,检验一组向量是否线性无关,计算矩阵的逆,计算矩阵的秩,和确定向量空间的基。高斯消去适合求解数千个变量的线性方程组。不过如果要计算数百万个就无能为力,因为他所需的运算量级是方程数的三次方。
  • 在实际应用中线性方程组都是间接的解决的,可以用迭代法比如说Richardson method(理查德森外推法),the Jacobi method(雅可比法),the Gauß-Seidel method(高斯一赛德尔迭代法) the successive over-relaxation method(连续的逐次超松弛法 SOR), Krylov subspace methods(维子空间方法,比如共轭梯度,广义极小残差),biconjugate gradients(双共轭梯度)
  • 通过迭代法求出Ax=b的解 x ∗ x_* x,核心思想是建立以下如下的形式: x k + 1 = C x ( k ) + d x^{k+1}=Cx^{(k)}+d xk+1=Cx(k)+d,并且要选择合适的C和d来减少迭代中 ∣ ∣ x ( k + 1 ) − x ∗ ∣ ∣ ||x^{(k+1)}-x_*|| x(k+1)x的误差
    以上就是先介绍以下求解的方法,具体知识会在以后慢慢学到。

  到现在给我的一个感觉就是这本书在尽力把线性方程的解和矩阵中的各种感念联系起来,并且在写的时候可能更贴近于计算机的求解需求。

你可能感兴趣的:(数学)