1线性代数应该这样学(第3版)

向量空间

线性代数的舞台

向量空间子空间线性组合张成

🎯 AI 时代的学习建议:不要只读理论。理解这一章的设计动机(为什么需要这个概念?)和边界条件(什么情况下会失效?)。当 AI 生成的代码涉及这些概念时,你能判断它是否用对了场景。AI 能帮你总结内容,但无法替代你亲手阅读、思考、建立直觉的过程。

第1章 向量空间 - 线性代数的舞台 (Vector Spaces)

一、导读

1.1 本章学习目标

通过本章的学习,你将能够:

理解向量空间的公理化定义:掌握向量空间的八条基本公理,理解为什么这些公理是必要的且充分的

熟练运用子空间的判定准则:能够快速判断一个集合是否构成子空间,并理解子空间在几何上的直观意义

掌握线性组合与张成空间的概念:理解如何用有限个向量生成更大的空间,以及张成空间的几何结构

理解线性无关的本质:区分"冗余"与"必要"的向量,为后续学习基和维度打下基础

建立抽象思维的能力:从具体的 $\mathbb{R}^n$ 空间中抽离出来,理解更一般的向量空间(如多项式空间、函数空间)

掌握向量空间的基本运算性质:能够推导和证明向量空间中的基本定理

将向量空间概念与编程实践结合:用 NumPy 验证向量空间的性质,理解数值计算中的线性代数

1.2 为什么本章如此重要

向量空间是线性代数的基石,是整个学科的"舞台"。如果说线性代数是一部戏剧,那么向量空间就是上演这部戏剧的舞台,所有的演员(向量)、动作(线性变换)、情节(方程组求解、特征值问题)都在这个舞台上展开。

从历史的角度看,向量空间的概念经历了漫长的演化过程。19世纪中叶,数学家们意识到许多看似不同的数学对象(几何向量、多项式、函数等)具有相同的代数结构。这种抽象化的思维方式使得我们可以用统一的理论来处理多样化的问题。Grassmann、Cayley、Hamilton 等先驱者的工作为现代向量空间理论奠定了基础。

从应用的角度看,向量空间的概念无处不在:

  • 计算机图形学:三维空间中的点、方向、颜色都可以看作向量空间中的元素
  • 机器学习:特征向量、词嵌入、图像表示都在高维向量空间中进行操作
  • 量子力学:量子态构成复向量空间(希尔伯特空间),物理可观测量对应线性算子
  • 信号处理:信号可以看作函数空间中的向量,傅里叶变换是基的变换
  • 经济学:商品束、价格向量构成经济模型中的向量空间

从认知的角度看,本章是你从"计算导向"转向"理解导向"的关键转折点。中学阶段的线性代数主要关注矩阵运算和方程组求解的技巧,而本章要求你理解这些运算背后的结构。这种抽象思维的建立不仅对线性代数至关重要,也是学习现代数学(如泛函分析、微分几何、代数拓扑)的必备能力。

1.3 核心问题引导

在学习本章时,请持续思考以下问题:

为什么向量空间的定义需要这八条公理? 如果去掉某一条公理,会发生什么?是否存在满足七条但不满足第八条的"伪向量空间"?

$\mathbb{R}^2$ 和 $\mathbb{R}^3$ 是我们熟悉的向量空间,但多项式空间 $P_n(\mathbb{F})$ 也是向量空间吗? 如何验证?它们的"向量加法"和"标量乘法"是什么?

子空间与原空间的关系是什么? 子空间必须包含零向量吗?为什么?两个子空间的并集一定是子空间吗?交集呢?

张成空间 span($v_1, \ldots, v_n$) 的几何意义是什么? 在 $\mathbb{R}^3$ 中,一个向量的张成空间是什么?两个线性无关向量的张成空间是什么?三个呢?

线性无关的直观含义是什么? 为什么说线性无关的向量组是"最有效率"的生成方式?如何判断一组向量是否线性无关?

向量空间的公理化定义有什么好处? 为什么不直接研究 $\mathbb{R}^n$ 而要引入抽象的向量空间概念?

在编程中,我们如何处理"无限维"向量空间? 计算机只能处理有限数据,那么多项式空间、连续函数空间如何在程序中表示?


二、核心概念详解

2.1 向量空间的公理化定义

定义 1.1(域)

在定义向量空间之前,我们需要先明确"标量"来自哪里。标量通常取自一个域(Field)。

域是一个集合 $\mathbb{F}$,配备了加法 $(+)$ 和乘法 $(\cdot)$ 两种运算,满足以下性质:

加法封闭性:$\forall a, b \in \mathbb{F}$,有 $a + b \in \mathbb{F}$

加法结合律:$\forall a, b, c \in \mathbb{F}$,有 $(a + b) + c = a + (b + c)$

加法交换律:$\forall a, b \in \mathbb{F}$,有 $a + b = b + a$

