文章目录
线性代数中的线性方程组
线性代数作为数学中的一门重要的学科,应用于各个行业中。对于机器学习来说,也是非常重要的一门基础学科。
历史上线性代数的第一个问题是关于解线性方程组的问题,而线性方程组理论的发展又促成了作为工具的矩阵论和行列式理论的创立与发展。
1 线性方程组
1.1 什么是线性方程组
首先来看什么是线性方程,线性方程是包含变量
x
1
,
x
2
,
⋯
,
x
n
x_1,x_2,\cdots,x_n
x1,x2,⋯,xn形如:
a
1
x
1
+
a
2
x
2
+
⋯
+
a
n
x
n
=
b
a_1x_1+a_2x_2+\cdots+a_nx_n=b
a1x1+a2x2+⋯+anxn=b
的方程,其中的
b
b
b和系数
a
1
,
a
2
,
⋯
,
a
n
a_1,a_2,\cdots,a_n
a1,a2,⋯,an是实数或复数,通常是已知数。那么线性方程组,从名字就可以看出来,它是由一个或几个包含相同变量
x
1
,
x
2
,
⋯
,
x
n
x_1,x_2,\cdots,x_n
x1,x2,⋯,xn的线性方程组成的。线性方程组的解是一组数
(
s
1
,
s
2
,
⋯
,
s
n
)
(s_1,s_2,\cdots,s_n)
(s1,s2,⋯,sn),方程组所有的解的集合称为线性方程组的解集,若两个线性方程组具有相同的解集,则说这两个线性方程组是等价的。
线性方程组的解有不同的情况,回想我们小时候学过的二元一次方程组,那就是含有两个变量的线性方程组,二元一次方程组可能有解可能无解,也可能有无穷多个解,进一步我们的线性方程组的解有三种情况:
1.无解
2.有唯一解
3.有无穷多解
如果一个线性方程组有一个解或无穷多个解,我们称该线性方程组是相容的,反正若无解,则称之为不相容的。
1.2 线性方程组的矩阵记号
一个线性方程组包含的信息可以用一个矩阵来表示,任意给出一个方程组(这里给出一个包含3个变量3个线性方程的线性方程组一般形式):
{
a
1
x
+
b
1
y
+
c
1
z
=
d
1
a
2
x
+
b
2
y
+
c
2
z
=
d
2
a
3
x
+
b
3
y
+
c
3
z
=
d
3
\left \{ \begin{array}{c} a_1x+b_1y+c_1z=d_1 \\ a_2x+b_2y+c_2z=d_2 \\ a_3x+b_3y+c_3z=d_3 \end{array} \right.
⎩⎨⎧a1x+b1y+c1z=d1a2x+b2y+c2z=d2a3x+b3y+c3z=d3
我们把每一个变量的系数写在对齐(这些系数是可以为0的)的一列中:
[
a
1
b
1
c
1
a
2
b
2
c
2
a
3
b
3
c
3
]
\begin{bmatrix} a_1 & b_1 & c_1 \\ a_2 & b_2 & c_2 \\ a_3 & b_3 & c_3 \\ \end{bmatrix}
⎣⎡a1a2a3b1b2b3c1c2c3⎦⎤
这个矩阵就称为线性方程组的系数矩阵,如果将等号右边的数也加进来,那就会变成下面这样的矩阵:
[
a
1
b
1
c
1
d
1
a
2
b
2
c
2
d
2
a
3
b
3
c
3
d
3
]
\begin{bmatrix} a_1 & b_1 & c_1 & d_1\\ a_2 & b_2 & c_2 & d_2\\ a_3 & b_3 & c_3 & d_3\\ \end{bmatrix}
⎣⎡a1a2a3b1b2b3c1c2c3d1d2d3⎦⎤
这样的矩阵称为线性方程组的增广矩阵。
1.3 解线性方程组
1.3.1 初等行变换
前面介绍了什么是线性方程组,以及线性方程组的矩阵表示形式,现在有了这些符号化的表示后,我们就可以很好地对线性方程组进行求解,这也是我们想要解决的问题。
初等行变换是我们利用增广矩阵求解线性方程组的重要手段,它包含以下几种基本操作:
- (倍加变换)把某一行换成它本身与另一行的倍数的和(把某一行的倍数加到另一行上)
- (对换变换)把两行对换。
- (倍乘变换)把某一行的所有元素乘以同一个非零数。
需要注意的是,初等行变换可以用于任何矩阵,不仅限于线性方程组的增广矩阵,如果一个矩阵可以经过初等行变换到另一个矩阵,我们称这两个矩阵是行等价的,进一步我们可以推出如果两个线性方程组的增广矩阵是行等价的,则它们具有相同的解集。
说了这么多还没讲如何利用初等行变换求解,其实初等行变换我们小时候同样做过,只不过不是这么专业的术语,回想一下小时候解二元一次方程组,我们使用消元的方法,只剩下一个变量,求解之后再带入,我们消元使用的方法在矩阵上看其实就是初等行变换。
1.3.2 行化简与阶梯形矩阵
我们对增广矩阵进行初等行变换成什么样子才能求解呢?我们首先来什么是看阶梯型矩阵。一个矩阵称为阶梯形(或行阶梯形)需要满足的性质如下:
- 每一非零行都在每一非零行之上。(非零行/列指矩阵中至少包含一个非零元素的行/列)
- 某一行的先导元素所在列位于前一行先导元素的右边。(先导元素是指每一行最左边非零的元素)
- 某一行的先导元素所在列的下方元素都是0。
进一步,如果阶梯形矩阵还满足以下性质,则称它为简化阶梯形(或简化行阶梯形):
- .每一非零行的先导元素是1
- 每一先导元素1是该元素所在列的唯一非零元素
任何非零矩阵都可以行化简(即用初等行变换)变为阶梯形矩阵,使用不同的方法可以化为不同的阶梯形矩阵,但是需要注意的是,一个矩阵只能化为唯一的简化阶梯形矩阵,证明就略了,有兴趣可以查阅相关资料。
定理 1:每个矩阵行等价于唯一的简化阶梯形矩阵。
若矩阵
A
A
A行等价于矩阵
U
U
U,则称
U
U
U为
A
A
A的阶梯形,若
U
U
U为简化阶梯形,则称
U
U
U为
A
A
A的简化阶梯形。大部分矩阵程序用RREF作为(行)简化阶梯形的缩写,有些用REF作为(行)阶梯形的缩写。
下面给出了阶梯形矩阵的样子:
[
x
∗
∗
∗
0
x
∗
∗
0
0
0
0
0
0
0
0
]
[
0
x
∗
∗
∗
∗
∗
∗
0
0
0
x
∗
∗
∗
∗
0
0
0
0
x
∗
∗
∗
0
0
0
0
0
0
x
∗
]
\begin{bmatrix} x & * & * & *\\ 0 & x & * & * \\ 0 & 0 & 0 & 0 \\ 0 & 0 & 0 & 0 \end{bmatrix}\\ \begin{bmatrix} 0 & x & * & * & * & * & * & *\\ 0 & 0 & 0 & x & * & * & * & * \\ 0 & 0 & 0 & 0 & x & * & * & *\\ 0 & 0 & 0 & 0 & 0 & 0 & x & * \end{bmatrix}
⎣⎢⎢⎡x000∗x00∗∗00∗∗00⎦⎥⎥⎤⎣⎢⎢⎡0000x000∗000∗x00∗∗x0∗∗∗0∗∗∗x∗∗∗∗⎦⎥⎥⎤
其中
x
x
x是先导元素,它们是任意非0的值,
∗
*
∗所在的元素可以取任意值,简化阶梯形的样子如下,对应于上面给出的性质:
[
1
0
∗
∗
0
1
∗
∗
0
0
0
0
0
0
0
0
]
[
0
1
∗
0
0
∗
0
∗
0
0
0
1
0
∗
0
∗
0
0
0
0
1
∗
0
∗
0
0
0
0
0
0
1
∗
]
\begin{bmatrix} 1 & 0 & * & *\\ 0 & 1 & * & * \\ 0 & 0 & 0 & 0 \\ 0 & 0 & 0 & 0 \end{bmatrix}\\ \begin{bmatrix} 0 & 1 & * & 0 & 0 & * & 0 & *\\ 0 & 0 & 0 & 1 & 0 & * & 0 & * \\ 0 & 0 & 0 & 0 & 1 & * & 0 & *\\ 0 & 0 & 0 & 0 & 0 & 0 & 1 & * \end{bmatrix}
⎣⎢⎢⎡10000100∗∗00∗∗00⎦⎥⎥⎤⎣⎢⎢⎡00001000∗00001000010∗∗∗00001∗∗∗∗⎦⎥⎥⎤
1.3.3 主元位置
当矩阵经行变换化为阶梯形后,经过进一步的行变换将矩阵化为简化阶梯形时,先导元素的位置并不改变。因为简化阶梯形是唯一的,故,当给定矩阵化为任何一个阶梯形时,先导元素总是在相同的位置上。这些先导元素对应于接话阶梯形中的先导元素1.
为此,定义了主元位置:矩阵中的主元位置是A对应于它的阶梯形中先导元素1的位置。主元列是A的含有主元位置的列。我们还是来看阶梯形的一般形式,假设一个矩阵经过行化简到如下的阶梯形形式:
[
x
∗
∗
∗
0
x
∗
∗
0
0
x
∗
0
0
0
0
]
\begin{bmatrix} x & * & * & *\\ 0 & x & * & * \\ 0 & 0 & x & * \\ 0 & 0 & 0 & 0 \end{bmatrix}\\
⎣⎢⎢⎡x000∗x00∗∗x0∗∗∗0⎦⎥⎥⎤
其中
x
x
x所在的位置就是矩阵的主元位置,
x
x
x所在的列就是矩阵的主元列。
1.3.4 行化简算法
现在让我们看如何讲一个矩阵经过初等行变换产生阶梯形,并进一步化为简化阶梯形。行化简算法步骤:
- 由最左的非零列开始,这是一个主元列,主元位置在该列顶端
- 在主元列中选取一个非零元素作为主元,若有必要的话,对换两行使这两个元素移到主元位置上
- 用倍加行变换将主元下面的元素变成0
- 暂时不管包含主元位置的行以及它上面的各行,对剩下的子矩阵使用上述的三个步骤直到没有非零行需要处理位置
- 由最右边的主元开始,把每个主元上方的各元素变成0。若某个主元不是1,则用倍乘变换将它变成1
其中步骤1-4称为行化简算法的向前步骤,产生简化阶梯形的步骤5称为向后步骤。
综合前面的内容,给出一个例子,行化简下面矩阵为简化阶梯形:
[
0
3
−
6
6
4
−
5
3
−
7
8
−
5
8
9
3
−
9
12
−
9
6
15
]
\begin{bmatrix} 0 & 3 & -6 & 6 & 4 & -5 \\ 3 & -7 & 8 & -5 & 8 & 9 \\ 3 & -9 & 12 & -9 & 6 & 15 \end{bmatrix}
⎣⎡0333−7−9−68126−5−9486−5915⎦⎤
首先进行步骤1,最左边的非零列就是一个主元列,然后进行步骤2,我们选择一个非零元素作为主元,对换一下位置变为:
[
3
−
9
12
−
9
6
15
3
−
7
8
−
5
8
9
0
3
−
6
6
4
−
5
]
\begin{bmatrix} 3 & -9 & 12 & -9 & 6 & 15 \\ 3 & -7 & 8 & -5 & 8 & 9 \\ 0 & 3 & -6 & 6 & 4 & -5 \end{bmatrix}
⎣⎡330−9−73128−6−9−56684159−5⎦⎤
进行步骤3,主元下面的元素全变为0,我们这里将行2变为行2减1,得到:
[
3
−
9
12
−
9
6
15
0
2
−
4
4
2
−
6
0
3
−
6
6
4
−
5
]
\begin{bmatrix} 3 & -9 & 12 & -9 & 6 & 15 \\ 0 & 2 & -4 & 4 & 2 & -6 \\ 0 & 3 & -6 & 6 & 4 & -5 \end{bmatrix}
⎣⎡300−92312−4−6−94662415−6−5⎦⎤
进行步骤4,将除去行1的子矩阵进行步骤1、2、3最后我们得到:
[
3
−
9
12
−
9
6
15
0
2
−
4
4
2
−
6
0
0
0
0
1
4
]
\begin{bmatrix} 3 & -9 & 12 & -9 & 6 & 15 \\ 0 & 2 & -4 & 4 & 2 & -6 \\ 0 & 0 & 0 & 0 & 1 & 4 \end{bmatrix}
⎣⎡300−92012−40−94062115−64⎦⎤
现在化为了阶梯形,进行步骤5变换为简化阶梯形,首先行1减去6倍的行3,行2减去6倍的行3,变换为:
[
3
−
9
12
−
9
0
−
9
0
2
−
4
4
0
−
14
0
0
0
0
1
4
]
\begin{bmatrix} 3 & -9 & 12 & -9 & 0 & -9 \\ 0 & 2 & -4 & 4 & 0 & -14 \\ 0 & 0 & 0 & 0 & 1 & 4 \end{bmatrix}
⎣⎡300−92012−40−940001−9−144⎦⎤
然后行2除以2得到:
[
3
−
9
12
−
9
0
−
9
0
1
−
2
2
0
−
7
0
0
0
0
1
4
]
\begin{bmatrix} 3 & -9 & 12 & -9 & 0 & -9 \\ 0 & 1 & -2 & 2 & 0 & -7 \\ 0 & 0 & 0 & 0 & 1 & 4 \end{bmatrix}
⎣⎡300−91012−20−920001−9−74⎦⎤
第行1加上9倍的行2得到:
[
3
0
−
6
9
0
−
72
0
1
−
2
2
0
−
7
0
0
0
0
1
4
]
\begin{bmatrix} 3 & 0 & -6 & 9 & 0 & -72 \\ 0 & 1 & -2 & 2 & 0 & -7 \\ 0 & 0 & 0 & 0 & 1 & 4 \end{bmatrix}
⎣⎡300010−6−20920001−72−74⎦⎤
最后行1除以3得到简化阶梯形:
[
1
0
−
2
3
0
−
24
0
1
−
2
2
0
−
7
0
0
0
0
1
4
]
\begin{bmatrix} 1 & 0 & -2 & 3 & 0 & -24 \\ 0 & 1 & -2 & 2 & 0 & -7 \\ 0 & 0 & 0 & 0 & 1 & 4 \end{bmatrix}
⎣⎡100010−2−20320001−24−74⎦⎤
1.3.5 线性方程组的解
对矩阵的操作都已知晓,我们回到1.3.2节提出的问题,我们需要将线性方程组的增广矩阵通过行化简算法变换为简化阶梯形,这便可以求得线性方程组的解集的一种显示表示法。将增广矩阵转换为简化阶梯形后,对应于主元列的变量称为基本变量,其他变量称为自由变量。只要线性方程组是相容的,那么其解集就可以显示表示,只需要把方程的简化形式解出来,再用自由变量表示基本变量即可。
我们假设我们上一节的例子是一个增广矩阵,变换为简化阶梯形后:
[
1
0
−
2
3
0
−
24
0
1
−
2
2
0
−
7
0
0
0
0
1
4
]
\begin{bmatrix} 1 & 0 & -2 & 3 & 0 & -24 \\ 0 & 1 & -2 & 2 & 0 & -7 \\ 0 & 0 & 0 & 0 & 1 & 4 \end{bmatrix}
⎣⎡100010−2−20320001−24−74⎦⎤
x
1
,
x
2
,
x
5
x_1,x_2,x_5
x1,x2,x5为基本变量,
x
3
,
x
4
x_3,x_4
x3,x4为自由变量,因此我们得到了线性方程组的通解:
{
x
1
=
−
24
−
3
x
4
+
2
x
3
x
2
=
−
7
−
2
x
4
+
2
3
x
3
是
自
由
变
量
x
4
是
自
由
变
量
x
5
=
4
\begin{cases} x_1 = -24-3x_4+2x_3\\ x_2 = -7 -2x_4 +2_3\\ x_3是自由变量\\ x_4是自由变量\\ x_5=4 \end{cases}
⎩⎪⎪⎪⎪⎪⎪⎨⎪⎪⎪⎪⎪⎪⎧x1=−24−3x4+2x3x2=−7−2x4+23x3是自由变量x4是自由变量x5=4
1.3.5 解的存在性与唯一性
前面已经提到,线性方程组的解有三种可能,那我们如何判断线性方程组的解是哪一种情况呢,我们尝试通过观察增广矩阵的阶梯形来找到答案。还是看上述例子得到的阶梯形:
[
3
−
9
12
−
9
6
15
0
2
−
4
4
2
−
6
0
0
0
0
1
4
]
\begin{bmatrix} 3 & -9 & 12 & -9 & 6 & 15 \\ 0 & 2 & -4 & 4 & 2 & -6 \\ 0 & 0 & 0 & 0 & 1 & 4 \end{bmatrix}
⎣⎡300−92012−40−94062115−64⎦⎤
我们通过将这个阶梯形变换为简化阶梯形得到了方程组的通解,自由变量的存在让解变得不唯一。现在假如,我们变换一个增广矩阵的阶梯形到如下形式:
[
3
−
9
12
−
9
6
15
0
2
−
4
4
2
−
6
0
0
0
0
0
4
]
\begin{bmatrix} 3 & -9 & 12 & -9 & 6 & 15 \\ 0 & 2 & -4 & 4 & 2 & -6 \\ 0 & 0 & 0 & 0 & 0 & 4 \end{bmatrix}
⎣⎡300−92012−40−94062015−64⎦⎤
你会发现这个增广矩阵的最后一行出现了一些问题,如果我们将这最后一行代入回去会得到
0
=
4
0=4
0=4这样的奇怪等式,这时候我们便会发现这个方程组是无解的。如果某一个增广矩阵的阶梯形化为这样的形式:
[
3
−
9
12
15
0
2
−
4
−
6
0
0
1
4
]
\begin{bmatrix} 3 & -9 & 12 & 15 \\ 0 & 2 & -4 & -6 \\ 0 & 0 & 1 & 4 \end{bmatrix}
⎣⎡300−92012−4115−64⎦⎤
你会发现方程组只存在唯一解,因为没有自由变量了。综上所述,我们对解的存在性和唯一性给出了形式化的描述:
定理2:线性方程组相容的充要条件是增广矩阵的最右列不是主元列,即增广矩阵的阶梯形没有形如:
[
0
0
⋯
0
b
]
,
b
≠
0
[0 \ 0 \cdots 0 \ b],b\ne0
[0 0⋯0 b],b=0的行。若线性方程组相容,则它的解集有两种可能:(1)当没有自由变量时,有唯一解;(2)若至少有一个自由变量,则有无穷多解
参考资料:《线性代数及其应用》David C.Lay