线代笔记Part 1 (Lecture 1 & 2)

线代笔记Part 1 (Lecture 1 & 2)

来自MIT OpenCourseWare由Gilbert Strang主讲的Linear Algebra讲座。视频地址在此。

该笔记主要用于帮助对线代知识体系的复习。其中添加了我个人的一些感悟。

Lecture 1

我们可以在笛卡尔平面直角坐标系上描绘出二元一次方程组的几何意义。比如对于
{ 2 x − y = 0 − x + 2 y = 3 \begin{dcases} 2x&-y&=0 \\ -x&+2y&=3 \end{dcases} {2xxy+2y=0=3
我们可以在直角坐标系中画出这两条直线。如此我们就能发现
{ x = 1 y = 2 \begin{dcases} x=1 \\ y=2 \end{dcases} {x=1y=2
就是这两条直线的交点,同时也是上述方程组的唯一解。

以上方程组的矩阵形式就是:
[ 2 − 1 − 1 2 ] [ x y ] = [ 0 3 ] \begin{bmatrix} 2 & -1 \\ -1 & 2 \end{bmatrix} \begin{bmatrix} x \\ y \end{bmatrix} =\begin{bmatrix} 0 \\ 3 \end{bmatrix} [2112][xy]=[03]
对于这一组矩阵的计算,我们有两种方式:一种是两次点积(dot product)叠在一起:
[ 2 − 1 − 1 2 ] [ x y ] = [ [ 2 − 1 ] T ⋅ [ x y ] [ − 1 2 ] T ⋅ [ x y ] ] \begin{bmatrix} 2 & -1 \\ -1 & 2 \end{bmatrix} \begin{bmatrix} x \\ y \end{bmatrix} =\begin{bmatrix} \begin{bmatrix} 2 & -1 \end{bmatrix}^T\cdot \begin{bmatrix} x \\ y \end{bmatrix} \\ \begin{bmatrix} -1 & 2 \end{bmatrix}^T\cdot \begin{bmatrix} x \\ y \end{bmatrix} \end{bmatrix} [2112][xy]= [21]T[xy][12]T[xy]
另一种就是视为两个二维列向量的线性组合:
[ 2 − 1 − 1 2 ] [ x y ] = x [ 2 − 1 ] + y [ − 1 2 ] \begin{bmatrix} 2 & -1 \\ -1 & 2 \end{bmatrix} \begin{bmatrix} x \\ y \end{bmatrix} =x\begin{bmatrix} 2 \\ -1 \end{bmatrix} +y\begin{bmatrix} -1 \\ 2 \end{bmatrix} [2112][xy]=x[21]+y[12]
类似的,对于三元一次方程组
{ 2 x − y = 0 − x + 2 y − z = − 1 − 3 y + 4 z = 4 \begin{dcases} 2x& -y& &=0 \\ -x&+2y&-z &=-1 \\ &-3y&+4z &=4 \end{dcases} 2xxy+2y3yz+4z=0=1=4
我们可以规定 A x = b Ax=b Ax=b,其中
A = [ 2 − 1 0 − 1 2 − 1 0 − 3 4 ] , b = [ 0 − 1 4 ] A=\begin{bmatrix} 2 &-1 & 0 \\ -1 &2 &-1 \\ 0 &-3 &4 \end{bmatrix}, b=\begin{bmatrix} 0\\ -1\\ 4 \end{bmatrix} A= 210123014 ,b= 014
在三维直角坐标系下我们可以画出这三个等式对应的三个平面。注意到这三个平面正好相交于一个点 ( 0 , 0 , 1 ) (0,0,1) (0,0,1),由此我们可以认定该点就是以上方程组的解。

但我们也注意到解并不总是存在的或唯一存在的。

假如变量的数量增加,比如九元一次方程组。对于这样的方程组,假如每个等式之间都是线性独立的,并且正好有9个这样的等式,那么我们能够求解。假如第9个等式正好是前8个等式的线性组合,那么我们不能求出类似的唯一解。

关于这些,未来的讲座会给予更多说明。

下一讲我们会介绍如何用消去法(elimination)去求解。

Lecture 2

对于这样一个3元1次等式组
{ x + 2 y + z = 2 3 x + 8 y + z = 12 + 4 y + z = 2 \begin{dcases} x&+2y&+z&=2 \\ 3x&+8y&+z&=12 \\ &+4y&+z&=2 \end{dcases} x3x+2y+8y+4y+z+z+z=2=12=2
我们可以刻画一个 3 × 3 3\times 3 3×3的矩阵
A = [ 1 2 1 3 8 1 0 4 1 ] A=\begin{bmatrix} 1&2&1\\ 3&8&1\\ 0&4&1 \end{bmatrix} A= 130284111
我们设定第1行第1列的元素 1 1 1为pivot,并把pivot所在列的、pivot所在行以下的所有元素,都通过行与行的线性运算而消为0;这也就意味着我们要把第二行的所有元素都加上 − 3 -3 3倍的第一行元素,于是就有
E 21 A = [ 1 2 1 0 2 − 2 0 4 1 ] E_{21}A= \begin{bmatrix} 1&2&1\\ 0&2&-2\\ 0&4&1 \end{bmatrix} E21A= 100224121
这样,第2行第1列的元素就成功消为0,目标达成。由于第3行第1列的元素已经为0,所以对第三行我们暂时不需要额外处理。

接下来我们把第2行第2列的元素 2 2 2设为pivot,把第3行第2列的元素给消去,于是得到
E 32 E 21 A = [ 1 2 1 0 2 − 2 0 0 5 ] E_{32}E_{21}A= \begin{bmatrix} 1&2&1\\ 0&2&-2\\ 0&0&5 \end{bmatrix} E32E21A= 100220125
记第3行第3列的元素 5 5 5为pivot,我们发现不需要再做任何操作了。以上就是消去法(elimination)的全部流程。然而我们还尚未考虑 b b b。因此我们可以建立增广矩阵(augmented matrix) [ A ∣ b ] \begin{bmatrix} A \mid b \end{bmatrix} [Ab] ,把之前的消去步骤原封不动地套到该增广矩阵上,于是就有
E 32 E 21 [ A ∣ b ] = E 32 E 21 [ 1 2 1 2 3 8 1 12 0 4 1 2 ] = E 32 [ 1 2 1 2 0 2 − 2 6 0 4 1 2 ] = [ 1 2 1 2 0 2 − 2 6 0 0 5 − 10 ] E_{32}E_{21} \begin{bmatrix} A \mid b \end{bmatrix} =E_{32}E_{21} \begin{bmatrix} 1&2&1&2\\ 3&8&1&12\\ 0&4&1&2 \end{bmatrix} =E_{32}\begin{bmatrix} 1&2&1&2\\ 0&2&-2&6\\ 0&4&1&2 \end{bmatrix} =\begin{bmatrix} 1&2&1&2\\ 0&2&-2&6\\ 0&0&5&-10 \end{bmatrix} E32E21[Ab]=E32E21 1302841112122 =E32 100224121262 = 1002201252610
然后我们得到了以下方程组:
{ x + 2 y + z = 2 2 y − 2 z = 6 5 z = − 10 \begin{dcases} x&+2y&+z&=2 \\ &2y&-2z&=6 \\ & & 5z&=-10 \end{dcases} x+2y2y+z2z5z=2=6=10
最后通过逆向代换(back substitution),我们依次计算 z z z y y y x x x的值,得到了
{ x = 2 y = 1 z = − 2 \begin{dcases} x=2 \\ y=1 \\ z=-2 \end{dcases} x=2y=1z=2
这样一个唯一解。

然而我们在这里还没具体分析以上的消去步骤究竟是如何实现的。为了展开这一点,我们有必要具体展开分析矩阵乘法的计算过程。比如对于以下乘法,我们的计算方式是:
[ a 11 a 12 a 13 a 21 a 22 a 23 a 31 a 32 a 33 ] [ 3 4 5 ] = 3 [ a 11 a 21 a 31 ] + 4 [ a 12 a 22 a 32 ] + 5 [ a 13 a 23 a 33 ] = [ sum ( 3 a 11 , 4 a 12 , 5 a 13 ) sum ( 3 a 21 , 4 a 22 , 5 a 23 ) sum ( 3 a 31 , 4 a 32 , 5 a 33 ) ] \begin{bmatrix} a_{11}&a_{12}&a_{13}\\ a_{21}&a_{22}&a_{23}\\ a_{31}&a_{32}&a_{33} \end{bmatrix} \begin{bmatrix} 3\\ 4\\ 5 \end{bmatrix} =3\begin{bmatrix} a_{11}\\ a_{21}\\ a_{31} \end{bmatrix}+4 \begin{bmatrix} a_{12}\\ a_{22}\\ a_{32} \end{bmatrix}+5 \begin{bmatrix} a_{13}\\ a_{23}\\ a_{33} \end{bmatrix} =\begin{bmatrix} \text{sum}(3a_{11},4a_{12},5a_{13}) \\ \text{sum}(3a_{21},4a_{22},5a_{23}) \\ \text{sum}(3a_{31},4a_{32},5a_{33}) \end{bmatrix} a11a21a31a12a22a32a13a23a33 345 =3 a11a21a31 +4 a12a22a32 +5 a13a23a33 = sum(3a11,4a12,5a13)sum(3a21,4a22,5a23)sum(3a31,4a32,5a33)
最后结果是一个 3 × 1 3\times 1 3×1形状的矩阵。也就是说,当我们在矩阵 A A A的右边乘上列向量 b b b时,我们是在对 A A A的列向量进行线性组合(也可以说是对 A A A的每一列元素乘上 b b b里每个分量的数值,然后对 A A A按列求和)。

类似的,对于以下乘法,我们的计算则变成
[ 1 2 7 ] [ a 11 a 12 a 13 a 21 a 22 a 23 a 31 a 32 a 33 ] = 1 [ a 11 a 12 a 13 ] T + 2 [ a 21 a 22 a 23 ] T + 7 [ a 31 a 32 a 33 ] T = [ sum ( 1 a 11 + 2 a 21 + 7 a 31 ) sum ( 1 a 12 + 2 a 22 + 7 a 32 ) sum ( 1 a 13 + 2 a 23 + 7 a 33 ) ] T \begin{bmatrix} 1&2&7 \end{bmatrix} \begin{bmatrix} a_{11}&a_{12}&a_{13}\\ a_{21}&a_{22}&a_{23}\\ a_{31}&a_{32}&a_{33} \end{bmatrix} =1\begin{bmatrix} a_{11}\\ a_{12}\\ a_{13} \end{bmatrix}^T+ 2\begin{bmatrix} a_{21}\\ a_{22}\\ a_{23} \end{bmatrix}^T+ 7\begin{bmatrix} a_{31}\\ a_{32}\\ a_{33} \end{bmatrix}^T =\begin{bmatrix} \text{sum}(1a_{11}+2a_{21}+7a_{31}) \\ \text{sum}(1a_{12}+2a_{22}+7a_{32}) \\ \text{sum}(1a_{13}+2a_{23}+7a_{33}) \end{bmatrix}^T [127] a11a21a31a12a22a32a13a23a33 =1 a11a12a13 T+2 a21a22a23 T+7 a31a32a33 T= sum(1a11+2a21+7a31)sum(1a12+2a22+7a32)sum(1a13+2a23+7a33) T
最后结果是一个 1 × 3 1\times 3 1×3形状的矩阵。也就是说在矩阵 A A A的左边乘上一个行向量 c c c时,我们是在对 A A A的行向量进行线性组合(也可以说是对 A A A的每一行元素乘以 c c c的每个分量的数值,然后对 A A A按行求和)。

总结起来就是,对矩阵的右乘意味着对列向量做线性组合,也意味着对该矩阵按列分配系数再求和(消除列方向的维度而保存其它方向的维度);对矩阵的左乘意味着对行向量做线性组合,也意味着对该矩阵按行分配系数再求和(消除行方向的维度而保存其它方向的维度)。

由此我们能够明白,因为 E 21 E_{21} E21旨在把第二行改写为把第二行的所有元素都加上−3倍的第一行元素,所以
E 21 = [ 1 0 0 − 3 1 0 0 0 1 ] E_{21}=\begin{bmatrix} 1&0&0\\ -3&1&0\\ 0&0&1 \end{bmatrix} E21= 130010001
E 32 E_{32} E32旨在把第三行改写为第三行所有元素加上 − 2 -2 2倍的第二行元素,所以
E 32 = [ 1 0 0 0 1 0 0 − 2 1 ] E_{32}=\begin{bmatrix} 1&0&0\\ 0&1&0\\ 0&-2&1 \end{bmatrix} E32= 100012001
通过引入置换矩阵(permutation matrix),我们很容易理解为什么交换律在矩阵乘法中不成立。比如对于
P = [ a b c d ] P=\begin{bmatrix} a&b\\ c&d \end{bmatrix} P=[acbd]
如果我们想要交换两行的元素,得到
P r = [ c d a b ] P_{r}=\begin{bmatrix} c&d\\ a&b \end{bmatrix} Pr=[cadb]
那么我们只要对P左乘一个特定的矩阵就可以了:
[ 0 1 1 0 ] [ a b c d ] = [ c d a b ] \begin{bmatrix} 0&1\\ 1&0 \end{bmatrix} \begin{bmatrix} a&b\\ c&d \end{bmatrix}= \begin{bmatrix} c&d\\ a&b \end{bmatrix} [0110][acbd]=[cadb]
但若我们想要交换两列的元素,得到
P c = [ b a d c ] P_{c}=\begin{bmatrix} b&a\\ d&c \end{bmatrix} Pc=[bdac]
我们必须对P右乘一个矩阵才能实现:
[ a b c d ] [ 0 1 1 0 ] = [ b a d c ] \begin{bmatrix} a&b\\ c&d \end{bmatrix} \begin{bmatrix} 0&1\\ 1&0 \end{bmatrix} =\begin{bmatrix} b&a\\ d&c \end{bmatrix} [acbd][0110]=[bdac]
交换律确实不成立。

消去的步骤是可以被抵消的。比如对于
E 21 = [ 1 0 0 − 3 1 0 0 0 1 ] E_{21}=\begin{bmatrix} 1&0&0\\ -3&1&0\\ 0&0&1 \end{bmatrix} E21= 130010001
我们如何设置 E 21 − 1 E_{21}^{-1} E211,使得
E 21 − 1 E 21 = [ 1 0 0 0 1 0 0 0 1 ] E_{21}^{-1}E_{21}= \begin{bmatrix} 1&0&0\\ 0&1&0\\ 0&0&1 \end{bmatrix} E211E21= 100010001
能够成立呢?显然,
[ 1 0 0 3 1 0 0 0 1 ] [ 1 0 0 − 3 1 0 0 0 1 ] = [ 1 0 0 0 1 0 0 0 1 ] \begin{bmatrix} 1&0&0\\ 3&1&0\\ 0&0&1 \end{bmatrix} \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} 130010001 130010001 = 100010001
因此
E 21 − 1 = [ 1 0 0 3 1 0 0 0 1 ] E_{21}^{-1}=\begin{bmatrix} 1&0&0\\ 3&1&0\\ 0&0&1 \end{bmatrix} E211= 130010001
就是 E 21 E_{21} E21的逆矩阵(inverse matrix)。但我们也要知道不是任何一个矩阵都拥有其逆矩阵。

以下展示了基于python中的numpy软件包而展示的矩阵乘法的过程:

import numpy as np
A=np.array([
    [1,2,3],
    [4,5,6],
    [7,8,9]
])
b=np.array([
    [3],[5],[7]
])
c=np.array([
    [2,4,8]
])
print(f"Shape of A:{A.shape}, b:{b.shape}, c:{c.shape}.")

由此我们得到了结果:

Shape of A:(3, 3), b:(3, 1), c:(1, 3).

接下来我要计算 A b Ab Ab的值,并对比它和按列求和的结果。首先我把 A A A的每一列元素分别乘以3、5、7,这样能得到一个新的 3 × 3 3\times 3 3×3矩阵。

aug_A_by_col=A*[3,5,7] # assign coefficients to each column
aug_A_by_col
array([[ 3, 10, 21],
       [12, 25, 42],
       [21, 40, 63]])

接着我对这个新矩阵按列求和。

np.sum(aug_A_by_col,axis=1,keepdims=True)
array([[ 34],
       [ 79],
       [124]])

再比较它和矩阵乘法 A b Ab Ab的结果。

np.matmul(A,b)
array([[ 34],
       [ 79],
       [124]])

可以看到两者确实是一致的。

接下来我把 A A A的每一行元素分别乘以2、4、8,这样能得到另一个新的 3 × 3 3\times 3 3×3矩阵。

aug_A_by_row=[[2],[4],[8]]*A # assign coefficients to each row
aug_A_by_row
array([[ 2,  4,  6],
       [16, 20, 24],
       [56, 64, 72]])

接着我对这个新矩阵按行求和。

np.sum(aug_A_by_row,axis=0,keepdims=True)
array([[ 74,  88, 102]])

再比较其和矩阵乘法 c A cA cA的结果。

np.matmul(c,A)
array([[ 74,  88, 102]])

可以看到两者确实是一致的。

你可能感兴趣的:(线性代数,线性代数,矩阵)