加法单位元:存在 $0 \in \mathbb{F}$,使得 $\forall a \in \mathbb{F}$,有 $a + 0 = a$

加法逆元:$\forall a \in \mathbb{F}$,存在 $-a \in \mathbb{F}$,使得 $a + (-a) = 0$

乘法封闭性:$\forall a, b \in \mathbb{F}$,有 $a \cdot b \in \mathbb{F}$

乘法结合律:$\forall a, b, c \in \mathbb{F}$,有 $(a \cdot b) \cdot c = a \cdot (b \cdot c)$

乘法交换律:$\forall a, b \in \mathbb{F}$,有 $a \cdot b = b \cdot a$

乘法单位元:存在 $1 \in \mathbb{F}$($1 \neq 0$),使得 $\forall a \in \mathbb{F}$,有 $a \cdot 1 = a$

乘法逆元:$\forall a \in \mathbb{F}$,$a \neq 0$,存在 $a^{-1} \in \mathbb{F}$,使得 $a \cdot a^{-1} = 1$

分配律:$\forall a, b, c \in \mathbb{F}$,有 $a \cdot (b + c) = a \cdot b + a \cdot c$

最常见的域是实数域 $\mathbb{R}$ 和复数域 $\mathbb{C}$。有理数域 $\mathbb{Q}$ 也是一个域。整数集 $\mathbb{Z}$ 不是域,因为除了 $\pm 1$ 外的整数没有乘法逆元。

程序员的直觉:在编程中,我们通常使用 float 或 double 类型来表示实数。虽然浮点数在严格意义上不构成域(由于精度限制),但在大多数应用中可以近似看作域。

定义 1.2(向量空间)

设 $\mathbb{F}$ 是一个域。向量空间(Vector Space)$V$ 是一个集合,其元素称为向量,配备了两种运算:

向量加法:$+: V \times V \to V$,将任意两个向量 $u, v \in V$ 映射到它们的和 $u + v \in V$

标量乘法:$\cdot: \mathbb{F} \times V \to V$,将任意标量 $\lambda \in \mathbb{F}$ 和向量 $v \in V$ 映射到 $\lambda v \in V$

这两种运算必须满足以下八条公理:

加法公理:

  • A1. 加法交换律:$\forall u, v \in V$,有 $u + v = v + u$
  • A2. 加法结合律:$\forall u, v, w \in V$,有 $(u + v) + w = u + (v + w)$
  • A3. 加法单位元:存在零向量 $0 \in V$,使得 $\forall v \in V$,有 $v + 0 = v$
  • A4. 加法逆元:$\forall v \in V$,存在 $-v \in V$,使得 $v + (-v) = 0$

标量乘法公理:

  • S1. 标量乘法单位元:$\forall v \in V$,有 $1 \cdot v = v$(这里的 $1$ 是域 $\mathbb{F}$ 的乘法单位元)
  • S2. 标量乘法结合律:$\forall \lambda, \mu \in \mathbb{F}$,$\forall v \in V$,有 $\lambda(\mu v) = (\lambda\mu)v$

分配律:

  • D1. 标量对向量加法的分配律:$\forall \lambda \in \mathbb{F}$,$\forall u, v \in V$,有 $\lambda(u + v) = \lambda u + \lambda v$
  • D2. 标量加法对标量乘法的分配律:$\forall \lambda, \mu \in \mathbb{F}$,$\forall v \in V$,有 $(\lambda + \mu)v = \lambda v + \mu v$

关键洞察:这八条公理看似繁琐,但每一条都是必要的。它们共同确保了向量空间具有良好的代数结构,使得我们可以在其中进行"线性"操作。注意,公理中没有涉及"长度"、"角度"、"距离"等概念——这些是内积空间才有的结构。向量空间只关心"线性"关系。

例 1.1:$\mathbb{F}^n$ 是最基本的向量空间

设 $\mathbb{F}$ 是一个域,定义:

$$\mathbb{F}^n = \{(x_1, x_2, \ldots, x_n) : x_i \in \mathbb{F}, i = 1, 2, \ldots, n\}$$

向量加法和标量乘法定义为分量wise运算:

$$(x_1, \ldots, x_n) + (y_1, \ldots, y_n) = (x_1 + y_1, \ldots, x_n + y_n)$$

$$\lambda(x_1, \ldots, x_n) = (\lambda x_1, \ldots, \lambda x_n)$$

可以验证 $\mathbb{F}^n$ 满足所有八条公理,因此是一个向量空间。

  • 当 $\mathbb{F} = \mathbb{R}$ 时,$\mathbb{R}^2$ 是平面,$\mathbb{R}^3$ 是三维空间
  • 当 $\mathbb{F} = \mathbb{C}$ 时,$\mathbb{C}^n$ 是复向量空间

例 1.2:多项式空间 $P_n(\mathbb{F})$

