《线性代数》7. 空间和矩阵的秩

发布时间 2023-09-06 19:12:39作者: 古明地盆

欧几里得空间

前面我们一直提到了空间这个概念,比如二维空间、三维空间等等,并在此基础上拓展到 \(n\) 维空间,尽管当时并没有对空间做明确的定义,但相信大家也能理解。然而数学是严谨的,必须要有严格的定义,那么接下来就从数学的角度看看什么是空间。

空间是一个集合,不管是几维的,都可以看作是一个集合,这样的空间我们称之为欧几里得空间。我们目前所接触到的都是欧几里得空间,它是有序实数元组的集合,像 \((6, 66)\) 属于二维欧几里得空间的一个元组,\((3.14, 0, sqrt(2))\) 属于三维欧几里得空间的一个元组。另外注意定义,欧几里得空间是有序实数元组的集合,里面包含了有序,所以 \((6, 66)\)\((66, 6)\) 是不同的元组。

在数学表达法上,会将二维欧几里得空间表示 \(R^{2}\),三维就是 \(R^{3}\)\(n\) 维就是 \(R^{n}\),其中 \(R\) 表示实数集。

当然,有序实数元组有点拗口,我们更习惯称之为点集,也就是原点到终点的向量集合,所以欧几里得空间也可以叫向量空间。另外向量空间不止欧几里得空间一种,只是欧几里得空间太常见了,所以它代指了向量空间。我们说向量的时候,默认指的是欧几里得空间的向量(实数元组)。但向量空间的种类是很多的,除了欧几里得空间外,还有很多其它空间,我们称为广义向量空间。

维度

再来聊一聊维度,我们一直说空间是几维的,那么这个维度该怎么定义呢?还记得空间的基吗,它是一组向量(也被称为基向量),要满足两个性质:

  • 能够生成整个空间
  • 线性无关

而空间的基的向量个数,就叫做空间的维度。而最常见的基便是有标准单位向量组成的基,也叫标准正交基。

比如二维欧几里得空间中最常见的基就是 \(\vec{e_{1}} = (1, 0)^{T}, \vec{e_{2}} = (0, 1)^{T}\),显然它的向量个数为 2,所以空间是二维的,\(dim(R^{2}) = 2\)。并且这个二维也意味着,每个向量(有序实数元组)的元素个数为 2,同理三维欧几里得空间里每个向量的元素个数为 3。

行空间与矩阵的行秩

有三个向量:\(\vec{u} = (2, 0, 0), \vec{v} = (-1, 0, 0), \vec{w} = (0, 0, 1)\),那么它们生成的空间的维度是多少?如果三个向量是线性无关的,那么生成的肯定是三维空间,但很明显 \(\vec{u}, \vec{v}\) 线性相关,并且和 \(\vec{w}\) 都线性无关。因此生成的空间是二维的,也就是说这三个向量组成了三维空间的一个平面。

由于当前这个例子比较简单,所以我们能一眼看出来,但如果向量的维度比较大、数量比较多,就不方便了。那么有没有系统性的方法,得到这个答案呢?说白了就是有一堆的向量,如何判断它们生成的是几维空间,换句话说就是如何判断最多线性无关的向量有多少个。很简单,将这些向量按照行排列成一个矩阵,并化为行最简模式,非零行的个数就是生成空间的维度。

比如有三个向量,\((-1, 2, 3), (1, -4, -13), (-3, 5, 4)\),我们看看它们生成的空间是几维的?

\(\begin{Bmatrix}-1&2&3\\1&-4&-13\\-3&5&4\end{Bmatrix} = \begin{Bmatrix}1&-2&-3\\0&-2&-10\\0&-1&-5\end{Bmatrix} = \begin{Bmatrix}1&-2&-3\\0&1&5\\0&0&0\end{Bmatrix}=\begin{Bmatrix}1&0&7\\0&1&5\\0&0&0\end{Bmatrix}\)

非零行的个数为 2,所以生成空间是二维的。

结论:给出一组向量 \(\vec{v_{1}},\vec{v_{2}},\vec{v_{3}},...,\vec{v_{n}}\),将这组向量行排列成一个矩阵,并使用高斯消元法进行化简,最终非零行的个数就是这组向量生成的空间的维度,而非零行对应的向量就是生成空间的一组基。

并且这些向量可以看作是矩阵的行向量,因此这些向量生成的空间也叫做矩阵的行空间(Row Space);那么同理,如果是矩阵的列向量生成的空间,那么叫矩阵的列空间(Column Space)。

