强撸MIT18.06灰飞烟灭(一)


第一讲:方程组的几何解释

我们从求解线性方程组来开始这门课,从一个普通的例子讲起:方程组有/(2/)个未知数,一共有/(2/)个方程,分别来看方程组的“行图像”和“列图像”。

有方程组/(/begin{cases}2x&-y&=0//-x&+2y&=3/end{cases}/),写作矩阵形式有/(/begin{bmatrix}2&-1//-1&2/end{bmatrix}/begin{bmatrix}x//y/end{bmatrix}=/begin{bmatrix}0//3/end{bmatrix}/),通常我们把第一个矩阵称为系数矩阵/(A/),将第二个矩阵称为向量/(x/),将第三个矩阵称为向量/(b/),于是线性方程组可以表示为/(Ax=b/)。

我们来看行图像,即直角坐标系中的图像:

%matplotlib inline
import matplotlib.pyplot as plt
import numpy as np
import pandas as pd
import seaborn as sns

x = [-2, 2, -2, 2]
y = [-4, 4, 0.5, 2.5]

fig = plt.figure()
plt.axhline(y=0, c='black')
plt.axvline(x=0, c='black')

plt.plot(x[:2], y[:2], x[2:], y[2:])

plt.draw()

png

plt.close(fig)

上图是我们都很熟悉的直角坐标系中两直线相交的情况,接下来我们按列观察方程组/(x/begin{bmatrix}2//-1/end{bmatrix}+y/begin{bmatrix}-1//2/end{bmatrix}=/begin{bmatrix}0//3/end{bmatrix}/)(我们把第一个向量称作/(col_1/),第二个向量称作/(col_2/),以表示第一列向量和第二列向量),要使得式子成立,需要第一个向量加上两倍的第二个向量,即/(1/begin{bmatrix}2//-1/end{bmatrix}+2/begin{bmatrix}-1//2/end{bmatrix}=/begin{bmatrix}0//3/end{bmatrix}/)。

现在来看列图像,在二维平面上画出上面的列向量:

from functools import partial

fig = plt.figure()
plt.axhline(y=0, c='black')
plt.axvline(x=0, c='black')
ax = plt.gca()
ax.set_xlim(-2.5, 2.5)
ax.set_ylim(-3, 4)

arrow_vector = partial(plt.arrow, width=0.01, head_width=0.1, head_length=0.2, length_includes_head=True)

arrow_vector(0, 0, 2, -1, color='g')
arrow_vector(0, 0, -1, 2, color='c')
arrow_vector(2, -1, -2, 4, color='b')
arrow_vector(0, 0, 0, 3, width=0.05, color='r')

plt.draw()

png

plt.close(fig)

如图,绿向量/(col_1/)与蓝向量(两倍的蓝绿向量/(col_2/))合成红向量/(b/)。

接着,我们继续观察/(x/begin{bmatrix}2//-1/end{bmatrix}+y/begin{bmatrix}-1//2/end{bmatrix}=/begin{bmatrix}0//3/end{bmatrix}/),/(col_1,col_2/)的某种线性组合得到了向量/(b/),那么/(col_1,col_2/)的所有线性组合能够得到什么结果?它们将铺满整个平面。

下面进入三个未知数的方程组:/(/begin{cases}2x&-y&&=0//-x&+2y&-z&=-1//&-3y&+4z&=4/end{cases}/),写作矩阵形式/(A=/begin{bmatrix}2&-1&0//-1&2&-1//0&-3&4/end{bmatrix},/ b=/begin{bmatrix}0//-1//4/end{bmatrix}/)。

在三维直角坐标系中,每一个方程将确定一个平面,而例子中的三个平面会相交于一点,这个点就是方程组的解。

同样的,将方程组写成列向量的线性组合,观察列图像:/(x/begin{bmatrix}2//-1//0/end{bmatrix}+y/begin{bmatrix}-1//2//-3/end{bmatrix}+z/begin{bmatrix}0//-1//4/end{bmatrix}=/begin{bmatrix}0//-1//4/end{bmatrix}/)。易知教授特意安排的例子中最后一个列向量恰巧等于等式右边的/(b/)向量,所以我们需要的线性组合为/(x=0,y=0,z=1/)。假设我们令/(b=/begin{bmatrix}1//1//-3/end{bmatrix}/),则需要的线性组合为/(x=1,y=1,z=0/)。

我们并不能总是这么轻易的求出正确的线性组合,所以下一讲将介绍消元法——一种线性方程组的系统性解法。

现在,我们需要考虑,对于任意的/(b/),是否都能求解/(Ax=b/)?用列向量线性组合的观点阐述就是,列向量的线性组合能否覆盖整个三维向量空间?对上面这个例子,答案是肯定的,这个例子中的/(A/)是我们喜欢的矩阵类型,但是对另一些矩阵,答案是否定的。那么在什么情况下,三个向量的线性组合得不到/(b/)?

——如果三个向量在同一个平面上,问题就出现了——那么他们的线性组合也一定都在这个平面上。举个例子,比如/(col_3=col_1+col_2/),那么不管怎么组合,这三个向量的结果都逃不出这个平面,因此当/(b/)在平面内,方程组有解,而当/(b/)不在平面内,这三个列向量就无法构造出/(b/)。在后面的课程中,我们会了解到这种情形称为奇异矩阵不可逆

下面我们推广到九维空间,每个方程有九个未知数,共九个方程,此时已经无法从坐标图像中描述问题了,但是我们依然可以从求九维列向量线性组合的角度解决问题,仍然是上面的问题,是否总能得到/(b/)?当然这仍取决于这九个向量,如果我们取一些并不相互独立的向量,则答案是否定的,比如取了九列但其实只相当于八列,有一列毫无贡献(这一列是前面列的某种线性组合),则会有一部分/(b/)无法求得。

接下来介绍方程的矩阵形式/(Ax=b/),这是一种乘法运算,举个例子,取/(A=/begin{bmatrix}2&5//1&3/end{bmatrix},/ x=/begin{bmatrix}1//2/end{bmatrix}/),来看如何计算矩阵乘以向量:

  • 我们依然使用列向量线性组合的方式,一次计算一列,/(/begin{bmatrix}2&5//1&3/end{bmatrix}/begin{bmatrix}1//2/end{bmatrix}=1/begin{bmatrix}2//1/end{bmatrix}+2/begin{bmatrix}5//3/end{bmatrix}=/begin{bmatrix}12//7/end{bmatrix}/)
  • 另一种方法,使用向量内积,矩阵第一行向量点乘/(x/)向量/(/begin{bmatrix}2&5/end{bmatrix}/cdot/begin{bmatrix}1&2/end{bmatrix}^T=12,/ /begin{bmatrix}1&3/end{bmatrix}/cdot/begin{bmatrix}1&2/end{bmatrix}^T=7/)。

教授建议使用第一种方法,将/(Ax/)看做/(A/)列向量的线性组合。

第二讲:矩阵消元

这个方法最早由高斯提出,我们以前解方程组的时候都会使用,现在来看如何使用矩阵实现消元法。

消元法

有三元方程组/(/begin{cases}x&+2y&+z&=2//3x&+8y&+z&=12//&4y&+z&=2/end{cases}/),对应的矩阵形式/(Ax=b/)为/(/begin{bmatrix}1&2&1//3&8&1//0&4&1/end{bmatrix}/begin{bmatrix}x//y//z/end{bmatrix}=/begin{bmatrix}2//12//2/end{bmatrix}/)。

按照我们以前做消元法的思路:

  • 第一步,我们希望在第二个方程中消去/(x/)项,来操作系数矩阵/(A=/begin{bmatrix}/underline{1}&2&1//3&8&1//0&4&1/end{bmatrix}/),下划线的元素为第一步的主元(pivot):/(/begin{bmatrix}/underline{1}&2&1//3&8&1//0&4&1/end{bmatrix}/xrightarrow{row_2-3row_1}/begin{bmatrix}/underline{1}&2&1//0&2&-2//0&4&1/end{bmatrix}/)

    这里我们先不管/(b/)向量,等做完/(A/)的消元可以再做/(b/)的消元。(这是MATLAB等工具经常使用的算法。)

  • 第二步,我们希望在第三个方程中消去/(y/)项,现在第二行第一个非零元素成为了第二个主元:/(/begin{bmatrix}/underline{1}&2&1//0&/underline{2}&-2//0&4&1/end{bmatrix}/xrightarrow{row_3-2row_2}/begin{bmatrix}/underline{1}&2&1//0&/underline{2}&-2//0&0&/underline{5}/end{bmatrix}/)

    注意到第三行消元过后仅剩一个非零元素,所以它就成为第三个主元。做到这里就算消元完成了。

再来讨论一下消元失效的情形:首先,主元不能为零;其次,如果在消元时遇到主元位置为零,则需要交换行,使主元不为零;最后提一下,如果我们把第三个方程/(z/)前的系数改成/(-4/),会导致第二步消元时最后一行全部为零,则第三个主元就不存在了,至此消元不能继续进行了,这就是下一讲中涉及的不可逆情况。

  • 接下来就该回代(back substitution)了,这时我们在/(A/)矩阵后面加上/(b/)向量写成增广矩阵(augmented matrix)的形式:/(/left[/begin{array}{c|c}A&b/end{array}/right]=/left[/begin{array}{ccc|c}1&2&1&2//3&8&1&12//0&4&1&2/end{array}/right]/to/left[/begin{array}{ccc|c}1&2&1&2//0&2&-2&6//0&4&1&2/end{array}/right]/to/left[/begin{array}{ccc|c}1&2&1&2//0&2&-2&6//0&0&5&-10/end{array}/right]/)

    不难看出,/(z/)的解已经出现了,此时方程组变为/(/begin{cases}x&+2y&+z&=2//&2y&-2z&=6//&&5z&=-10/end{cases}/),从第三个方程求出/(z=-2/),代入第二个方程求出/(y=1/),再代入第一个方程求出/(x=2/)。

消元矩阵

上一讲我们学习了矩阵乘以向量的方法,有三个列向量的矩阵乘以另一个向量,按列的线性组合可以写作/(/Bigg[v_1/ v_2/ v_3/Bigg]/begin{bmatrix}3//4//5/end{bmatrix}=3v_1+4v_2+5v_3/)。

但现在我们希望用矩阵乘法表示行操作,则有/(/begin{bmatrix}1&2&7/end{bmatrix}/begin{bmatrix}&row_1&//&row_2&//&row_3&/end{bmatrix}=1row_1+2row_2+7row_3/)。易看出这里是一个行向量从左边乘以矩阵,这个行向量按行操作矩阵的行向量,并将其合成为一个矩阵行向量的线性组合。

介绍到这里,我们就可以将消元法所做的行操作写成向量乘以矩阵的形式了。

  • 消元法第一步操作为将第二行改成/(row_2-3row_1/),其余两行不变,则有/(/begin{bmatrix}1&0&0//-3&1&0//0&0&1/end{bmatrix}/begin{bmatrix}1&2&1//3&8&1//0&4&1/end{bmatrix}=/begin{bmatrix}1&2&1//0&2&-2//0&4&1/end{bmatrix}/)(另外,如果三行都不变,消元矩阵就是单位矩阵/(I=/begin{bmatrix}1&0&0//0&1&0//0&0&1/end{bmatrix}/),/(I/)之于矩阵运算相当于/(1/)之于四则运算。)这个消元矩阵我们记作/(E_{21}/),即将第二行第一个元素变为零。

  • 接下来就是求/(E_{32}/)消元矩阵了,即将第三行第二个元素变为零,则/(/begin{bmatrix}1&0&0//0&1&0//0&-2&1/end{bmatrix}/begin{bmatrix}1&2&1//0&2&-2//0&4&1/end{bmatrix}=/begin{bmatrix}1&2&1//0&2&-2//0&0&5/end{bmatrix}/)。这就是消元所用的两个初等矩阵(elementary matrix)。

  • 最后,我们将这两步综合起来,即/(E_{32}(E_{21}A)=U/),也就是说如果我们想从/(A/)矩阵直接得到/(U/)矩阵的话,只需要/((E_{32}E_{21})A/)即可。注意,矩阵乘法虽然不能随意变动相乘次序,但是可以变动括号位置,也就是满足结合律(associative law),而结合律在矩阵运算中非常重要,很多定理的证明都需要巧妙的使用结合律。

既然提到了消元用的初等矩阵,那我们再介绍一种用于置换两行的矩阵:置换矩阵(permutation matrix):例如/(/begin{bmatrix}0&1//1&0/end{bmatrix}/begin{bmatrix}a&b//c&d/end{bmatrix}=/begin{bmatrix}c&d//a&b/end{bmatrix}/),置换矩阵将原矩阵的两行做了互换。顺便提一下,如果我们希望交换两列,则有/(/begin{bmatrix}a&b//c&d/end{bmatrix}/begin{bmatrix}0&1//1&0/end{bmatrix}=/begin{bmatrix}b&a//d&c/end{bmatrix}/)。

我们现在能够将/(A/)通过行变换写成/(U/),那么如何从/(U/)再变回/(A/),也就是求消元的逆运算。对某些“坏”矩阵,并没有逆,而本讲的例子都是“好”矩阵。

现在,我们以/(E_{21}/)为例,/(/Bigg[/quad ?/quad /Bigg]/begin{bmatrix}1&0&0//-3&1&0//0&0&1/end{bmatrix}=/begin{bmatrix}1&0&0//0&1&0//0&0&1/end{bmatrix}/),什么矩阵可以取消这次行变换?这次变换是从第二行中减去三倍的第一行,那么其逆变换就是给第二行加上三倍的第一行,所以逆矩阵就是/(/begin{bmatrix}1&0&0//3&1&0//0&0&1/end{bmatrix}/)。

我们把矩阵/(E/)的逆记作/(E^{-1}/),所以有/(E^{-1}E=I/)。

第三讲:乘法和逆矩阵

上一讲大概介绍了矩阵乘法和逆矩阵,本讲就来做进一步说明。

矩阵乘法

  • 行列内积:有/(m/times n/)矩阵/(A/)和/(n/times p/)矩阵/(B/)(/(A/)的总列数必须与/(B/)的总行数相等),两矩阵相乘有/(AB=C/),/(C/)是一个/(m/times p/)矩阵,对于/(C/)矩阵中的第/(i/)行第/(j/)列元素/(c_{ij}/),有:

    /[c_{ij}=row_i/cdot column_j=/sum_{k=i}^na_{ik}b_{kj}
    /]

    其中/(a_{ik}/)是/(A/)矩阵的第/(i/)行第/(k/)列元素,/(b_{kj}/)是/(B/)矩阵的第/(k/)行第/(j/)列元素。

    可以看出/(c_{ij}/)其实是/(A/)矩阵第/(i/)行点乘/(B/)矩阵第/(j/)列 /(/begin{bmatrix}&/vdots&//&row_i&//&/vdots&/end{bmatrix}/begin{bmatrix}&&///cdots&column_j&/cdots//&&/end{bmatrix}=/begin{bmatrix}&/vdots&///cdots&c_{ij}&/cdots//&/vdots&/end{bmatrix}/)

  • 整列相乘:上一讲我们知道了如何计算矩阵乘以向量,而整列相乘就是使用这种线性组合的思想:

    /(/begin{bmatrix}&&//A_{col1}&A_{col2}&/cdots&A_{coln}//&&/end{bmatrix}/begin{bmatrix}/cdots&b_{1j}&/cdots///cdots&b_{2j}&/cdots///cdots&/vdots&/cdots///cdots&b_{nj}&/cdots///end{bmatrix}=/begin{bmatrix}&&///cdots&/left(b_{1j}A_{col1}+b_{2j}A_{col2}+/cdots+b_{nj}A_{coln}/right)&/cdots//&&/end{bmatrix}/)

    上面的运算为/(B/)的第/(j/)个列向量右乘矩阵/(A/),求得的结果就是/(C/)矩阵的第/(j/)列,即/(C/)的第/(j/)列是/(A/)的列向量以/(B/)的第/(j/)列作为系数所求得的线性组合,/(C_j=b_{1j}A_{col1}+b_{2j}A_{col2}+/cdots+b_{nj}A_{coln}/)。

  • 整行相乘:同样的,也是利用行向量线性组合的思想:

    /(/begin{bmatrix}/vdots&/vdots&/vdots&/vdots//a_{i1}&a_{i2}&/cdots&a_{in}///vdots&/vdots&/vdots&/vdots/end{bmatrix}/begin{bmatrix}&B_{row1}&//&B_{row2}&//&/vdots&//&B_{rown}&/end{bmatrix}=/begin{bmatrix}/vdots///left(a_{i1}B_{row1}+a_{i2}B_{row2}+/cdots+a_{in}B_{rown}/right)///vdots/end{bmatrix}/)

    上面的运算为/(A/)的第/(i/)个行向量左乘矩阵/(B/),求得的结果就是/(C/)矩阵的第/(i/)行,即/(C/)的第/(i/)行是/(B/)的行向量以/(A/)的第/(i/)行作为系数所求的的线性组合,/(C_i=a_{i1}B_{row1}+a_{i2}B_{row2}+/cdots+a_{in}B_{rown}/)。

  • 列乘以行:用/(A/)矩阵的列乘以/(B/)矩阵的行,得到的矩阵相加即可:

    /(/begin{bmatrix}&&//A_{col1}&A_{col2}&/cdots&A_{coln}//&&/end{bmatrix}/begin{bmatrix}&B_{row1}&//&B_{row2}&//&/vdots&//&B_{rown}&/end{bmatrix}=A_{col1}B_{row1}+A_{col2}B_{row2}+/cdots+A_{coln}B_{rown}/)

    注意,/(A_{coli}B_{rowi}/)是一个/(m/times 1/)向量乘以一个/(1/times p/)向量,其结果是一个/(m/times p/)矩阵,而所有的/(m/times p/)矩阵之和就是计算结果。

  • 分块乘法:/(/left[/begin{array}{c|c}A_1&A_2///hline A_3&A_4/end{array}/right]/left[/begin{array}{c|c}B_1&B_2///hline B_3&B_4/end{array}/right]=/left[/begin{array}{c|c}A_1B_1+A_2B_3&A_1B_2+A_2B_4///hline A_3B_1+A_4B_3&A_3B_2+A_4B_4/end{array}/right]/)

    在分块合适的情况下,可以简化运算。

逆(方阵)

首先,并不是所有的方阵都有逆;而如果逆存在,则有/(A^{-1}A=I=AA^{-1}/)。教授这里提前剧透,对于方阵,左逆和右逆是相等的,但是对于非方阵(长方形矩阵),其左逆不等于右逆。

对于这些有逆的矩阵,我们称其为可逆的或非奇异的。我们先来看看奇异矩阵(不可逆的):/(A=/begin{bmatrix}1&2//3&6/end{bmatrix}/),在后面将要学习的行列式中,会发现这个矩阵的行列式为/(0/)。

观察这个方阵,我们如果用另一个矩阵乘/(A/),则得到的结果矩阵中的每一列应该都是/(/begin{bmatrix}1//2/end{bmatrix}/)的倍数,所以我们不可能从/(AB/)的乘积中得到单位矩阵/(I/)。

另一种判定方法,如果存在非零向量/(x/),使得/(Ax=0/),则矩阵/(A/)不可逆。我们来用上面的矩阵为例:/(/begin{bmatrix}1&2//3&6/end{bmatrix}/begin{bmatrix}3//-1/end{bmatrix}=/begin{bmatrix}0//0/end{bmatrix}/)。

证明:如果对于非零的/(x/)仍有/(Ax=0/),而/(A/)有逆/(A^{-1}/),则/(A^{-1}Ax=0/),即/(x=0/),与题设矛盾,得证。

现在来看看什么矩阵有逆,设/(A=/begin{bmatrix}1&3//2&7/end{bmatrix}/),我们来求/(A^{-1}/)。/(/begin{bmatrix}1&3//2&7/end{bmatrix}/begin{bmatrix}a&b//c&d/end{bmatrix}=/begin{bmatrix}1&0//0&1/end{bmatrix}/),使用列向量线性组合的思想,我们可以说/(A/)乘以/(A^{-1}/)的第/(j/)列,能够得到/(I/)的第/(j/)列,这时我会得到一个关于列的方程组。

接下来介绍高斯-若尔当(Gauss-Jordan)方法,该方法可以一次处理所有的方程:

  • 这个方程组为/(/begin{cases}/begin{bmatrix}1&3//2&7/end{bmatrix}/begin{bmatrix}a//b/end{bmatrix}=/begin{bmatrix}1//0/end{bmatrix}///begin{bmatrix}1&3//2&7/end{bmatrix}/begin{bmatrix}c//d/end{bmatrix}=/begin{bmatrix}0//1/end{bmatrix}/end{cases}/),我们想要同时解这两个方程;

  • 构造这样一个矩阵/(/left[/begin{array}{cc|cc}1&3&1&0//2&7&0&1/end{array}/right]/),接下来用消元法将左侧变为单位矩阵;

  • /(/left[/begin{array}{cc|cc}1&3&1&0//2&7&0&1/end{array}/right]/xrightarrow{row_2-2row_1}/left[/begin{array}{cc|cc}1&3&1&0//0&1&-2&1/end{array}/right]/xrightarrow{row_1-3row_2}/left[/begin{array}{cc|cc}1&0&7&-3//0&1&-2&1/end{array}/right]/)

  • 于是,我们就将矩阵从/(/left[/begin{array}{c|c}A&I/end{array}/right]/)变为/(/left[/begin{array}{c|c}I&A^{-1}/end{array}/right]/)

而高斯-若尔当法的本质是使用消元矩阵/(E/),对/(A/)进行操作,/(E/left[/begin{array}{c|c}A&I/end{array}/right]/),利用一步步消元有/(EA=I/),进而得到/(/left[/begin{array}{c|c}I&E/end{array}/right]/),其实这个消元矩阵/(E/)就是/(A^{-1}/),而高斯-若尔当法中的/(I/)只是负责记录消元的每一步操作,待消元完成,逆矩阵就自然出现了。

第四讲:/(A/) 的 /(LU/) 分解

/(AB/)的逆矩阵:

/[/begin{aligned}
A /cdot A^{-1} = I & = A^{-1} /cdot A//
(AB) /cdot (B^{-1}A^{-1}) & = I//
/textrm{则} AB /textrm{的逆矩阵为} & B^{-1}A^{-1}
/end{aligned}
/]

/(A^{T}/)的逆矩阵:

/[/begin{aligned}
(A /cdot A^{-1})^{T} & = I^{T}//
(A^{-1})^{T} /cdot A^{T} & = I//
/textrm{则} A^{T} /textrm{的逆矩阵为} & (A^{-1})^{T}
/end{aligned}
/]

将一个 /(n/) 阶方阵 /(A/) 变换为 /(LU/) 需要的计算量估计:

  1. 第一步,将/(a_{11}/)作为主元,需要的运算量约为/(n^2/)

/[/begin{bmatrix}
a_{11} & a_{12} & /cdots & a_{1n} //
a_{21} & a_{22} & /cdots & a_{2n} //
/vdots & /vdots & /ddots & /vdots //
a_{n1} & a_{n2} & /cdots & a_{nn} //
/end{bmatrix}
/underrightarrow{消元}
/begin{bmatrix}
a_{11} & a_{12} & /cdots & a_{1n} //
0 & a_{22} & /cdots & a_{2n} //
0 & /vdots & /ddots & /vdots //
0 & a_{n2} & /cdots & a_{nn} //
/end{bmatrix}
/]

  1. 以此类推,接下来每一步计算量约为/((n-1)^2、(n-2)^2、/cdots、2^2、1^2/)。

  2. 则将 /(A/) 变换为 /(LU/) 的总运算量应为/(O(n^2+(n-1)^2+/cdots+2^2+1^2)/),即/(O(/frac{n^3}{3})/)。

置换矩阵(Permutation Matrix):

3阶方阵的置换矩阵有6个:

/[/begin{bmatrix}
1 & 0 & 0 //
0 & 1 & 0 //
0 & 0 & 1 //
/end{bmatrix}
/begin{bmatrix}
0 & 1 & 0 //
1 & 0 & 0 //
0 & 0 & 1 //
/end{bmatrix}
/begin{bmatrix}
0 & 0 & 1 //
0 & 1 & 0 //
1 & 0 & 0 //
/end{bmatrix}
/begin{bmatrix}
1 & 0 & 0 //
0 & 0 & 1 //
0 & 1 & 0 //
/end{bmatrix}
/begin{bmatrix}
0 & 1 & 0 //
0 & 0 & 1 //
1 & 0 & 0 //
/end{bmatrix}
/begin{bmatrix}
0 & 0 & 1 //
1 & 0 & 0 //
0 & 1 & 0 //
/end{bmatrix}
/]

/(n/)阶方阵的置换矩阵有/(/binom{n}{1}=n!/)个。

第五讲:转换、置换、向量空间R

置换矩阵(Permutation Matrix)

/(P/)为置换矩阵,对任意可逆矩阵/(A/)有:

/(PA=LU/)

/(n/)阶方阵的置换矩阵/(P/)有/(/binom{n}{1}=n!/)个

对置换矩阵/(P/),有/(P^TP = I/)

即$P^T = P^{-1}

转置矩阵(Transpose Matrix)

/((A^T)_{ij} = (A)_{ji}/)

对称矩阵(Symmetric Matrix)

/(A^T/) = /(A/)

对任意矩阵/(R/)有/(R^TR/)为对称矩阵:

/[(R^TR)^T = (R)^T(R^T)^T = R^TR//
/textrm{即}(R^TR)^T = R^TR
/]

向量空间(Vector Space)

所有向量空间都必须包含原点(Origin);

向量空间中任意向量的数乘、求和运算得到的向量也在该空间中。
即向量空间要满足加法封闭和数乘封闭。

第六讲:列空间和零空间

对向量子空间/(S/)和/(T/),有/(S /cap T/)也是向量子空间。

对/(m /times n/)矩阵/(A/),/(n /times 1/)矩阵/(x/),/(m /times 1/)矩阵/(b/),运算/(Ax=b/):

/[/begin{bmatrix}
a_{11} & a_{12} & /cdots & a_{1(n-1)} & a_{1n} //
a_{21} & a_{22} & /cdots & a_{2(n-1)} & a_{2n} //
/vdots & /vdots & /ddots & /vdots & /vdots //
a_{m1} & a_{m2} & /cdots & a_{m(n-1)} & a_{mn} //
/end{bmatrix}
/cdot
/begin{bmatrix}
x_{1} //
x_{2} //
/vdots //
x_{n-1} //
x_{n} //
/end{bmatrix}
=
/begin{bmatrix}
b_{1} //
b_{2} //
/vdots //
b_{m} //
/end{bmatrix}
/]

由/(A/)的列向量生成的子空间为/(A/)的列空间;

/(Ax=b/)有非零解当且仅当/(b/)属于/(A/)的列空间

A的零空间是/(Ax=0/)中/(x/)的解组成的集合。

第七讲:求解/(Ax=0/),主变量,特解

举例:/(3 /times 4/)矩阵
/(
A=
/begin{bmatrix}
1 & 2 & 2 & 2//
2 & 4 & 6 & 8//
3 & 6 & 8 & 10//
/end{bmatrix}
/),求/(Ax=0/)的特解:

找出主变量(pivot variable):

/[A=
/begin{bmatrix}
1 & 2 & 2 & 2//
2 & 4 & 6 & 8//
3 & 6 & 8 & 10//
/end{bmatrix}
/underrightarrow{消元}
/begin{bmatrix}
/underline{1} & 2 & 2 & 2//
0 & 0 & /underline{2} & 4//
0 & 0 & 0 & 0//
/end{bmatrix}
=U
/]

主变量(pivot variable,下划线元素)的个数为2,即矩阵/(A/)的秩(rank)为2,即/(r=2/)。

主变量所在的列为主列(pivot column),其余列为自由列(free column)。

自由列中的变量为自由变量(free variable),自由变量的个数为/(n-r=4-2=2/)。

通常,给自由列变量赋值,去求主列变量的值。如,令/(x_2=1, x_4=0/)求得特解
/(x=c_1/begin{bmatrix}-2//1//0//0///end{bmatrix}/);
再令/(x_2=0, x_4=1/)求得特解
/(x=c_2/begin{bmatrix}2//0//-2//1///end{bmatrix}/)。

该例还能进一步简化,即将/(U/)矩阵化简为/(R/)矩阵(Reduced row echelon form),即简化行阶梯形式。

在简化行阶梯形式中,主元上下的元素都是/(0/):

/[U=
/begin{bmatrix}
/underline{1} & 2 & 2 & 2//
0 & 0 & /underline{2} & 4//
0 & 0 & 0 & 0//
/end{bmatrix}
/underrightarrow{化简}
/begin{bmatrix}
/underline{1} & 2 & 0 & -2//
0 & 0 & /underline{1} & 2//
0 & 0 & 0 & 0//
/end{bmatrix}
=R
/]

将/(R/)矩阵中的主变量放在一起,自由变量放在一起(列交换),得到

/[R=
/begin{bmatrix}
/underline{1} & 2 & 0 & -2//
0 & 0 & /underline{1} & 2//
0 & 0 & 0 & 0//
/end{bmatrix}
/underrightarrow{列交换}
/left[
/begin{array}{c c | c c}
1 & 0 & 2 & -2//
0 & 1 & 0 & 2//
/hline
0 & 0 & 0 & 0//
/end{array}
/right]
=
/begin{bmatrix}
I & F //
0 & 0 //
/end{bmatrix}
/textrm{,其中}I/textrm{为单位矩阵,}F/textrm{为自由变量组成的矩阵}
/]

计算零空间矩阵/(N/)(nullspace matrix),其列为特解,有/(RN=0/)。

/[x_{pivot}=-Fx_{free} //
/begin{bmatrix}
I & F //
/end{bmatrix}
/begin{bmatrix}
x_{pivot} //
x_{free} //
/end{bmatrix}=0 //
N=/begin{bmatrix}
-F //
I //
/end{bmatrix}
/]

在本例中
/(
N=
/begin{bmatrix}
-2 & 2 //
0 & -2 //
1 & 0 //
0 & 1 //
/end{bmatrix}
/),与上面求得的两个/(x/)特解一致。

另一个例子,矩阵
/(
A=
/begin{bmatrix}
1 & 2 & 3 //
2 & 4 & 6 //
2 & 6 & 8 //
2 & 8 & 10 //
/end{bmatrix}
/underrightarrow{消元}
/begin{bmatrix}
1 & 2 & 3 //
0 & 2 & 2 //
0 & 0 & 0 //
0 & 0 & 0 //
/end{bmatrix}
/underrightarrow{化简}
/begin{bmatrix}
1 & 0 & 1 //
0 & 1 & 1 //
0 & 0 & 0 //
0 & 0 & 0 //
/end{bmatrix}
=R
/)

矩阵的秩仍为/(r=2/),有/(2/)个主变量,/(1/)个自由变量。

同上一例,取自由变量为/(x_3=1/),求得特解
/(
x=c
/begin{bmatrix}
-1 //
-1 //
1 //
/end{bmatrix}
/)

第八讲:求解/(Ax=b/):可解性和解的结构

举例,同上一讲:/(3 /times 4/)矩阵
/(
A=
/begin{bmatrix}
1 & 2 & 2 & 2//
2 & 4 & 6 & 8//
3 & 6 & 8 & 10//
/end{bmatrix}
/),求/(Ax=b/)的特解:

写出其增广矩阵(augmented matrix)/(/left[/begin{array}{c|c}A & b/end{array}/right]/):

/[/left[
/begin{array}{c c c c|c}
1 & 2 & 2 & 2 & b_1 //
2 & 4 & 6 & 8 & b_2 //
3 & 6 & 8 & 10 & b_3 //
/end{array}
/right]
/underrightarrow{消元}
/left[
/begin{array}{c c c c|c}
1 & 2 & 2 & 2 & b_1 //
0 & 0 & 2 & 4 & b_2-2b_1 //
0 & 0 & 0 & 0 & b_3-b_2-b_1 //
/end{array}
/right]
/]

显然,有解的必要条件为/(b_3-b_2-b_1=0/)。

讨论/(b/)满足什么条件才能让方程/(Ax=b/)有解(solvability condition on b):当且仅当/(b/)属于/(A/)的列空间时。另一种描述:如果/(A/)的各行线性组合得到/(0/)行,则/(b/)端分量做同样的线性组合,结果也为/(0/)时,方程才有解。

解法:令所有自由变量取/(0/),则有/(
/Big/lbrace
/begin{eqnarray*}
x_1 & + & 2x_3 & = & 1 //
& & 2x_3 & = & 3 //
/end{eqnarray*}
/)
,解得
/(
/Big/lbrace
/begin{eqnarray*}
x_1 & = & -2 //
x_3 & = & /frac{3}{2} //
/end{eqnarray*}
/)
,代入/(Ax=b/)求得特解
/(
x_p=
/begin{bmatrix}
-2 // 0 // /frac{3}{2} // 0
/end{bmatrix}
/)。

令/(Ax=b/)成立的所有解:

/[/Big/lbrace
/begin{eqnarray}
A & x_p & = & b //
A & x_n & = & 0 //
/end{eqnarray}
/quad
/underrightarrow{两式相加}
/quad
A(x_p+x_n)=b
/]

即/(Ax=b/)的解集为其特解加上零空间,对本例有:
/(
x_{complete}=
/begin{bmatrix}
-2 // 0 // /frac{3}{2} // 0
/end{bmatrix}
+
c_1/begin{bmatrix}-2//1//0//0///end{bmatrix}
+
c_2/begin{bmatrix}2//0//-2//1///end{bmatrix}
/)

对于/(m /times n/)矩阵/(A/),有矩阵/(A/)的秩/(r /leq min(m, n)/)

列满秩/(r=n/)情况:
/(
A=
/begin{bmatrix}
1 & 3 //
2 & 1 //
6 & 1 //
5 & 1 //
/end{bmatrix}
/)
,/(rank(A)=2/),要使/(Ax=b, b /neq 0/)有非零解,/(b/)必须取/(A/)中各列的线性组合,此时A的零空间中只有/(0/)向量。

行满秩/(r=m/)情况:
/(
A=
/begin{bmatrix}
1 & 2 & 6 & 5 //
3 & 1 & 1 & 1 //
/end{bmatrix}
/)
,/(rank(A)=2/),/(/forall b /in R^m都有x /neq 0的解/),因为此时/(A/)的列空间为/(R^m/),/(b /in R^m/)恒成立,组成/(A/)的零空间的自由变量有n-r个。

行列满秩情况:/(r=m=n/),如
/(
A=
/begin{bmatrix}
1 & 2 //
3 & 4 //
/end{bmatrix}
/)
,则/(A/)最终可以化简为/(R=I/),其零空间只包含/(0/)向量。

总结:

/[/begin{array}{c|c|c|c}r=m=n&r=n/lt m&r=m/lt n&r/lt m,r/lt n//R=I&R=/begin{bmatrix}I//0/end{bmatrix}&R=/begin{bmatrix}I&F/end{bmatrix}&R=/begin{bmatrix}I&F//0&0/end{bmatrix}//1/ solution&0/ or/ 1/ solution&/infty/ solution&0/ or/ /infty/ solution/end{array}
/]

第九讲:线性相关性、基、维数

/(v_1,/ v_2,/ /cdots,/ v_n/)是/(m/times n/)矩阵/(A/)的列向量:

如果/(A/)零空间中有且仅有/(0/)向量,则各向量线性无关,/(rank(A)=n/)。

如果存在非零向量/(c/)使得/(Ac=0/),则存在线性相关向量,/(rank(A)/lt n/)。

向量空间/(S/)中的一组基(basis),具有两个性质:

  1. 他们线性无关;
  2. 他们可以生成/(S/)。

对于向量空间/(/mathbb{R}^n/),如果/(n/)个向量组成的矩阵为可逆矩阵,则这/(n/)个向量为该空间的一组基,而数字/(n/)就是该空间的维数(dimension)。

举例:
/(
A=
/begin{bmatrix}
1 & 2 & 3 & 1 //
1 & 1 & 2 & 1 //
1 & 2 & 3 & 1 //
/end{bmatrix}
/)
,A的列向量线性相关,其零空间中有非零向量,所以/(rank(A)=2=主元存在的列数=列空间维数/)。

可以很容易的求得/(Ax=0/)的两个解,如
/(
x_1=
/begin{bmatrix}
-1 //
-1 //
1 //
0 //
/end{bmatrix},
x_2=
/begin{bmatrix}
-1 //
0 //
0 //
1 //
/end{bmatrix}
/),根据前几讲,我们知道特解的个数就是自由变量的个数,所以/(n-rank(A)=2=自由变量存在的列数=零空间维数/)

我们得到:列空间维数/(dim C(A)=rank(A)/),零空间维数/(dim N(A)=n-rank(A)/)

第十讲 四个基本子空间

对于/(m /times n/)矩阵/(A/),/(rank(A)=r/)有:

  • 行空间/(C(A^T) /in /mathbb{R}^n, dim C(A^T)=r/),基见例1。

  • 零空间/(N(A) /in /mathbb{R}^n, dim N(A)=n-r/),自由元所在的列即可组成零空间的一组基。

  • 列空间/(C(A) /in /mathbb{R}^m, dim C(A)=r/),主元所在的列即可组成列空间的一组基。

  • 左零空间/(N(A^T) /in /mathbb{R}^m, dim N(A^T)=m-r/),基见例2。

例1,对于行空间
/(
A=
/begin{bmatrix}
1 & 2 & 3 & 1 //
1 & 1 & 2 & 1 //
1 & 2 & 3 & 1 //
/end{bmatrix}
/underrightarrow{消元、化简}
/begin{bmatrix}
1 & 0 & 1 & 1 //
0 & 1 & 1 & 0 //
0 & 0 & 0 & 0 //
/end{bmatrix}
=R
/)

由于我们做了行变换,所以A的列空间受到影响,/(C(R) /neq C(A)/),而行变换并不影响行空间,所以可以在/(R/)中看出前两行就是行空间的一组基。

所以,可以得出无论对于矩阵/(A/)还是/(R/),其行空间的一组基,可以由/(R/)矩阵的前/(r/)行向量组成(这里的/(R/)就是第七讲提到的简化行阶梯形式)。

例2,对于左零空间,有/(A^Ty=0 /rightarrow (A^Ty)^T=0^T/rightarrow y^TA=0^T/),因此得名。

采用Gauss-Jordan消元,将增广矩阵/(/left[/begin{array}{c|c}A_{m /times n} & I_{m /times m}/end{array}/right]/)中/(A/)的部分划为简化行阶梯形式/(/left[/begin{array}{c|c}R_{m /times n} & E_{m /times m}/end{array}/right]/),此时矩阵/(E/)会将所有的行变换记录下来。

则/(EA=R/),而在前几讲中,有当/(A’/)是/(m/)阶可逆方阵时,/(R’/)即是/(I/),所以/(E/)就是/(A^{-1}/)。

本例中

/[/left[/begin{array}{c|c}A_{m /times n} & I_{m /times m}/end{array}/right]=
/left[
/begin{array}
{c c c c|c c c}
1 & 2 & 3 & 1 & 1 & 0 & 0 //
1 & 1 & 2 & 1 & 0 & 1 & 0 //
1 & 2 & 3 & 1 & 0 & 0 & 1 //
/end{array}
/right]
/underrightarrow{消元、化简}
/left[
/begin{array}
{c c c c|c c c}
1 & 0 & 1 & 1 & -1 & 2 & 0 //
0 & 1 & 1 & 0 & 1 & -1 & 0 //
0 & 0 & 0 & 0 & -1 & 0 & 1 //
/end{array}
/right]
=/left[/begin{array}{c|c}R_{m /times n} & E_{m /times m}/end{array}/right]
/]

/[EA=
/begin{bmatrix}
-1 & 2 & 0 //
1 & -1 & 0 //
-1 & 0 & 1 //
/end{bmatrix}
/cdot
/begin{bmatrix}
1 & 2 & 3 & 1 //
1 & 1 & 2 & 1 //
1 & 2 & 3 & 1 //
/end{bmatrix}
=
/begin{bmatrix}
1 & 0 & 1 & 1 //
0 & 1 & 1 & 0 //
0 & 0 & 0 & 0 //
/end{bmatrix}
=R
/]

很明显,式中/(E/)的最后一行对/(A/)的行做线性组合后,得到/(R/)的最后一行,即/(0/)向量,也就是/(y^TA=0^T/)。

最后,引入矩阵空间的概念,矩阵可以同向量一样,做求和、数乘。

举例,设所有/(3 /times 3/)矩阵组成的矩阵空间为/(M/)。则上三角矩阵、对称矩阵、对角矩阵(前两者的交集)。

观察一下对角矩阵,如果取
/(
/begin{bmatrix}
1 & 0 & 0 //
0 & 0 & 0 //
0 & 0 & 0 //
/end{bmatrix} /quad
/begin{bmatrix}
1 & 0 & 0 //
0 & 3 & 0 //
0 & 0 & 0 //
/end{bmatrix} /quad
/begin{bmatrix}
0 & 0 & 0 //
0 & 0 & 0 //
0 & 0 & 7 //
/end{bmatrix}
/)
,可以发现,任何三阶对角矩阵均可用这三个矩阵的线性组合生成,因此,他们生成了三阶对角矩阵空间,即这三个矩阵是三阶对角矩阵空间的一组基。

第十一讲:矩阵空间、秩1矩阵和小世界图

矩阵空间

接上一讲,使用/(3 /times 3/)矩阵举例,其矩阵空间记为/(M/)。

则/(M/)的一组基为:
/(
/begin{bmatrix}
1 & 0 & 0 //
0 & 0 & 0 //
0 & 0 & 0 //
/end{bmatrix}
/begin{bmatrix}
0 & 1 & 0 //
0 & 0 & 0 //
0 & 0 & 0 //
/end{bmatrix}
/begin{bmatrix}
0 & 0 & 1 //
0 & 0 & 0 //
0 & 0 & 0 //
/end{bmatrix} //
/begin{bmatrix}
0 & 0 & 0 //
1 & 0 & 0 //
0 & 0 & 0 //
/end{bmatrix}
/begin{bmatrix}
0 & 0 & 0 //
0 & 1 & 0 //
0 & 0 & 0 //
/end{bmatrix}
/begin{bmatrix}
0 & 0 & 0 //
0 & 0 & 1 //
0 & 0 & 0 //
/end{bmatrix} //
/begin{bmatrix}
0 & 0 & 0 //
0 & 0 & 0 //
1 & 0 & 0 //
/end{bmatrix}
/begin{bmatrix}
0 & 0 & 0 //
0 & 0 & 0 //
0 & 1 & 0 //
/end{bmatrix}
/begin{bmatrix}
0 & 0 & 0 //
0 & 0 & 0 //
0 & 0 & 1 //
/end{bmatrix} //
/)

易得,/(dim M=9/)。

所以可以得出,对上讲中的三阶对称矩阵空间有/(dim S=6/)、上三角矩阵空间有/(dim U=6/)、对角矩阵空间有/(dim D=3/)

求并(intersect):/(S /cup U=D, dim(S /cup U)=9/);

求交(sum):/(S /cap U=M, dim(S /cap U)=3/);

可以看出:/(dim S + dim U=12=dim(S /cup U) + dim(S /cap U)/)。

另一个例子来自微分方程:

/(/frac{d^2y}{dx^2}+y=0/),即/(y”+y=0/)

方程的解有:/(y=/cos{x}, /quad y=/sin{x}, /quad y=e^{ix}, /quad y=e^{-ix}/)等等(/(e^{ix}=/cos{x}+i/sin{x}, /quad e^{-ix}=/cos{x}-i/sin{x}/))

而该方程的所有解:/(y=c_1 /cos{x} + c_2 /sin{x}/)。

所以,该方程的零空间的一组基为/(/cos{x}, /sin{x}/),零空间的维数为/(2/)。同理/(e^{ix}, e^{-ix}/)可以作为另一组基。

秩一矩阵

/(2 /times 3/)矩阵/(A=/begin{bmatrix}1&4&5//2&8&10/end{bmatrix}=/begin{bmatrix}1//2/end{bmatrix}/begin{bmatrix}1&4&5/end{bmatrix}/)。

且/(dimC(A)=1=dimC(A^T)/),所有的秩一矩阵都可以划为/(A=UV^T/)的形式,这里的/(U, V/)均为列向量。

秩一矩阵类似“积木”,可以搭建任何矩阵,如对于一个/(5 /times 17/)秩为/(4/)的矩阵,只需要/(4/)个秩一矩阵就可以组合出来。

令/(M/)代表所有/(5 /times 17/),/(M/)中所有秩/(4/)矩阵组成的集合并不是一个子空间,通常两个秩四矩阵相加,其结果并不是秩四矩阵。

现在,在/(/mathbb{R}^4/)空间中有向量/(v=/begin{bmatrix}v_1//v_2//v_3//v_4/end{bmatrix}/),取/(/mathbb{R}^4/)中满足/(v_1+v_2+v_3+v_4=0/)的所有向量组成一个向量空间/(S/),则/(S/)是一个向量子空间。

易看出,不论是使用系数乘以该向量,或是用两个满足条件的向量相加,其结果仍然落在分量和为零的向量空间中。

求/(S/)的维数:

从另一个角度看,/(v_1+v_2+v_3+v_4=0/)等价于/(/begin{bmatrix}1&1&1&1/end{bmatrix}/begin{bmatrix}v_1//v_2//v_3//v_4/end{bmatrix}=0/),则/(S/)就是/(A=/begin{bmatrix}1&1&1&1/end{bmatrix}/)的零空间。

/(rank(A)=1/),则对其零空间有/(rank(N(A))=n-r=3=dim N(A)/),则/(S/)的维数是/(3/)。

顺便看一下/(1 /times 4/)矩阵/(A/)的四个基本子空间:

行空间:/(dim C(A^T)=1/),其中的一组基是/(/begin{bmatrix}1//1//1//1/end{bmatrix}/);

零空间:/(dim N(A)=3/),其中的一组基是/(/begin{bmatrix}-1//1//0//0/end{bmatrix}/begin{bmatrix}-1//0//1//0/end{bmatrix}/begin{bmatrix}-1//0//0//1/end{bmatrix}/)

列空间:/(dim C(A)=1/),其中一组基是/(/begin{bmatrix}1/end{bmatrix}/),可以看出列空间就是整个/(/mathbb{R}^1/)空间。

左零空间:/(dim N(A^T)=0/),因为/(A/)转置后没有非零的/(v/)可以使/(Av=0/)成立,就是/(/begin{bmatrix}0/end{bmatrix}/)。

综上,/(dim C(A^T)+dim N(A)=4=n, dim C(A)+dim N(A^T)=1=m/)

小世界图

图(graph)由节点(node)与边(edge)组成。

假设,每个人是图中的一个节点,如果两个人为朋友关系,则在这两个人的节点间添加一条边,通常来说,从一个节点到另一个节点只需要不超过/(6/)步(即六条边)即可到达。

第十二讲:图和网络

图和网络

import networkx as nx
import matplotlib.pyplot as plt
%matplotlib inline

dg = nx.DiGraph()
dg.add_edges_from([(1,2), (2,3), (1,3), (1,4), (3,4)])
edge_labels = {(1, 2): 1, (1, 3): 3, (1, 4): 4, (2, 3): 2, (3, 4): 5}

pos = nx.spring_layout(dg)
nx.draw_networkx_edge_labels(dg,pos,edge_labels=edge_labels, font_size=16)
nx.draw_networkx_labels(dg, pos, font_size=20, font_color='w')
nx.draw(dg, pos, node_size=1500, node_color="gray")

png

该图由4个节点与5条边组成,

/[/begin{array}{c | c c c c}
& node_1 & node_2 & node_3 & node_4 //
/hline
edge_1 & -1 & 1 & 0 & 0 //
edge_2 & 0 & -1 & 1 & 0 //
edge_3 & -1 & 0 & 1 & 0 //
edge_4 & -1 & 0 & 0 & 1 //
edge_5 & 0 & 0 & -1 & 1 //
/end{array}
/]

我们可以建立/(5 /times 4/)矩阵
/(
A=
/begin{bmatrix}
-1 & 1 & 0 & 0 //
0 & -1 & 1 & 0 //
-1 & 0 & 1 & 0 //
-1 & 0 & 0 & 1 //
0 & 0 & -1 & 1 //
/end{bmatrix}
/)

观察前三行,易看出这三个行向量线性相关,也就是这三个向量可以形成回路(loop)。

现在,解/(Ax=0/):
/(
Ax=
/begin{bmatrix}
-1 & 1 & 0 & 0 //
0 & -1 & 1 & 0 //
-1 & 0 & 1 & 0 //
-1 & 0 & 0 & 1 //
0 & 0 & -1 & 1 //
/end{bmatrix}
/begin{bmatrix}
x_1//x_2//x_3//x_4//
/end{bmatrix}
/)。

展开得到:
/(/begin{bmatrix}x_2-x_1 //x_3-x_2 //x_3-x_1 //x_4-x_1 //x_4-x_3 // /end{bmatrix}=/begin{bmatrix}0//0//0//0//0// /end{bmatrix}/)

引入矩阵的实际意义:将/(x=/begin{bmatrix}x_1 & x_2 & x_3 & x_4/end{bmatrix}/)设为各节点电势(Potential at the Nodes)。

则式子中的诸如/(x_2-x_1/)的元素,可以看做该边上的电势差(Potential Differences)。

容易看出其中一个解/(x=/begin{bmatrix}1//1//1//1/end{bmatrix}/),即等电势情况,此时电势差为/(0/)。

化简/(A/)易得/(rank(A)=3/),所以其零空间维数应为/(n-r=4-3=1/),即/(/begin{bmatrix}1//1//1//1/end{bmatrix}/)就是其零空间的一组基。

其零空间的物理意义为,当电位相等时,不存在电势差,图中无电流。

当我们把图中节点/(4/)接地后,节点/(4/)上的电势为/(0/),此时的
/(
A=
/begin{bmatrix}
-1 & 1 & 0 //
0 & -1 & 1 //
-1 & 0 & 1 //
-1 & 0 & 0 //
0 & 0 & -1 //
/end{bmatrix}
/),各列线性无关,/(rank(A)=3/)。

现在看看/(A^Ty=0/)(这是应用数学里最常用的式子):

/(A^Ty=0=/begin{bmatrix}-1 & 0 & -1 & -1 & 0 //1 & -1 & 0 & 0 & 0 //0 & 1 & 1 & 0 & -1 //0 & 0 & 0 & 1 & 1 // /end{bmatrix}/begin{bmatrix}y_1//y_2//y_3//y_4//y_5/end{bmatrix}=/begin{bmatrix}0//0//0//0/end{bmatrix}/),对于转置矩阵有/(dim N(A^T)=m-r=5-3=2/)。

接着说上文提到的的电势差,矩阵/(C/)将电势差与电流联系起来,电流与电势差的关系服从欧姆定律:边上的电流值是电势差的倍数,这个倍数就是边的电导(conductance)即电阻(resistance)的倒数。

/(
电势差
/xrightarrow[欧姆定律]{矩阵C}
各边上的电流y_1, y_2, y_3, y_4, y_5
/),而/(A^Ty=0/)的另一个名字叫做“基尔霍夫电流定律”(Kirchoff’s Law, 简称KCL)。

再把图拿下来观察:

import networkx as nx
import matplotlib.pyplot as plt
%matplotlib inline

dg = nx.DiGraph()
dg.add_edges_from([(1,2), (2,3), (1,3), (1,4), (3,4)])
edge_labels = {(1, 2): 1, (1, 3): 3, (1, 4): 4, (2, 3): 2, (3, 4): 5}

pos = nx.spring_layout(dg)
nx.draw_networkx_edge_labels(dg,pos,edge_labels=edge_labels, font_size=16)
nx.draw_networkx_labels(dg, pos, font_size=20, font_color='w')
nx.draw(dg, pos, node_size=1500, node_color="gray")

png

将/(A^Ty=0/)中的方程列出来:
/(
/left/{
/begin{aligned}
y_1 + y_3 + y_4 &= 0 //
y_1 – y_2 &= 0 //
y_2 + y_3 – y_5 &= 0 //
y_4 – y_5 &= 0 //
/end{aligned}
/right.
/)

对比看/(A^Ty=0/)的第一个方程,/(-y_1-y_3-y_4=0/),可以看出这个方程是关于节点/(1/)上的电流的,方程指出节点/(1/)上的电流和为零,基尔霍夫定律是一个平衡方程、守恒定律,它说明了流入等于流出,电荷不会在节点上累积。

对于/(A^T/),有上文得出其零空间的维数是/(2/),则零空间的基应该有两个向量。

  • 现在假设/(y_1=1/),也就是令/(1/)安培的电流在边/(1/)上流动;
  • 由图看出/(y_2/)也应该为/(1/);
  • 再令/(y_3=-1/),也就是让/(1/)安培的电流流回节点/(1/);
  • 令/(y_4=y_5=0/);

得到一个符合KCL的向量/(/begin{bmatrix}1//1//-1//0//0/end{bmatrix}/),代回方程组发现此向量即为一个解,这个解发生在节点/(1,2,3/)组成的回路中,该解即为零空间的一个基。

根据上一个基的经验,可以利用/(1,3,4/)组成的节点求另一个基:

  • 令/(y_1=y_2=0/);
  • 令/(y_3=1/);
  • 由图得/(y_5=1/);
  • 令/(y_4=-1/);

得到令一个符合KCL的向量/(/begin{bmatrix}0//0//1//-1//1/end{bmatrix}/),代回方程可知此为另一个解。

则/(N(A^T)/)的一组基为/(/begin{bmatrix}1//1//-1//0//0/end{bmatrix}/quad/begin{bmatrix}0//0//1//-1//1/end{bmatrix}/)。

看图,利用节点/(1,2,3,4/)组成的大回路(即边/(1,2,5,4/)):

  • 令/(y_3=0/);
  • 令/(y_1=1/);
  • 则由图得/(y_2=1, y_5=1, y_4=-1/);

得到符合KCL的向量/(/begin{bmatrix}1//1//0//-1//1/end{bmatrix}/),易看出此向量为求得的两个基之和。

接下来观察/(A/)的行空间,即/(A^T/)的列空间,方便起见我们直接计算
/(
A^T=
/begin{bmatrix}
-1 & 0 & -1 & -1 & 0 //
1 & -1 & 0 & 0 & 0 //
0 & 1 & 1 & 0 & -1 //
0 & 0 & 0 & 1 & 1 //
/end{bmatrix}
/)
的列空间。

易从基的第一个向量看出前三列/(A^T/)的线性相关,则/(A^T/)的主列为第/(1,2,4/)列,对应在图中就是边/(1,2,4/),可以发现这三条边没有组成回路,则在这里可以说线性无关等价于没有回路。由/(4/)个节点与/(3/)条边组成的图没有回路,就表明/(A^T/)的对应列向量线性无关,也就是节点数减一(/(rank=nodes-1/))条边线性无关。另外,没有回路的图也叫作树(Tree)。

再看左零空间的维数公式:/(dim N(A^T)=m-r/),左零空间的维数就是相互无关的回路的数量,于是得到/(loops=edges-(nodes-1)/),整理得:

/[nodes-edges+loops=1
/]

此等式对任何图均有效,任何图都有此拓扑性质,这就是著名的欧拉公式(Euler’s Formula)。/(零维(节点)-一维(边)+二维(回路)=1/)便于记忆。

总结:

  • 将电势记为/(e/),则在引入电势的第一步中,有/(e=Ax/);
  • 电势差导致电流产生,/(y=Ce/);
  • 电流满足基尔霍夫定律方程,/(A^Ty=0/);

这些是在无电源情况下的方程。

电源可以通过:在边上加电池(电压源),或在节点上加外部电流 两种方式接入。

如果在边上加电池,会体现在/(e=Ax/)中;如果在节点上加电流,会体现在/(A^Ty=f/)中,/(f/)向量就是外部电流。

将以上三个等式连起来得到/(A^TCAx=f/)。另外,最后一个方程是一个平衡方程,还需要注意的是,方程仅描述平衡状态,方程并不考虑时间。最后,/(A^TA/)是一个对称矩阵。

第十三讲:复习一

  1. 令/(u, v, w/)是/(/mathbb{R}^7/)空间内的非零向量:则/(u, v, w/)生成的向量空间可能是/(1, 2, 3/)维的。

  2. 有一个/(5 /times 3/)矩阵/(U/),该矩阵为阶梯矩阵(echelon form),有/(3/)个主元:则能够得到该矩阵的秩为/(3/),即三列向量线性无关,不存在非零向量使得三列的线性组合为零向量,所以该矩阵的零空间应为/(/begin{bmatrix}0//0//0// /end{bmatrix}/)。

  3. 接上一问,有一个/(10 /times 3/)矩阵/(B=/begin{bmatrix}U//2U /end{bmatrix}/),则化为最简形式(阶梯矩阵)应为/(/begin{bmatrix}U//0 /end{bmatrix}/),/(rank(B)=3/)。

  4. 接上一问,有一个矩阵型为/(C=/begin{bmatrix}U & U // U & 0 /end{bmatrix}/),则化为最简形式应为/(/begin{bmatrix}U & 0 // 0 & U /end{bmatrix}/),/(rank(C)=6/)。矩阵/(C/)为/(10 /times 6/)矩阵,/(dim N(C^T)=m-r=4/)。

  5. 有/(Ax=/begin{bmatrix}2//4//2// /end{bmatrix}/),并且/(x=/begin{bmatrix}2//0//0// /end{bmatrix}+c/begin{bmatrix}1//1//0// /end{bmatrix}+d/begin{bmatrix}0//0//1 /end{bmatrix}/),则等号右侧/(b/)向量的列数应为/(A/)的行数,且解的列数应为/(A/)的列数,所以/(A/)是一个/(3 /times 3/)矩阵。从解的结构可知自由元有两个,则/(rank(A)=1, dim N(A)=2/)。从解的第一个向量得出,矩阵/(A/)的第一列是/(/begin{bmatrix}1//2//1 /end{bmatrix}/);解的第二个向量在零空间中,说明第二列与第一列符号相反,所以矩阵第二列是/(/begin{bmatrix}-1//-2//-1 /end{bmatrix}/);解的第三个向量在零空间中,说明第三列为零向量;综上,/(A=/begin{bmatrix}1 & -1 & 0// 2 & -2 & 0// 1 & -1 & 0// /end{bmatrix}/)。

  6. 接上一问,如何使得/(Ax=b/)有解?即使/(b/)在矩阵/(A/)的列空间中。易知/(A/)的列空间型为/(c/begin{bmatrix}1//2//1// /end{bmatrix}/),所以使/(b/)为向量/(/begin{bmatrix}1//2//1// /end{bmatrix}/)的倍数即可。

  7. 有一方阵的零空间中只有零向量,则其左零空间也只有零向量。

  8. 由/(5 /times 5/)矩阵组成的矩阵空间,其中的可逆矩阵能否构成子空间?两个可逆矩阵相加的结果并不一定可逆,况且零矩阵本身并不包含在可逆矩阵中。其中的奇异矩阵(singular matrix,非可逆矩阵)也不能组成子空间,因为其相加的结果并不一定能够保持不可逆。

  9. 如果/(B^2=0/),并不能得出/(B=0/),反例:/(/begin{bmatrix}0 & 1// 0 & 0// /end{bmatrix}/),这个矩阵经常会被用作反例

  10. /(n /times n/)矩阵的列向量线性无关,则是否/(/forall b, Ax=b/)有解?是的,因为方阵各列线性无关,所以方阵满秩,它是可逆矩阵,肯定有解。


  11. /(
    B=
    /begin{bmatrix}
    1 & 1 & 0 //
    0 & 1 & 0 //
    1 & 0 & 1 //
    /end{bmatrix}
    /begin{bmatrix}
    1 & 0 & -1 & 2 //
    0 & 1 & 1 & -1 //
    0 & 0 & 0 & 0 //
    /end{bmatrix}
    /),在不解出/(B/)的情况下,求/(B/)的零空间。可以观察得出前一个矩阵是可逆矩阵,设/(B=CD/),则求零空间/(Bx=0, CDx=0/),而/(C/)是可逆矩阵,则等式两侧同时乘以/(C^{-1}/)有/(C^{-1}CDx=Dx=0/),所以当/(C/)为可逆矩阵时,有/(N(CD)=N(D)/),即左乘逆矩阵不会改变零空间。本题转化为求/(D/)的零空间,/(N(B)/)的基为
    /(/begin{bmatrix}-F//I// /end{bmatrix}/),也就是/(/begin{bmatrix}1//-1//1//0 /end{bmatrix}/quad/begin{bmatrix}-2//1//0//1/end{bmatrix}/)

  12. 接上题,求/(Bx=/begin{bmatrix}1//0//1// /end{bmatrix}/)的通解。观察/(B=CD/),易得/(B/)矩阵的第一列为/(/begin{bmatrix}1//0//1// /end{bmatrix}/),恰好与等式右边一样,所以/(/begin{bmatrix}1//0//0//0// /end{bmatrix}/)可以作为通解中的特解部分,再利用上一问中求得的零空间的基,得到通解
    /(
    x=
    /begin{bmatrix}1//0//0//0// /end{bmatrix}+
    c_1/begin{bmatrix}1//-1//1//0 /end{bmatrix}+c_2/begin{bmatrix}-2//1//0//1/end{bmatrix}
    /)

  13. 对于任意方阵,其行空间等于列空间?不成立,可以使用/(/begin{bmatrix}0 & 1// 0 & 0// /end{bmatrix}/)作为反例,其行空间是向量/(/begin{bmatrix}0 & 1// /end{bmatrix}/)的任意倍数,而列空间是向量/(/begin{bmatrix}1 & 0// /end{bmatrix}/)的任意倍数。但是如果该方阵是对称矩阵,则成立。

  14. /(A/)与/(-A/)的四个基本子空间相同。

  15. 如果/(A, B/)的四个基本子空间相同,则/(A, B/)互为倍数关系。不成立,如任意两个/(n/)阶可逆矩阵,他们的列空间、行空间均为/(/mathbb{R}^n/),他们的零空间、左零空间都只有零向量,所以他们的四个基本子空间相同,但是并不一定具有倍数关系。

  16. 如果交换矩阵的某两行,则其行空间与零空间保持不变,而列空间与左零空间均已改变。

  17. 为什么向量/(v=/begin{bmatrix}1//2//3 /end{bmatrix}/)不能同时出现在矩阵的行空间与零空间中?令/(A/begin{bmatrix}1//2//3 /end{bmatrix}=/begin{bmatrix}0//0//0 /end{bmatrix}/),很明显矩阵/(A/)中不能出现值为/(/begin{bmatrix}1 & 2 & 3 /end{bmatrix}/)的行向量,否则无法形成等式右侧的零向量。这里引入正交(perpendicular)的概念,矩阵的行空间与零空间正交,它们仅共享零向量。

第十四讲:正交向量与子空间

在四个基本子空间中,提到对于秩为r的/(m /times n/)矩阵,其行空间(/(dim C(A^T)=r/))与零空间(/(dim N(A)=n-r/))同属于/(/mathbb{R}^n/)空间,其列空间(/(dim C(A)=r/))与左零空间(/(dim N(A^T)/)=m-r)同属于/(/mathbb{R}^m/)空间。

对于向量/(x, y/),当/(x^T /cdot y=0/)即/(x_1y_1+x_2y_x+/cdots+x_ny_n=0/)时,有向量/(x, y/)正交(vector orthogonal)。

毕达哥拉斯定理(Pythagorean theorem)中提到,直角三角形的三条边满足:

/[/begin{aligned}
/left/|/overrightarrow{x}/right/|^2+/left/|/overrightarrow{y}/right/|^2 &= /left/|/overrightarrow{x+y}/right/|^2 //
x^Tx+y^Ty &= (x+y)^T(x+y) //
x^Tx+y^Ty &= x^Tx+y^Ty+x^Ty+y^Tx //
0 &= x^Ty+y^Tx /qquad 对于向量点乘,x^Ty=y^Tx //
0 &= 2x^Ty //
x^Ty &=0
/end{aligned}
/]

由此得出,两正交向量的点积为/(0/)。另外,/(x, y/)可以为/(0/)向量,由于/(0/)向量与任意向量的点积均为零,所以/(0/)向量与任意向量正交。

举个例子:
/(x=/begin{bmatrix}1//2//3/end{bmatrix}, y=/begin{bmatrix}2//-1//0/end{bmatrix}, x+y=/begin{bmatrix}3//1//3/end{bmatrix}/),有/(/left/| /overrightarrow{x} /right/|^2=14, /left/| /overrightarrow{y} /right/|^2=5, /left/| /overrightarrow{x+y} /right/|^2=19/),而/(x^Ty=1/times2+2/times (-1)+3/times0=0/)。

向量/(S/)与向量/(T/)正交,则意味着/(S/)中的每一个向量都与/(T/)中的每一个向量正交。若两个子空间正交,则它们一定不会相交于某个非零向量。

现在观察行空间与零空间,零空间是/(Ax=0/)的解,即/(x/)若在零空间,则/(Ax/)为零向量;

而对于行空间,有 /(
/begin{bmatrix}row_1//row_2// /vdots //row_m/end{bmatrix}
/Bigg[x/Bigg]=
/begin{bmatrix}0//0// /vdots// 0/end{bmatrix}
/),可以看出:

/[/begin{bmatrix}row_1/end{bmatrix}/Bigg[x/Bigg]=0 //
/begin{bmatrix}row_2/end{bmatrix}/Bigg[x/Bigg]=0 //
/vdots //
/begin{bmatrix}row_m/end{bmatrix}/Bigg[x/Bigg]=0 //
/]

所以这个等式告诉我们,/(x/)同/(A/)中的所有行正交;

接下来还验证/(x/)是否与/(A/)中各行的线性组合正交,
/(
/begin{cases}
c_1(row_1)^Tx=0 //
c_2(row_2)^Tx=0 //
/vdots //
c_n(row_m)^Tx=0 //
/end{cases}
/),各式相加得/((c_1row_1+c_2row_2+/cdots+c_nrow_m)^Tx=0/),得证。

我们可以说,行空间与零空间将/(/mathbb{R}^n/)分割为两个正交的子空间,同样的,列空间与左零空间将/(/mathbb{R}^m/)分割为两个正交的子空间。

举例,/(A=/begin{bmatrix}1&2&5//2&4&10/end{bmatrix}/),则可知/(m=2, n=3, rank(A)=1, dim N(A)=2/)。

有/(Ax=/begin{bmatrix}1&2&5//2&4&10/end{bmatrix}/begin{bmatrix}x_1//x_2//x_3/end{bmatrix}=/begin{bmatrix}0//0/end{bmatrix}/),解得零空间的一组基/(x_1=/begin{bmatrix}-2//1//0/end{bmatrix}/quad x_2=/begin{bmatrix}-5//0//1/end{bmatrix}/)。

而行空间的一组基为/(r=/begin{bmatrix}1//2//5/end{bmatrix}/),零空间与行空间正交,在本例中行空间也是零空间的法向量。

补充一点,我们把行空间与零空间称为/(n/)维空间里的正交补(orthogonal complement),即零空间包含了所有与行空间正交的向量;同理列空间与左零空间为/(m/)维空间里的正交补,即左零空间包含了所有与零空间正交的向量。

接下来看长方矩阵,/(m>n/)。对于这种矩阵,/(Ax=b/)中经常混入一些包含“坏数据”的方程,虽然可以通过筛选的方法去掉一些我们不希望看到的方程,但是这并不是一个稳妥的方法。

于是,我们引入一个重要的矩阵:/(A^TA/)。这是一个/(n /times m/)矩阵点乘/(m /times n/)矩阵,其结果是一个/(n /times n/)矩阵,应该注意的是,这也是一个对称矩阵,证明如下:

/[(A^TA)^T=A^T(A^T)^T=A^TA
/]

这一章节的核心就是/(A^TAx=A^Tb/),这个变换可以将“坏方程组”变为“好方程组”。

举例,有/(/begin{bmatrix}1&1//1&2//1&5/end{bmatrix}/begin{bmatrix}x_1//x_2/end{bmatrix}=/begin{bmatrix}b_1//b_2//b_3/end{bmatrix}/),只有当/(/begin{bmatrix}b_1//b_2//b_3/end{bmatrix}/)在矩阵的列空间时,方程才有解。

现在来看/(/begin{bmatrix}1&1&1//1&2&5/end{bmatrix}/begin{bmatrix}1&1//1&2//1&5/end{bmatrix}=/begin{bmatrix}3&8//8&30/end{bmatrix}/),可以看出此例中/(A^TA/)是可逆的。然而并非所有/(A^TA/)都是可逆的,如/(/begin{bmatrix}1&1&1//3&3&3/end{bmatrix}/begin{bmatrix}1&3//1&3//1&3/end{bmatrix}=/begin{bmatrix}3&9//9&27/end{bmatrix}/)(注意到这是两个秩一矩阵相乘,其结果秩不会大于一)

先给出结论:

/[N(A^TA)=N(A)//
rank(A^TA)=rank(A)//
A^TA可逆当且仅当N(A)为零向量,即A的列线性无关//
/]

下一讲涉及投影,很重要。

第十五讲:子空间投影

从/(/mathbb{R}^2/)空间讲起,有向量/(a, b/),做/(b/)在/(a/)上的投影/(p/),如图:

%matplotlib inline
import matplotlib.pyplot as plt
import numpy as np
import pandas as pd

plt.style.use("seaborn-dark-palette")

fig = plt.figure()
plt.axis('equal')
plt.axis([-7, 7, -6, 6])
plt.arrow(-4, -1, 8, 2, head_width=0.3, head_length=0.5, color='r', length_includes_head=True)
plt.arrow(0, 0, 2, 4, head_width=0.3, head_length=0.5, color='b', length_includes_head=True)
plt.arrow(0, 0, 48/17, 12/17, head_width=0.3, head_length=0.5, color='gray', length_includes_head=True)
plt.arrow(48/17, 12/17, 2-48/17, 4-12/17, head_width=0.3, head_length=0.5, color='g', length_includes_head=True)
# plt.plot([48/17], [12/17], 'o')
# y=1/4x
# y=-4x+12
# x=48/17
# y=12/17
plt.annotate('b', xy=(1, 2), xytext=(-30, 15), textcoords='offset points', size=20, arrowprops=dict(arrowstyle="->"))
plt.annotate('a', xy=(-1, -0.25), xytext=(15, -30), textcoords='offset points', size=20, arrowprops=dict(arrowstyle="->"))
plt.annotate('e=b-p', xy=(2.5, 2), xytext=(30, 0), textcoords='offset points', size=20, arrowprops=dict(arrowstyle="->"))
plt.annotate('p=xa', xy=(2, 0.5), xytext=(-20, -40), textcoords='offset points', size=20, arrowprops=dict(arrowstyle="->"))
plt.grid()

png

plt.close(fig)

从图中我们知道,向量/(e/)就像是向量/(b, p/)之间的误差,/(e=b-p, e /bot p/)。/(p/)在/(a/)上,有/(/underline{p=ax}/)。

所以有/(a^Te=a^T(b-p)=a^T(b-ax)=0/)。关于正交的最重要的方程:

/[a^T(b-xa)=0 //
/underline{xa^Ta=a^Tb} //
/underline{x=/frac{a^Tb}{a^Ta}} //
p=a/frac{a^Tb}{a^Ta}
/]

从上面的式子可以看出,如果将/(b/)变为/(2b/)则/(p/)也会翻倍,如果将/(a/)变为/(2a/)则/(p/)不变。

设投影矩阵为/(P/),则可以说投影矩阵作用与某个向量后,得到其投影向量,/(projection_p=Pb/)。

易看出/(/underline{P=/frac{aa^T}{a^Ta}}/),若/(a/)是/(n/)维列向量,则/(P/)是一个/(n /times n/)矩阵。

观察投影矩阵/(P/)的列空间,/(C(P)/)是一条通过/(a/)的直线,而/(rank(P)=1/)(一列乘以一行:/(aa^T/),而这一列向量/(a/)是该矩阵的基)。

投影矩阵的性质:

  • /(/underline{P=P^T}/),投影矩阵是一个对称矩阵。
  • 如果对一个向量做两次投影,即/(PPb/),则其结果仍然与/(Pb/)相同,也就是/(/underline{P^2=P}/)。

为什么我们需要投影?因为就像上一讲中提到的,有些时候/(Ax=b/)无解,我们只能求出最接近的那个解。

/(Ax/)总是在/(A/)的列空间中,而/(b/)却不一定,这是问题所在,所以我们可以将/(b/)变为/(A/)的列空间中最接近的那个向量,即将无解的/(Ax=b/)变为求有解的/(A/hat{x}=p/)(/(p/)是/(b/)在/(A/)的列空间中的投影,/(/hat{x}/)不再是那个不存在的/(x/),而是最接近的解)。

现在来看/(/mathbb{R}^3/)中的情形,将向量/(b/)投影在平面/(A/)上。同样的,/(p/)是向量/(b/)在平面/(A/)上的投影,/(e/)是垂直于平面/(A/)的向量,即/(b/)在平面/(A/)法方向的分量。
设平面/(A/)的一组基为/(a_1, a_2/),则投影向量/(p=/hat{x_1}a_1+/hat{x_2}a_2/),我们更倾向于写作/(p=A/hat{x}/),这里如果我们求出/(/hat{x}/),则该解就是无解方程组最近似的解。

现在问题的关键在于找/(e=b-A/hat{x}/),使它垂直于平面,因此我们得到两个方程
/(
/begin{cases}a_1^T(b-A/hat{x})=0//
a_2^T(b-A/hat{x})=0/end{cases}
/),将方程组写成矩阵形式
/(
/begin{bmatrix}a_1^T//a_2^T/end{bmatrix}
(b-A/hat{x})=
/begin{bmatrix}0//0/end{bmatrix}
/),即/(A^T(b-A/hat{x})=0/)。

比较该方程与/(/mathbb{R}^2/)中的投影方程,发现只是向量/(a/)变为矩阵/(A/)而已,本质上就是/(A^Te=0/)。所以,/(e/)在/(A^T/)的零空间中(/(e/in N(A^T)/)),从前面几讲我们知道,左零空间/(/bot/)列空间,则有/(e/bot C(A)/),与我们设想的一致。

再化简方程得/(A^TAx=A^Tb/),比较在/(/mathbb{R}^2/)中的情形,/(a^Ta/)是一个数字而/(A^TA/)是一个/(n/)阶方阵,而解出的/(x/)可以看做两个数字的比值。现在在/(/mathbb{R}^3/)中,我们需要再次考虑:什么是/(/hat{x}/)?投影是什么?投影矩阵又是什么?

  • 第一个问题:/(/hat x=(A^TA)^{-1}A^Tb/);
  • 第二个问题:/(p=A/hat x=/underline{A(A^TA)^{-1}A^T}b/),回忆在/(/mathbb{R}^2/)中的情形,下划线部分就是原来的/(/frac{aa^T}{a^Ta}/);
  • 第三个问题:易看出投影矩阵就是下划线部分/(P=A(A^TA)^{-1}A^T/)。

这里还需要注意一个问题,/(P=A(A^TA)^{-1}A^T/)是不能继续化简为/(P=AA^{-1}(A^T)^{-1}A^T=I/)的,因为这里的/(A/)并不是一个可逆方阵。
也可以换一种思路,如果/(A/)是一个/(n/)阶可逆方阵,则/(A/)的列空间是整个/(/mathbb{R}^n/)空间,于是/(b/)在/(/mathbb{R}^n/)上的投影矩阵确实变为了/(I/),因为/(b/)已经在空间中了,其投影不再改变。

再来看投影矩阵/(P/)的性质:

  • /(P=P^T/):有
    /(
    /left[A(A^TA)^{-1}A^T/right]^T=A/left[(A^TA)^{-1}/right]^TA^T
    /),而/((A^TA)/)是对称的,所以其逆也是对称的,所以有/(A((A^TA)^{-1})^TA^T=A(A^TA)^{-1}A^T/),得证。
  • /(P^2=P/):有
    /(
    /left[A(A^TA)^{-1}A^T/right]/left[A(A^TA)^{-1}A^T/right]=A(A^TA)^{-1}/left[(A^TA)(A^TA)^{-1}/right]A^T=A(A^TA)^{-1}A^T
    /),得证。

最小二乘法

接下看看投影的经典应用案例:最小二乘法拟合直线(least squares fitting by a line)。

我们需要找到距离图中三个点 /((1, 1), (2, 2), (3, 2)/) 偏差最小的直线:/(b=C+Dt/)。

plt.style.use("seaborn-dark-palette")

fig = plt.figure()
plt.axis('equal')
plt.axis([-1, 4, -1, 3])
plt.axhline(y=0, c='black', lw='2')
plt.axvline(x=0, c='black', lw='2')

plt.plot(1, 1, 'o', c='r')
plt.plot(2, 2, 'o', c='r')
plt.plot(3, 2, 'o', c='r')

plt.annotate('(1, 1)', xy=(1, 1), xytext=(-40, 20), textcoords='offset points', size=14, arrowprops=dict(arrowstyle="->"))
plt.annotate('(2, 2)', xy=(2, 2), xytext=(-60, -5), textcoords='offset points', size=14, arrowprops=dict(arrowstyle="->"))
plt.annotate('(3, 2)', xy=(3, 2), xytext=(-18, 20), textcoords='offset points', size=14, arrowprops=dict(arrowstyle="->"))

plt.grid()

png

plt.close(fig)

根据条件可以得到方程组
/(
/begin{cases}
C+D&=1 //
C+2D&=2 //
C+3D&=2 //
/end{cases}
/),写作矩阵形式
/(/begin{bmatrix}1&1 //1&2 //1&3///end{bmatrix}/begin{bmatrix}C//D///end{bmatrix}=/begin{bmatrix}1//2//2///end{bmatrix}/),也就是我们的/(Ax=b/),很明显方程组无解。但是/(A^TA/hat x=A^Tb/)有解,于是我们将原是两边同时乘以/(A^T/)后得到的新方程组是有解的,/(A^TA/hat x=A^Tb/)也是最小二乘法的核心方程。

下一讲将进行最小二乘法的验算。

第十六讲:投影矩阵和最小二乘

上一讲中,我们知道了投影矩阵/(P=A(A^TA)^{-1}A^T/),/(Pb/)将会把向量投影在/(A/)的列空间中。

举两个极端的例子:

  • 如果/(b/in C(A)/),则/(Pb=b/);
  • 如果/(b/bot C(A)/),则/(Pb=0/)。

一般情况下,/(b/)将会有一个垂直于/(A/)的分量,有一个在/(A/)列空间中的分量,投影的作用就是去掉垂直分量而保留列空间中的分量。

在第一个极端情况中,如果/(b/in C(A)/)则有/(b=Ax/)。带入投影矩阵/(p=Pb=A(A^TA)^{-1}A^TAx=Ax/),得证。

在第二个极端情况中,如果/(b/bot C(A)/)则有/(b/in N(A^T)/),即/(A^Tb=0/)。则/(p=Pb=A(A^TA)^{-1}A^Tb=0/),得证。

向量/(b/)投影后,有/(b=e+p, p=Pb, e=(I-P)b/),这里的/(p/)是/(b/)在/(C(A)/)中的分量,而/(e/)是/(b/)在/(N(A^T)/)中的分量。

回到上一讲最后提到的例题:

我们需要找到距离图中三个点 /((1, 1), (2, 2), (3, 2)/) 偏差最小的直线:/(y=C+Dt/)。

%matplotlib inline
import matplotlib.pyplot as plt
from sklearn import linear_model
import numpy as np
import pandas as pd
import seaborn as sns

x = np.array([1, 2, 3]).reshape((-1,1))
y = np.array([1, 2, 2]).reshape((-1,1))
predict_line = np.array([-1, 4]).reshape((-1,1))

regr = linear_model.LinearRegression()
regr.fit(x, y)
ey = regr.predict(x)

fig = plt.figure()
plt.axis('equal')
plt.axhline(y=0, c='black')
plt.axvline(x=0, c='black')

plt.scatter(x, y, c='r')
plt.scatter(x, regr.predict(x), s=20, c='b')
plt.plot(predict_line, regr.predict(predict_line), c='g', lw='1')
[ plt.plot([x[i], x[i]], [y[i], ey[i]], 'r', lw='1') for i in range(len(x))]

plt.annotate('(1, 1)', xy=(1, 1), xytext=(-15, -30), textcoords='offset points', size=14, arrowprops=dict(arrowstyle="->"))
plt.annotate('(2, 2)', xy=(2, 2), xytext=(-60, -5), textcoords='offset points', size=14, arrowprops=dict(arrowstyle="->"))
plt.annotate('(3, 2)', xy=(3, 2), xytext=(-15, -30), textcoords='offset points', size=14, arrowprops=dict(arrowstyle="->"))

plt.annotate('$e_1$', color='r', xy=(1, 1), xytext=(0, 2), textcoords='offset points', size=20)
plt.annotate('$e_2$', color='r', xy=(2, 2), xytext=(0, -15), textcoords='offset points', size=20)
plt.annotate('$e_3$', color='r', xy=(3, 2), xytext=(0, 1), textcoords='offset points', size=20)

plt.annotate('$p_1$', xy=(1, 7/6), color='b', xytext=(-7, 30), textcoords='offset points', size=14, arrowprops=dict(arrowstyle="->"))
plt.annotate('$p_2$', xy=(2, 5/3), color='b', xytext=(-7, -30), textcoords='offset points', size=14, arrowprops=dict(arrowstyle="->"))
plt.annotate('$p_3$', xy=(3, 13/6), color='b', xytext=(-7, 30), textcoords='offset points', size=14, arrowprops=dict(arrowstyle="->"))
plt.draw()

png

plt.close(fig)

根据条件可以得到方程组
/(
/begin{cases}
C+D&=1 //
C+2D&=2 //
C+3D&=2 //
/end{cases}
/),写作矩阵形式
/(/begin{bmatrix}1&1 //1&2 //1&3///end{bmatrix}/begin{bmatrix}C//D///end{bmatrix}=/begin{bmatrix}1//2//2///end{bmatrix}/),也就是我们的/(Ax=b/),很明显方程组无解。

我们需要在/(b/)的三个分量上都增加某个误差/(e/),使得三点能够共线,同时使得/(e_1^2+e_2^2+e_3^2/)最小,找到拥有最小平方和的解(即最小二乘),即/(/left/|Ax-b/right/|^2=/left/|e/right/|^2/)最小。此时向量/(b/)变为向量/(p=/begin{bmatrix}p_1//p_2//p_3/end{bmatrix}///)(在方程组有解的情况下,/(Ax-b=0/),即/(b/)在/(A/)的列空间中,误差/(e/)为零。)我们现在做的运算也称作线性回归(linear regression),使用误差的平方和作为测量总误差的标准。

注:如果有另一个点,如/((0, 100)/),在本例中该点明显距离别的点很远,最小二乘将很容易被离群的点影响,通常使用最小二乘时会去掉明显离群的点。

现在我们尝试解出/(/hat x=/begin{bmatrix}/hat C// /hat D/end{bmatrix}/)与/(p=/begin{bmatrix}p_1//p_2//p_3/end{bmatrix}/)。

/[A^TA/hat x=A^Tb//
A^TA=
/begin{bmatrix}3&6//6&14/end{bmatrix}/qquad
A^Tb=
/begin{bmatrix}5//11/end{bmatrix}//
/begin{bmatrix}3&6//6&14/end{bmatrix}
/begin{bmatrix}/hat C///hat D/end{bmatrix}=
/begin{bmatrix}5//11/end{bmatrix}//
/]

写作方程形式为/(/begin{cases}3/hat C+16/hat D&=5//6/hat C+14/hat D&=11///end{cases}/),也称作正规方程组(normal equations)。

回顾前面提到的“使得误差最小”的条件,/(e_1^2+e_2^2+e_3^2=(C+D-1)^2+(C+2D-2)^2+(C+3D-2)^2/),使该式取最小值,如果使用微积分方法,则需要对该式的两个变量/(C, D/)分别求偏导数,再令求得的偏导式为零即可,正是我们刚才求得的正规方程组。(正规方程组中的第一个方程是对/(C/)求偏导的结果,第二个方程式对/(D/)求偏导的结果,无论使用哪一种方法都会得到这个方程组。)

解方程得/(/hat C=/frac{2}{3}, /hat D=/frac{1}{2}/),则“最佳直线”为/(y=/frac{2}{3}+/frac{1}{2}t/),带回原方程组解得/(p_1=/frac{7}{6}, p_2=/frac{5}{3}, p_3=/frac{13}{6}/),即/(e_1=-/frac{1}{6}, e_2=/frac{1}{3}, e_3=-/frac{1}{6}/)

于是我们得到/(p=/begin{bmatrix}/frac{7}{6}///frac{5}{3}///frac{13}{6}/end{bmatrix}, e=/begin{bmatrix}-/frac{1}{6}///frac{1}{3}//-/frac{1}{6}/end{bmatrix}/),易看出/(b=p+e/),同时我们发现/(p/cdot e=0/)即/(p/bot e/)。

误差向量/(e/)不仅垂直于投影向量/(p/),它同时垂直于列空间,如 /(/begin{bmatrix}1//1//1/end{bmatrix}, /begin{bmatrix}1//2//3/end{bmatrix}/)。

接下来我们观察/(A^TA/),如果/(A/)的各列线性无关,求证/(A^TA/)是可逆矩阵。

先假设/(A^TAx=0/),两边同时乘以/(x^T/)有/(x^TA^TAx=0/),即/((Ax)^T(Ax)=0/)。一个矩阵乘其转置结果为零,则这个矩阵也必须为零(/((Ax)^T(Ax)/)相当于/(Ax/)长度的平方)。则/(Ax=0/),结合题设中的“/(A/)的各列线性无关”,可知/(x=0/),也就是/(A^TA/)的零空间中有且只有零向量,得证。

我们再来看一种线性无关的特殊情况:互相垂直的单位向量一定是线性无关的。

  • 比如/(/begin{bmatrix}1//0//0/end{bmatrix}/begin{bmatrix}0//1//0/end{bmatrix}/begin{bmatrix}0//0//1/end{bmatrix}/),这三个正交单位向量也称作标准正交向量组(orthonormal vectors)。
  • 另一个例子/(/begin{bmatrix}/cos/theta///sin/theta/end{bmatrix}/begin{bmatrix}-/sin/theta///cos/theta/end{bmatrix}/)

下一讲研究标准正交向量组。

第十七讲:正交矩阵和Gram-Schmidt正交化法

标准正交矩阵

定义标准正交向量(orthonormal):/(q_i^Tq_j=/begin{cases}0/quad i/neq j//1/quad i=j/end{cases}/)

我们将标准正交向量放入矩阵中,有/(Q=/Bigg[q_1 q_2 /cdots q_n/Bigg]/)。

上一讲我们研究了/(A^A/)的特性,现在来观察/(Q^TQ=/begin{bmatrix} & q_1^T & // & q_2^T & // & /vdots & // & q_n^T & /end{bmatrix}/Bigg[q_1 q_2 /cdots q_n/Bigg]/)

根据标准正交向量的定义,计算/(Q^TQ=/begin{bmatrix}1&0&/cdots&0//0&1&/cdots&0///vdots&/vdots&/ddots&/vdots//0&0&/cdots&1/end{bmatrix}=I/),我们也把/(Q/)成为标准正交矩阵(orthonormal matrix)。

特别的,当/(Q/)恰好是方阵时,由于正交性,易得/(Q/)是可逆的,又/(Q^TQ=I/),所以/(Q^T=Q^{-1}/)。

  • 举个置换矩阵的例子:/(Q=/begin{bmatrix}0&1&0//1&0&0//0&0&1/end{bmatrix}/),则/(Q^T=/begin{bmatrix}0&1&0//0&0&1//1&0&0/end{bmatrix}/),易得/(Q^TQ=I/)。
  • 使用上一讲的例子/(Q=/begin{bmatrix}/cos/theta&-/sin/theta///sin/theta&/cos/theta/end{bmatrix}/),列向量长度为/(1/),且列向量相互正交。
  • 其他例子/(Q=/frac{1}{/sqrt 2}/begin{bmatrix}1&1//1&-1/end{bmatrix}/),列向量长度为/(1/),且列向量相互正交。
  • 使用上一个例子的矩阵,令/(Q’=c/begin{bmatrix}Q&Q//Q&-Q/end{bmatrix}/),取合适的/(c/)另列向量长度为/(1/)也可以构造标准正交矩阵:/(Q=/frac{1}{2}/begin{bmatrix}1&1&1&1//1&-1&1&-1//1&1&-1&-1//1&-1&-1&1/end{bmatrix}/),这种构造方法以阿德玛(Adhemar)命名,对/(2, 4, 16, 64, /cdots/)阶矩阵有效。
  • 再来看一个例子,/(Q=/frac{1}{3}/begin{bmatrix}1&-2&2//2&-1&-2//2&2&1/end{bmatrix}/),列向量长度为/(1/),且列向量相互正交。格拉姆-施密特正交化法的缺点在于,由于要求得单位向量,所以我们总是除以向量的长度,这导致标准正交矩阵中总是带有根号,而上面几个例子很少有根号。

再来看标准正交化有什么好处,假设要做投影,将向量/(b/)投影在标准正交矩阵/(Q/)的列空间中,根据上一讲的公式得/(P=Q(Q^TQ)^{-1}Q^T/),易得/(P=QQ^T/)。我们断言,当列向量为标准正交基时,/(QQ^T/)是投影矩阵。极端情况,假设矩阵是方阵,而其列向量是标准正交的,则其列空间就是整个向量空间,而投影整个空间的投影矩阵就是单位矩阵,此时/(QQ^T=I/)。可以验证一下投影矩阵的两个性质:/((QQ^T)^T=(Q^T)^TQ^T=QQ^T/),得证;/((QQ^T)^2=QQ^TQQ^T=Q(Q^TQ)Q^T=QQ^T/),得证。

我们计算的/(A^TA/hat x=A^Tb/),现在变为/(Q^TQ/hat x=Q^Tb/),也就是/(/hat x=Q^Tb/),分解开来看就是 /(/underline{/hat x_i=q_i^Tb}/),这个式子在很多数学领域都有重要作用。当我们知道标准正交基,则解向量第/(i/)个分量为基的第/(i/)个分量乘以/(b/),在第/(i/)个基方向上的投影就等于/(q_i^Tb/)。

Gram-Schmidt正交化法

我们有两个线性无关的向量/(a, b/),先把它们化为正交向量/(A, B/),再将它们单位化,变为单位正交向量/(q_1=/frac{A}{/left/|A/right/|}, q_2=/frac{B}{/left/|B/right/|}/):

  • 我们取定/(a/)向量的方向,/(a=A/);
  • 接下来将/(b/)投影在/(A/)的法方向上得到/(B/),也就是求子空间投影一讲中,我们提到的误差向量/(e=b-p/),即/(B=b-/frac{A^Tb}{A^TA}A/)。检验一下/(A/bot B/),/(A^TB=A^Tb-A^T/frac{A^Tb}{A^TA}A=A^Tb-/frac{A^TA}{A^TA}A^Tb=0/)。(/(/frac{A^Tb}{A^TA}A/)就是/(A/hat x=p/)。)

如果我们有三个线性无关的向量/(a, b, c/),则我们现需要求它们的正交向量/(A, B, C/),再将它们单位化,变为单位正交向量/(q_1=/frac{A}{/left/|A/right/|}, q_2=/frac{B}{/left/|B/right/|}, q_3=/frac{C}{/left/|C/right/|}/):

  • 前两个向量我们已经得到了,我们现在需要求第三个向量同时正交于/(A, B/);
  • 我们依然沿用上面的方法,从/(c/)中减去其在/(A, B/)上的分量,得到正交与/(A, B/)的/(C/):/(C=c-/frac{A^Tc}{A^TA}A-/frac{B^Tc}{B^TB}B/)。

现在我们试验一下推导出来的公式,/(a=/begin{bmatrix}1//1//1/end{bmatrix}, b=/begin{bmatrix}1//0//2/end{bmatrix}/):

  • 则/(A=a=/begin{bmatrix}1//1//1/end{bmatrix}/);
  • 根据公式有/(B=a-hA/),/(h/)是比值/(/frac{A^Tb}{A^TA}=/frac{3}{3}/),则/(B=/begin{bmatrix}1//1//1/end{bmatrix}-/frac{3}{3}/begin{bmatrix}1//0//2/end{bmatrix}=/begin{bmatrix}0//-1//1/end{bmatrix}/)。验证一下正交性有/(A/cdot B=0/)。
  • 单位化,/(q_1=/frac{1}{/sqrt 3}/begin{bmatrix}1//1//1/end{bmatrix},/quad q_2=/frac{1}{/sqrt 2}/begin{bmatrix}1//0//2/end{bmatrix}/),则标准正交矩阵为/(Q=/begin{bmatrix}/frac{1}{/sqrt 3}&0///frac{1}{/sqrt 3}&-/frac{1}{/sqrt 2}///frac{1}{/sqrt 3}&/frac{1}{/sqrt 2}/end{bmatrix}/),对比原来的矩阵/(D=/begin{bmatrix}1&1//1&0//1&2/end{bmatrix}/),有/(D, Q/)的列空间是相同的,我们只是将原来的基标准正交化了。

我们曾经用矩阵的眼光审视消元法,有/(A=LU/)。同样的,我们也用矩阵表达标准正交化,/(A=QR/)。设矩阵/(A/)有两个列向量/(/Bigg[a_1 a_2/Bigg]/),则标准正交化后有/(/Bigg[a_1 a_2/Bigg]=/Bigg[q_1 q_2/Bigg]/begin{bmatrix}a_1^Tq_1&a_2^Tq_1//a_1^Tq_2&a_2^Tq_2/end{bmatrix}/),而左下角的/(a_1^Tq_2/)始终为/(0/),因为Gram-Schmidt正交化总是使得/(a_1/bot q_2/),后来构造的向量总是正交于先前的向量。所以这个/(R/)矩阵是一个上三角矩阵。

第十八讲:行列式及其性质

本讲我们讨论出行列式(determinant)的性质:

  1. /(/det{I}=1/),单位矩阵行列式值为一。

  2. 交换行行列式变号。

    在给出第三个性质之前,先由前两个性质可知,对置换矩阵有/(/det P=/begin{cases}1/quad &even//-1/quad &odd/end{cases}/)。

    举例:/(/begin{vmatrix}1&0//0&1/end{vmatrix}=1,/quad/begin{vmatrix}0&1//1&0/end{vmatrix}=-1/),于是我们猜想,对于二阶方阵,行列式的计算公式为/(/begin{vmatrix}a&b//c&d/end{vmatrix}=ad-bc/)。

  3. a. /(/begin{vmatrix}ta&tb//tc&td/end{vmatrix}=t/begin{vmatrix}a&b//c&d/end{vmatrix}/)。

    b. /(/begin{vmatrix}a+a’&b+b’//c&d/end{vmatrix}=/begin{vmatrix}a&b//c&d/end{vmatrix}+/begin{vmatrix}a’&b’//c&d/end{vmatrix}/)。

    注意这里并不是指/(/det (A+B)=/det A+/det B/),方阵相加会使每一行相加,这里仅是针对某一行的线性变换。

  4. 如果两行相等,则行列式为零。使用性质2交换两行易证。

  5. 从第/(k/)行中减去第/(i/)行的/(l/)倍,行列式不变。这条性质是针对消元的,我们可以先消元,将方阵变为上三角形式后再计算行列式。

    举例:/(/begin{vmatrix}a&b//c-la&d-lb/end{vmatrix}/stackrel{3.b}{=}/begin{vmatrix}a&b//c&d/end{vmatrix}+/begin{vmatrix}a&b//-la&-lb/end{vmatrix}/stackrel{3.a}{=}/begin{vmatrix}a&b//c&d/end{vmatrix}-l/begin{vmatrix}a&b//a&b/end{vmatrix}/stackrel{4}{=}/begin{vmatrix}a&b//c&d/end{vmatrix}/)

  6. 如果方阵的某一行为零,则其行列式值为零。使用性质3.a对为零行乘以不为零系数/(l/),使/(l/det A=/det A/)即可证明;或使用性质5将某行加到为零行,使存在两行相等后使用性质4即可证明。

  7. 有上三角行列式/(U=/begin{vmatrix}d_{1}&*&/cdots&*//0&d_{2}&/cdots&*///vdots&/vdots&/ddots&/vdots//0&0&/cdots&d_{n}/end{vmatrix}/),则/(/det U=d_1d_2/cdots d_n/)。使用性质5,从最后一行开始,将对角元素上方的/(*/)元素依次变为零,可以得到型为/(D=/begin{vmatrix}d_{1}&0&/cdots&0//0&d_{2}&/cdots&0///vdots&/vdots&/ddots&/vdots//0&0&/cdots&d_{n}/end{vmatrix}/)的对角行列式,再使用性质3将对角元素提出得到/(d_nd_{n-1}/cdots d_1/begin{vmatrix}1&0&/cdots&0//0&1&/cdots&0///vdots&/vdots&/ddots&/vdots//0&0&/cdots&1/end{vmatrix}/),得证。

  8. 当矩阵/(A/)为奇异矩阵时,/(/det A=0/);当且仅当/(A/)可逆时,有/(/det A/neq0/)。如果矩阵可逆,则化简为上三角形式后各行都含有主元,行列式即为主元乘积;如果矩阵奇异,则化简为上三角形式时会出现全零行,行列式为零。

    再回顾二阶情况:/(/begin{vmatrix}a&b//c&d/end{vmatrix}/xrightarrow{消元}/begin{vmatrix}a&b//0&d-/frac{c}{a}b/end{vmatrix}=ad-bc/),前面的猜想得到证实。

  9. /(/det AB=(/det A)(/det B)/)。使用这一性质,/(/det I=/det{A^{-1}A}=/det A^{-1}/det A/),所以/(/det A^{-1}=/frac{1}{/det A}/)。

    同时还可以得到:/(/det A^2=(/det A)^2/),以及/(/det 2A=2^n/det A/),这个式子就像是求体积,对三维物体有每边翻倍则体积变为原来的八倍。

  10. /(/det A^T=/det A/),前面一直在关注行的属性给行列式带来的变化,有了这条性质,行的属性同样适用于列,比如对性质2就有“交换列行列式变号”。

    证明:/(/left|A^T/right|=/left|A/right|/rightarrow/left|U^TL^T/right|=/left|LU/right|/rightarrow/left|U^T/right|/left|L^T/right|=/left|L/right|/left|U/right|/),值得注意的是,/(L, U/)的行列式并不因为转置而改变,得证。

原创文章,作者:奋斗,如若转载,请注明出处:https://blog.ytso.com/245156.html

(0)
上一篇 2022年4月18日
下一篇 2022年4月18日

相关推荐

发表回复

登录后才能评论