设 $n$ 是非负整数,定义:

$$P_n(\mathbb{F}) = \{a_0 + a_1 z + a_2 z^2 + \cdots + a_n z^n : a_i \in \mathbb{F}\}$$

即系数在 $\mathbb{F}$ 中、次数不超过 $n$ 的所有多项式的集合。

向量加法是多项式加法,标量乘法是多项式与标量的乘法。例如,在 $P_2(\mathbb{R})$ 中:

$$(1 + 2z + 3z^2) + (4 + 5z + 6z^2) = 5 + 7z + 9z^2$$

$$2 \cdot (1 + 2z + 3z^2) = 2 + 4z + 6z^2$$

可以验证 $P_n(\mathbb{F})$ 满足向量空间的所有公理。

重要观察:多项式空间中的"向量"不是箭头,而是多项式!这体现了向量空间概念的抽象性——任何满足八条公理的数学对象都可以称为"向量"。

例 1.3:函数空间 $\mathcal{F}(S, \mathbb{F})$

设 $S$ 是一个任意集合,$\mathbb{F}$ 是一个域。定义:

$$\mathcal{F}(S, \mathbb{F}) = \{f : S \to \mathbb{F}\}$$

即从 $S$ 到 $\mathbb{F}$ 的所有函数的集合。

向量加法和标量乘法定义为:

$$(f + g)(x) = f(x) + g(x), \quad \forall x \in S$$

$$(\lambda f)(x) = \lambda \cdot f(x), \quad \forall x \in S$$

这是一个向量空间。特别地:

  • 当 $S = [0, 1]$ 时,$\mathcal{F}([0, 1], \mathbb{R})$ 是定义在区间 $[0, 1]$ 上的所有实值函数的空间
  • 当 $S = \mathbb{N}$ 时,$\mathcal{F}(\mathbb{N}, \mathbb{R})$ 是所有实数列的空间

程序员的直觉:在 Python 中,函数是一等公民,可以作为变量传递。你可以将函数看作"向量",函数加法就是逐点相加。

例 1.4:矩阵空间 $\mathbb{F}^{m \times n}$

所有 $m \times n$ 矩阵的集合,配备矩阵加法和标量乘法,构成一个向量空间。

$$A + B = [a_{ij} + b_{ij}], \quad \lambda A = [\lambda a_{ij}]$$

2.2 向量空间的基本性质

从八条公理出发,我们可以推导出许多有用的性质。以下是几个重要的定理:

定理 1.1:零向量的唯一性

向量空间 $V$ 中的零向量是唯一的。

证明:假设 $0_1$ 和 $0_2$ 都是零向量。根据 A3:

$$0_1 + 0_2 = 0_2 \quad \text{(因为 $0_1$ 是零向量)}$$

$$0_1 + 0_2 = 0_1 \quad \text{(因为 $0_2$ 是零向量)}$$

因此 $0_1 = 0_2$。$\square$

定理 1.2:加法逆元的唯一性

对于任意 $v \in V$,其加法逆元 $-v$ 是唯一的。

证明:假设 $w_1$ 和 $w_2$ 都是 $v$ 的加法逆元,即 $v + w_1 = 0$ 且 $v + w_2 = 0$。则:

$$w_1 = w_1 + 0 = w_1 + (v + w_2) = (w_1 + v) + w_2 = (v + w_1) + w_2 = 0 + w_2 = w_2$$

$\square$

定理 1.3:标量乘法的基本性质

设 $V$ 是 $\mathbb{F}$ 上的向量空间,则:

$0 \cdot v = 0$,其中左边的 $0$ 是域中的零元,右边的 $0$ 是零向量

$\lambda \cdot 0 = 0$,其中 $\lambda \in \mathbb{F}$

$(-1) \cdot v = -v$

证明:

注意到 $0 \cdot v = (0 + 0) \cdot v = 0 \cdot v + 0 \cdot v$。两边同时加上 $-(0 \cdot v)$,得 $0 = 0 \cdot v$。

$\lambda \cdot 0 = \lambda \cdot (0 + 0) = \lambda \cdot 0 + \lambda \cdot 0$。两边同时加上 $-(\lambda \cdot 0)$,得 $0 = \lambda \cdot 0$。

$v + (-1) \cdot v = 1 \cdot v + (-1) \cdot v = (1 + (-1)) \cdot v = 0 \cdot v = 0$。因此 $(-1) \cdot v$ 是 $v$ 的加法逆元,即 $(-1) \cdot v = -v$。$\square$

注意:在这些证明中,我们只使用了向量空间的公理,没有使用任何具体的表示。这就是公理化方法的力量——结论对所有向量空间都成立。

2.3 子空间

定义 1.3(子空间)

设 $V$ 是 $\mathbb{F}$ 上的向量空间。$V$ 的子集 $U \subseteq V$ 称为子空间(Subspace),如果 $U$ 本身在 $V$ 的加法和标量乘法下也构成一个向量空间。