目前我们只需要关注行空间即可,它的求解过程就是上面说的那样,将矩阵化为行最简模式,非零行的数量就是行空间的维度。说白了,如果把它看作是齐次线性方程组的系数的话,那么非零行的个数就是方程组的约束的个数。但现在有一个更专业的名称,非零行的个数我们也称为矩阵的行秩(Row Rank),所以行空间的维度就是矩阵的行秩(反之亦然)。

列空间与矩阵的列秩

将矩阵化成行最简模式,非零行的数量就是矩阵的行秩,也是矩阵的行向量生成的空间(矩阵的行空间)的维度。既然有行空间和行秩,那么就有列空间和列秩,矩阵的列向量生成的空间就叫矩阵的列空间,列空间的维度就叫做矩阵的列秩。但行秩和列秩的求法还不一样,我们举个例子。

假设有三个向量:\(\vec{u} = (2, 0, 0), \vec{v} = (-1, 0, 0), \vec{w} = (0, 0, 1)\),它们生成的空间的维度是多少?首先我们可以将它们行排列,算出矩阵的行秩,便是这些向量生成的空间的维度。但我们也可以将它们按照列来排列,算出矩阵的列秩,也是这些向量生成的空间的维度。

不管是矩阵的行秩(行空间的维度),还是矩阵的列秩(列空间的维度),都是这组向量生成的空间的维度,只是看待的视角不同。那么矩阵的列秩如何求呢?

\(\begin{Bmatrix}2&-1&0\\0&0&0\\0&0&1\end{Bmatrix} · \begin{Bmatrix}x\\y\\z\end{Bmatrix} = 0\)

我们以列的模式组织的话,那么得到的矩阵可以看作是以下方程组的系数矩阵。

\(\begin{cases}2x - y = 0\\z = 0\end{cases}\)

然后我们依旧化为行最简模式:

\(\begin{Bmatrix}2&-1&0\\0&0&0\\0&0&1\end{Bmatrix} = \begin{Bmatrix}1&-0.5&0\\0&0&1\\0&0&0\end{Bmatrix}\)

然后我们要找到主元(每一行中最左侧的非零元素),第一行的主元是 1,它位于第一列;第二行全为 0,没有主元;第三行的主元是 1,位于第三列。所以包含主元的列总共有两列,所以矩阵的列秩为 2。

  • 一个矩阵的行最简形式的非零行个数,就是矩阵的行秩,也是行空间的维度。
  • 一个矩阵的行最简形式的主元列个数,就是矩阵的列秩,也是列空间的维度。

如果把一组向量排成一个矩阵,那么不管是横着排还是竖着排,结果都是一样的。横着排就求行秩,竖着排就求列秩,结果都是这一组向量生成的空间的维度。

如果是行空间,那么所有的非零行就是空间的一组基。那如果是列空间呢?如果获取相应的基呢。首先我们求出了主元列,这里是第一列和第三列,那么原矩阵中的第一列和第三列对应的向量就是空间的一组基,也就是 \((2, 0, 0), (0, 0, 1)\)

注意:基对应的一定是原矩阵中的列,而不是行最简模式中的列,因为我们是按行化简的,不是按列化简。行最简模式只是让我们求出主元都在哪一列,主元列对应的原矩阵的列才是空间的基。

矩阵的秩

矩阵的行秩和列秩并不是孤立存在的,它们之间有着很优美的联系。

目前我们已经明白了什么是行秩,什么是列秩,然后我们再给出一个结论,就是矩阵的行秩和列秩是相同的。也就是说,不管一组向量它是横着排还是竖着排,都不影响,因为一个矩阵的行秩和列秩相同。并且这个矩阵不一定是方阵,任意形状的矩阵都满足此结论,因此行秩和列秩我们统称为矩阵的秩(Rank)。

然后对于 \(n\) 阶方阵来说,如果它的秩和 \(n\) 相同,那么这个矩阵就是满秩的(Full Rank)。此时:

  • 行最简形式的非零行个数为 \(n\)
  • 行最简形式的主元列个数为 \(n\)

而对于一个满秩的方阵在化为行最简模式之后,得到的一定是单位矩阵。

然后来看看如何用 Numpy 来求矩阵的秩。

import numpy as np

mat = np.array(
    [[2, -1, 0], [0, 0, 0], [0, 0, 1]]
)
print(mat)
"""
[[ 2 -1  0]
 [ 0  0  0]
 [ 0  0  1]]
"""
print(np.linalg.matrix_rank(mat))
"""
2
"""

非常简单,一个函数就搞定了。