定理 1.4(子空间的判定准则)

$U \subseteq V$ 是子空间当且仅当满足以下三个条件:

零向量在 $U$ 中:$0 \in U$

加法封闭性:$\forall u, v \in U$,有 $u + v \in U$

标量乘法封闭性:$\forall \lambda \in \mathbb{F}$,$\forall u \in U$,有 $\lambda u \in U$

证明:

  • 必要性:如果 $U$ 是子空间,则它本身是向量空间,必须包含零向量,且对加法和标量乘法封闭。
  • 充分性:如果 $U$ 满足三个条件,则 $U$ 继承了 $V$ 的所有八条公理(因为运算相同),且条件保证了运算在 $U$ 内有定义。因此 $U$ 是向量空间,从而是子空间。$\square$

关键洞察:判定子空间时,不需要重新验证八条公理,只需检查三个条件。这是因为子空间"继承"了原空间的结构。

例 1.5:$\mathbb{R}^3$ 的子空间

在 $\mathbb{R}^3$ 中,子空间包括:

  • 零子空间:$\{0\} = \{(0, 0, 0)\}$
  • 过原点的直线:$\{t(a, b, c) : t \in \mathbb{R}\}$,其中 $(a, b, c) \neq (0, 0, 0)$
  • 过原点的平面:$\{s(a_1, b_1, c_1) + t(a_2, b_2, c_2) : s, t \in \mathbb{R}\}$,其中两个方向向量线性无关
  • 整个空间:$\mathbb{R}^3$

几何直觉:$\mathbb{R}^3$ 的子空间必须是"过原点"的直线或平面。不过原点的直线或平面不是子空间,因为它们不包含零向量。

例 1.6:多项式空间的子空间

在 $P_3(\mathbb{R})$ 中,以下集合是子空间:

  • $\{p \in P_3(\mathbb{R}) : p(0) = 0\}$(常数项为零的多项式)
  • $\{p \in P_3(\mathbb{R}) : p(1) = 0\}$(以 $1$ 为根的多项式)
  • $\{p \in P_3(\mathbb{R}) : \deg(p) \leq 2\}$(次数不超过 2 的多项式,即 $P_2(\mathbb{R})$)

但以下集合不是子空间:

  • $\{p \in P_3(\mathbb{R}) : p(0) = 1\}$(不包含零多项式)
  • $\{p \in P_3(\mathbb{R}) : \deg(p) = 2\}$(不包含零多项式,且对加法不封闭:$(z^2) + (-z^2 + z) = z$,次数变为 1)

定理 1.5:子空间的交与和

设 $U_1, U_2$ 是 $V$ 的子空间,则:

交集 $U_1 \cap U_2$ 是子空间

和 $U_1 + U_2 = \{u_1 + u_2 : u_1 \in U_1, u_2 \in U_2\}$ 是子空间

证明:

验证三个条件:

- $0 \in U_1$ 且 $0 \in U_2$,所以 $0 \in U_1 \cap U_2$

- 若 $u, v \in U_1 \cap U_2$,则 $u, v \in U_1$ 且 $u, v \in U_2$。由于 $U_1, U_2$ 都是子空间,$u + v \in U_1$ 且 $u + v \in U_2$,所以 $u + v \in U_1 \cap U_2$

- 类似可证标量乘法封闭性

验证三个条件:

- $0 = 0 + 0 \in U_1 + U_2$

- 若 $w_1, w_2 \in U_1 + U_2$,则 $w_1 = u_1 + v_1$,$w_2 = u_2 + v_2$,其中 $u_1, u_2 \in U_1$,$v_1, v_2 \in U_2$。则 $w_1 + w_2 = (u_1 + u_2) + (v_1 + v_2) \in U_1 + U_2$

- $\lambda w = \lambda(u + v) = \lambda u + \lambda v \in U_1 + U_2$ $\square$

注意:$U_1 \cup U_2$ 不一定是子空间!例如,在 $\mathbb{R}^2$ 中,设 $U_1$ 是 $x$ 轴,$U_2$ 是 $y$ 轴。则 $(1, 0) \in U_1 \cup U_2$,$(0, 1) \in U_1 \cup U_2$,但 $(1, 0) + (0, 1) = (1, 1) \notin U_1 \cup U_2$。

2.4 线性组合与张成空间

定义 1.4(线性组合)

设 $v_1, v_2, \ldots, v_n \in V$,$\lambda_1, \lambda_2, \ldots, \lambda_n \in \mathbb{F}$。向量:

$$\lambda_1 v_1 + \lambda_2 v_2 + \cdots + \lambda_n v_n$$

称为 $v_1, v_2, \ldots, v_n$ 的一个线性组合(Linear Combination)。

定义 1.5(张成空间)

设 $v_1, v_2, \ldots, v_n \in V$。它们的张成空间(Span)定义为:

$$\text{span}(v_1, v_2, \ldots, v_n) = \{\lambda_1 v_1 + \lambda_2 v_2 + \cdots + \lambda_n v_n : \lambda_i \in \mathbb{F}\}$$

即所有可能的线性组合构成的集合。

定理 1.6:张成空间是子空间

$\text{span}(v_1, \ldots, v_n)$ 是 $V$ 的子空间。

证明:

$0 = 0 \cdot v_1 + \cdots + 0 \cdot v_n \in \text{span}(v_1, \ldots, v_n)$

若 $u = \sum_{i=1}^n \lambda_i v_i$,$w = \sum_{i=1}^n \mu_i v_i$,则 $u + w = \sum_{i=1}^n (\lambda_i + \mu_i) v_i \in \text{span}(v_1, \ldots, v_n)$

若 $u = \sum_{i=1}^n \lambda_i v_i$,$\alpha \in \mathbb{F}$,则 $\alpha u = \sum_{i=1}^n (\alpha \lambda_i) v_i \in \text{span}(v_1, \ldots, v_n)$ $\square$

例 1.7:$\mathbb{R}^3$ 中的张成空间

  • $\text{span}((1, 0, 0)) = \{(t, 0, 0) : t \in \mathbb{R}\}$ 是 $x$ 轴
  • $\text{span}((1, 0, 0), (0, 1, 0)) = \{(s, t, 0) : s, t \in \mathbb{R}\}$ 是 $xy$ 平面
  • $\text{span}((1, 0, 0), (0, 1, 0), (0, 0, 1)) = \mathbb{R}^3$

例 1.8:多项式空间的张成

在 $P_2(\mathbb{R})$ 中:

$$\text{span}(1, z, z^2) = P_2(\mathbb{R})$$

因为任意二次多项式 $a + bz + cz^2$ 都可以写成 $a \cdot 1 + b \cdot z + c \cdot z^2$。

同样地:

$$\text{span}(1, 1 + z, 1 + z + z^2) = P_2(\mathbb{R})$$

因为这三个多项式也可以生成任意二次多项式(可以通过解线性方程组验证)。

定义 1.6(有限维向量空间)

如果存在 $v_1, \ldots, v_n \in V$ 使得 $V = \text{span}(v_1, \ldots, v_n)$,则称 $V$ 是有限维(Finite-Dimensional)的。否则称 $V$ 是无限维(Infinite-Dimensional)的。

  • $\mathbb{F}^n$ 是有限维的
  • $P_n(\mathbb{F})$ 是有限维的
  • $P(\mathbb{F})$(所有多项式的空间)是无限维的
  • $\mathcal{F}([0, 1], \mathbb{R})$ 是无限维的

2.5 线性无关

定义 1.7(线性无关)

向量组 $v_1, v_2, \ldots, v_n \in V$ 称为线性无关(Linearly Independent),如果:

$$\lambda_1 v_1 + \lambda_2 v_2 + \cdots + \lambda_n v_n = 0 \implies \lambda_1 = \lambda_2 = \cdots = \lambda_n = 0$$

即只有平凡线性组合才能得到零向量。

如果不满足上述条件,则称向量组线性相关(Linearly Dependent)。

等价表述

$v_1, \ldots, v_n$ 线性相关当且仅当存在不全为零的 $\lambda_1, \ldots, \lambda_n$ 使得 $\sum_{i=1}^n \lambda_i v_i = 0$。

定理 1.7(线性相关的刻画)

$v_1, \ldots, v_n$ 线性相关当且仅当存在某个 $v_j$ 可以表示为其他向量的线性组合,即:

$$v_j \in \text{span}(v_1, \ldots, v_{j-1}, v_{j+1}, \ldots, v_n)$$

证明:

  • 充分性:如果 $v_j = \sum_{i \neq j} \lambda_i v_i$,则 $v_j - \sum_{i \neq j} \lambda_i v_i = 0$,这是一个非平凡线性组合($v_j$ 的系数为 $1 \neq 0$),所以线性相关。
  • 必要性:如果 $\sum_{i=1}^n \lambda_i v_i = 0$ 且存在某个 $\lambda_j \neq 0$,则:

$$v_j = -\frac{1}{\lambda_j} \sum_{i \neq j} \lambda_i v_i$$

$\square$

直观理解:线性无关意味着每个向量都提供了"新信息",没有冗余。线性相关意味着至少有一个向量是"多余"的,可以被其他向量替代。

例 1.9:判断线性无关性

在 $\mathbb{R}^3$ 中:

  • $(1, 0, 0), (0, 1, 0), (0, 0, 1)$ 线性无关
  • $(1, 0, 0), (0, 1, 0), (1, 1, 0)$ 线性相关,因为 $(1, 1, 0) = (1, 0, 0) + (0, 1, 0)$
  • $(1, 2, 3), (4, 5, 6), (7, 8, 9)$ 线性相关(可以验证行列式为零)

在 $P_2(\mathbb{R})$ 中:

  • $1, z, z^2$ 线性无关
  • $1, 1 + z, 1 + z + z^2$ 线性无关
  • $1, z, 1 + z$ 线性相关,因为 $(1 + z) - 1 - z = 0$

定理 1.8(线性无关向量组的长度限制)

在有限维向量空间中,任何线性无关向量组的长度不超过该空间的生成集的长度。

更精确地说:如果 $V = \text{span}(w_1, \ldots, w_m)$,且 $v_1, \ldots, v_n$ 线性无关,则 $n \leq m$。

证明思路:使用替换引理(Steinitz Exchange Lemma)。可以将每个 $v_i$ 替换掉某个 $w_j$,最终得到 $n \leq m$。详细证明见后续章节。$\square$

重要意义:这个定理表明,有限维向量空间中线性无关向量组的长度有上界。这为"维度"的定义奠定了基础。


三、程序员的视角

3.1 在机器学习中的应用

向量空间的概念在机器学习中无处不在:

特征空间:在监督学习中,每个样本被表示为一个特征向量 $x \in \mathbb{R}^d$。所有可能的特征向量构成一个 $d$ 维向量空间。线性分类器(如逻辑回归、支持向量机)在这个空间中寻找一个超平面来分隔不同类别。

词嵌入:在自然语言处理中,单词被映射到高维向量空间(如 Word2Vec、GloVe)。语义相似的单词在向量空间中距离较近。向量空间的线性结构使得我们可以进行类比推理,如:

$$\text{king} - \text{man} + \text{woman} \approx \text{queen}$$

主成分分析(PCA):PCA 的本质是在高维向量空间中寻找一组正交基,使得数据在这些基上的投影方差最大。这涉及到子空间、正交性等线性代数概念。

神经网络:神经网络的每一层可以看作一个线性变换(矩阵乘法)后接一个非线性激活函数。整个网络是从输入空间到输出空间的复杂映射。

3.2 常见陷阱与误区

误区 1:认为所有向量都是"箭头"

向量可以是多项式、函数、矩阵、序列等任何满足向量空间公理的对象。不要局限于几何直觉。

误区 2:混淆"线性无关"与"正交"

线性无关只要求没有冗余,正交要求内积为零。正交向量一定线性无关,但线性无关向量不一定正交。

误区 3:认为子空间必须"小"

整个空间 $V$ 和零子空间 $\{0\}$ 都是 $V$ 的子空间。子空间可以等于原空间。

误区 4:忽略零向量

零向量在任何向量空间中,且任何子空间必须包含零向量。这是判定时最容易忘记的条件。

3.3 与其他层级的联系

  • 与线性映射的联系:线性映射保持向量空间的结构。下一章将深入研究。
  • 与基和维度的联系:线性无关且张成整个空间的向量组称为基。基的大小定义为维度。
  • 与内积空间的联系:在内积空间中,我们可以讨论长度、角度、正交性等概念。
  • 与矩阵理论的联系:矩阵可以看作线性映射在特定基下的表示。

四、代码实战

4.1 验证向量空间公理

python
import numpy as np

def verify_vector_space_axioms(V_add, V_scalar_mul, zero_vector, vectors, scalars):
    """
    验证给定集合是否满足向量空间的部分公理
    
    参数:
    V_add: 向量加法函数
    V_scalar_mul: 标量乘法函数
    zero_vector: 零向量
    vectors: 测试向量列表
    scalars: 测试标量列表
    """
    
    # 测试加法交换律
    for u in vectors:
        for v in vectors:
            if not np.allclose(V_add(u, v), V_add(v, u)):
                print("加法交换律失败")
                return False
    
    # 测试加法结合律
    for u in vectors:
        for v in vectors:
            for w in vectors:
                lhs = V_add(V_add(u, v), w)
                rhs = V_add(u, V_add(v, w))
                if not np.allclose(lhs, rhs):
                    print("加法结合律失败")
                    return False
    
    # 测试零向量
    for v in vectors:
        if not np.allclose(V_add(v, zero_vector), v):
            print("零向量性质失败")
            return False
    
    # 测试标量乘法分配律
    for alpha in scalars:
        for beta in scalars:
            for v in vectors:
                lhs = V_scalar_mul(alpha + beta, v)
                rhs = V_add(V_scalar_mul(alpha, v), V_scalar_mul(beta, v))
                if not np.allclose(lhs, rhs):
                    print("标量分配律失败")
                    return False
    
    print("所有测试通过")
    return True

# 测试 R^3
vectors = [np.array([1, 2, 3]), np.array([4, 5, 6]), np.array([0, 0, 0])]
scalars = [1, 2, -1, 0.5]

verify_vector_space_axioms(
    V_add=lambda u, v: u + v,
    V_scalar_mul=lambda alpha, v: alpha * v,
    zero_vector=np.array([0, 0, 0]),
    vectors=vectors,
    scalars=scalars
)

4.2 判断向量组的线性无关性

python
import numpy as np

def is_linearly_independent(vectors, tol=1e-10):
    """
    判断向量组是否线性无关
    
    参数:
    vectors: 向量列表,每个向量是一维 numpy 数组
    tol: 数值容差
    
    返回:
    bool: 是否线性无关
    """
    # 将向量组成矩阵(每列是一个向量)
    matrix = np.column_stack(vectors)
    
    # 计算矩阵的秩
    rank = np.linalg.matrix_rank(matrix, tol=tol)
    
    # 如果秩等于向量个数,则线性无关
    return rank == len(vectors)

# 示例
v1 = np.array([1, 0, 0])
v2 = np.array([0, 1, 0])
v3 = np.array([0, 0, 1])

print(is_linearly_independent([v1, v2, v3]))  # True

v4 = np.array([1, 1, 0])
print(is_linearly_independent([v1, v2, v4]))  # False,因为 v4 = v1 + v2

4.3 计算张成空间并可视化

python
import numpy as np
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D

def span_visualization(v1, v2, title="Span of two vectors"):
    """
    可视化两个向量在 R^3 中的张成空间(平面)
    """
    fig = plt.figure(figsize=(10, 8))
    ax = fig.add_subplot(111, projection='3d')
    
    # 生成网格点
    s = np.linspace(-2, 2, 20)
    t = np.linspace(-2, 2, 20)
    S, T = np.meshgrid(s, t)
    
    # 计算张成空间中的点
    X = S * v1[0] + T * v2[0]
    Y = S * v1[1] + T * v2[1]
    Z = S * v1[2] + T * v2[2]
    
    # 绘制平面
    ax.plot_surface(X, Y, Z, alpha=0.3, color='blue')
    
    # 绘制原始向量
    ax.quiver(0, 0, 0, v1[0], v1[1], v1[2], color='red', arrow_length_ratio=0.1, label='v1')
    ax.quiver(0, 0, 0, v2[0], v2[1], v2[2], color='green', arrow_length_ratio=0.1, label='v2')
    
    ax.set_xlabel('X')
    ax.set_ylabel('Y')
    ax.set_zlabel('Z')
    ax.set_title(title)
    ax.legend()
    
    plt.tight_layout()
    plt.savefig('/tmp/span_visualization.png', dpi=150, bbox_inches='tight')
    plt.show()

# 示例
v1 = np.array([1, 0, 1])
v2 = np.array([0, 1, 1])
span_visualization(v1, v2, "Span of v1=(1,0,1) and v2=(0,1,1)")

五、深入思考

5.1 历史背景

向量空间的概念并非一蹴而就,而是经历了数百年的演化:

  • 17世纪:笛卡尔创立解析几何,将几何问题转化为代数问题,引入了坐标的概念
  • 19世纪中叶:Grassmann 在其著作《Ausdehnungslehre》(扩张论)中系统地研究了高维空间
  • 1888年:Peano 给出了向量空间的第一个公理化定义
  • 20世纪初:Banach、Hilbert 等人将向量空间推广到无限维情形,建立了泛函分析的基础

Axler 的《Linear Algebra Done Right》强调避免过早引入行列式,而是从向量空间和线性映射的本质出发,这种教学方法更能培养学生的抽象思维能力。

5.2 前沿方向

无限维向量空间:在泛函分析中,我们研究无限维向量空间(如 Banach 空间、Hilbert 空间)。这些空间在量子力学、偏微分方程、信号处理中有重要应用。

拓扑向量空间:在向量空间上引入拓扑结构,可以讨论收敛性、连续性等概念。这在分布理论、广义函数论中至关重要。

范畴论视角:从范畴论的角度看,向量空间构成一个范畴,线性映射是态射。这种抽象视角在现代数学研究中越来越重要。

5.3 延伸阅读

Sheldon Axler, Linear Algebra Done Right, 3rd Edition, Springer, 2015

Gilbert Strang, Introduction to Linear Algebra, 5th Edition, Wellesley-Cambridge Press, 2016

3Blue1Brown, "The Essence of Linear Algebra" 系列视频(YouTube/Bilibili)

MIT OpenCourseWare, 18.06 Linear Algebra by Prof. Gilbert Strang

Stephen H. Friedberg, Arnold J. Insel, Lawrence E. Spence, Linear Algebra, 4th Edition


六、实验笔记

实验 1:探索不同域上的向量空间

目标:理解域的选择如何影响向量空间的结构

步骤:

在 Python 中实现有限域 $\mathbb{F}_2 = \{0, 1\}$ 上的向量空间 $\mathbb{F}_2^3$

列出 $\mathbb{F}_2^3$ 中的所有向量(共 $2^3 = 8$ 个)

找出 $\mathbb{F}_2^3$ 的所有子空间

比较 $\mathbb{F}_2^3$ 与 $\mathbb{R}^3$ 的结构差异

提示:在 $\mathbb{F}_2$ 中,$1 + 1 = 0$,$-1 = 1$。

预期结果:$\mathbb{F}_2^3$ 有 16 个子空间(包括零子空间和自身)。

实验 2:多项式空间的数值实验

目标:验证多项式空间的向量空间性质

步骤:

用 NumPy 数组表示多项式(系数数组)

实现多项式加法和标量乘法

验证 $P_3(\mathbb{R})$ 满足向量空间公理

生成随机多项式,测试线性无关性

实现多项式空间的基变换(如从标准基 $\{1, z, z^2, z^3\}$ 到另一组基)

扩展:研究多项式插值问题。给定 $n+1$ 个点,是否存在唯一的次数不超过 $n$ 的多项式通过这些点?这与线性无关性有何关系?


七、本章小结

本章建立了向量空间的公理化框架,这是线性代数的基础。我们学习了:

核心概念:

  • 向量空间由八条公理定义,包括加法公理、标量乘法公理和分配律
  • 子空间是原空间的子集,且在相同运算下构成向量空间。判定子空间只需验证三个条件:包含零向量、加法封闭、标量乘法封闭
  • 线性组合是向量的加权和,张成空间是所有线性组合的集合
  • 线性无关意味着没有冗余,每个向量都提供新信息

关键定理:

  • 零向量和加法逆元是唯一的
  • 张成空间总是子空间
  • 线性相关的向量组中至少有一个向量可以表示为其他向量的线性组合
  • 有限维空间中线性无关向量组的长度有上界

几何直觉:

  • $\mathbb{R}^3$ 的子空间是过原点的点、直线、平面或整个空间
  • 张成空间的维度随线性无关向量个数增加而增加
  • 线性无关的向量组是"最有效率"的生成方式

编程实践:

  • 用 NumPy 验证向量空间公理
  • 用矩阵秩判断线性无关性
  • 可视化张成空间的几何结构

向量空间的概念将我们从具体的计算提升到抽象的结构理解。下一章我们将引入基和维度的概念,进一步揭示有限维向量空间的结构。


八、习题

基础题

验证 $\mathbb{C}^n$ 在复数域 $\mathbb{C}$ 上构成向量空间。明确指出加法和标量乘法的定义,并验证八条公理。

判断下列集合是否构成 $\mathbb{R}$ 上的向量空间:

- (a) $\{(x, y) \in \mathbb{R}^2 : x \geq 0\}$

- (b) $\{(x, y) \in \mathbb{R}^2 : x = 0 \text{ 或 } y = 0\}$

- (c) $\{(x, y) \in \mathbb{R}^2 : x + y = 0\}$

设 $U$ 和 $W$ 是向量空间 $V$ 的子空间。证明 $U \cap W$ 是子空间,但 $U \cup W$ 不一定是子空间。给出 $U \cup W$ 不是子空间的具体反例。

在 $\mathbb{R}^3$ 中,求 $\text{span}((1, 1, 0), (0, 1, 1), (1, 0, 1))$ 的几何描述。

进阶题

设 $v_1, v_2, v_3$ 线性无关。证明 $v_1 + v_2, v_2 + v_3, v_3 + v_1$ 也线性无关。

设 $U$ 是向量空间 $V$ 的子空间,$v \in V$。定义 $v + U = \{v + u : u \in U\}$。证明 $v + U$ 是子空间当且仅当 $v \in U$。

在 $P_3(\mathbb{R})$ 中,判断下列向量组是否线性无关:

- (a) $1, z, z^2, z^3$

- (b) $1 + z, z + z^2, z^2 + z^3, z^3$

- (c) $1, 1 + z, 1 + z + z^2, 1 + z + z^2 + z^3$

设 $V$ 是有限维向量空间,$U$ 是 $V$ 的子空间。证明存在 $V$ 的子空间 $W$ 使得 $V = U + W$ 且 $U \cap W = \{0\}$。(这样的 $W$ 称为 $U$ 的补子空间)

挑战题

设 $V$ 是 $\mathbb{F}$ 上的向量空间,$v_1, \ldots, v_n \in V$。证明:如果 $\text{span}(v_1, \ldots, v_n) = V$ 且 $v_1, \ldots, v_n$ 线性无关,则对于任意 $v \in V$,存在唯一的 $\lambda_1, \ldots, \lambda_n \in \mathbb{F}$ 使得 $v = \lambda_1 v_1 + \cdots + \lambda_n v_n$。

设 $V$ 是无限维向量空间。证明:对于任意正整数 $n$,存在 $V$ 中的 $n$ 个线性无关向量。

1/9向量空间
0%