Skip to content

1.1 向量与基本运算 ​

线性代数的整体框架,建立在一个对象之上——向量。本节将围绕向量的几何本质、代数运算、度量方式、乘法规则与组合方式五个层面,循序渐进地建立起代数—几何—工程的三层意义。理解向量需要在代数、几何、工程三种视角之间自由切换,而不仅是记住定义与公式。

1.1.1 向量的几何本质与坐标表达 ​

标量与向量的数学定义对比 ​

在进入向量之前,先回顾一个更基础的对象——标量(Scalar)。标量是一个只用一个数就能完全描述的量,例如温度 36.5℃、血压 120 mmHg、基因表达量 5.2。标量只关心多少,不关心朝哪个方向。在数学上,标量就是实数 R 中的元素,它的全部信息浓缩在一个数值里。

向量(Vector)则不同,它同时携带多少和哪个方向两重信息。一个三维力 F=(3,0,4) 牛顿,不仅告诉我们力的大小是 5 牛顿,还告诉我们力的方向是沿 x 轴正向 3 个单位、沿 z 轴正向 4 个单位。当你在临床上推平车时,光知道用力 50 牛顿是没用的——你必须知道这个力是朝病房门口推还是朝墙推。向量相对于标量的扩展在于:在量值之外引入了方向。

从数学形式上看,标量是 R 中的元素,n 维向量是 Rn 中的元素。当 n=1 时,向量退化为标量,因此标量可以视为向量的特殊情形。这种特殊包含于一般的思维方式在数学中常见——一维是高维的退化,实数是复数的退化,标量是向量的退化。

向量的几何具象化:有向线段 ​

把向量放在坐标系中,直观的几何形象是一根带方向的线段,称为有向线段。它有两个关键属性:模长(线段的长度,表示向量的大小)与方向(箭头指向,表示向量的朝向)。在二维平面中,向量 v=(3,4) 就是从原点 (0,0) 出发指向点 (3,4) 的一根箭头;其模长由勾股定理给出 ∥v∥=32+42=5,方向则是从原点看向 (3,4) 的视线方向。

向量的几何本质是方向 + 模长,与起点无关。把同一根箭头平移到平面任何位置,它仍然代表同一个向量。这一点初学者常常忽略,但它却是后续理解自由向量与线性变换的关键。在工程实践中,无论把图像特征向量存在内存的哪个位置,它所表示的特征方向是不变的。

向量的代数具象化:有序数对 ​

几何形象直观但不便于计算,因此需要把向量翻译成代数语言。一个 n 维向量是 n 个有序实数的组合,称为有序数对(在二维情形)或有序数组(在高维情形)。这 n 个数称为向量的分量(component)。

向量有两种书写形式:列向量与行向量。列向量把分量竖向排列:

v=[v1v2⋮vn]∈Rn

行向量把分量横向排列:v=[v1,v2,…,vn]。在大多数线性代数教材与机器学习论文中,默认使用列向量,因为它与矩阵右乘的记法一致:Av 表示矩阵 A 作用于列向量 v。行向量通常视为列向量的转置,记作 vT。本教程在不特别说明时,一律采用列向量。

书写规范提示

在数学推导中,向量通常用粗体小写字母 v 或带箭头的 v→ 表示;标量用普通斜体 v 表示。在工程代码中(如 NumPy),向量就是一维数组,没有粗细之分。看到 v 时脑海中应浮现一根箭头,看到 v 时应浮现一个数。

零向量与负向量 ​

零向量(Zero Vector)是所有分量都为 0 的向量,记作 0。在二维中 0=(0,0),在三维中 0=(0,0,0)。几何上,零向量是从原点指向自身的一根长度为零的箭头——它没有方向,或者说方向是任意的。零向量在向量运算中地位类似于实数 0 在算术中的角色:它是加法的单位元,v+0=v 对任何向量 v 都成立。

负向量(Negative Vector)是与原向量大小相等、方向相反的向量。若 v=(3,4),则 −v=(−3,−4)。几何上,负向量就是把原箭头绕起点旋转 180° 得到的新箭头。负向量的引入使得向量减法可以统一为加法:u−v=u+(−v)。这一点在后续理解线性方程组求解时重要。

单位向量与归一化 ​

单位向量(Unit Vector)是模长为 1 的向量。单位向量的意义在于:它只携带方向信息,把大小这一维度剥离出去。在许多工程场景中(如余弦相似度计算、神经网络权重初始化),我们只关心方向而不关心大小,此时就需要把向量转化为单位向量,这个过程称为标准化或归一化(Normalization)。

给定非零向量 v,其归一化公式为:

v^=v∥v∥

其中 ∥v∥ 是向量的模长。归一化的几何意义是把箭头压缩或拉伸到长度为 1,但保持方向不变。归一化后的向量 v^ 读作 v hat,它的所有分量都除以了同一个标量 ∥v∥,因此分量间的比例关系保持不变,方向自然不变。

python
import numpy as np

# 一个非零向量
v = np.array([3.0, 4.0])

# 模长(L2 范数)
norm_v = np.linalg.norm(v)
print(f"|v| = {norm_v}")  # 输出 5.0

# 归一化得到单位向量
v_hat = v / norm_v
print(f"v̂ = {v_hat}")              # 输出 [0.6 0.8]
print(f"|v̂| = {np.linalg.norm(v_hat)}")  # 输出 1.0

标准正交基:i, j, k ​

在三维空间中,有三个特殊的单位向量构成了整个空间的骨架,它们是 i,j,k:

i=(1,0,0),j=(0,1,0),k=(0,0,1)

这三个向量分别指向 x 轴、y 轴、z 轴的正方向,长度均为 1,且两两互相垂直。它们构成了三维空间的标准正交基(Standard Orthonormal Basis)。所谓正交就是互相垂直,标准就是长度为 1。

任何一个三维向量 v=(v1,v2,v3) 都可以分解为这三个基向量的线性组合:

v=v1i+v2j+v3k

这就是为什么向量的坐标 (v1,v2,v3) 同时具有沿三个坐标轴的投影长度这层几何含义。理解标准正交基是后续学习基变换和特征分解的起点——任何一个基向量组只要满足两两正交且模长为 1,都可以充当坐标系。

自由向量与固定向量的区别 ​

至此需要澄清一个常被忽略的概念区分:自由向量(Free Vector)与固定向量(Bound Vector / Position Vector)。

自由向量只关心方向和模长,与起点无关。把它平移到空间任何位置,仍然代表同一个向量。本教程中讨论的向量运算(加法、数乘、点积、叉积)默认都是对自由向量进行的。在数学推导中,把向量平移到同一起点是为了便于几何作图,但向量本身是自由的。

固定向量则与起点绑定,常用于描述物理中的位置或位移。例如,质点的位置向量 r 通常以坐标原点为起点;力的作用效果不仅取决于力的大小和方向,还取决于作用点(即起点)。

为什么这个区分重要

在物理学中,把力当作固定向量处理才能正确计算力矩;在数学中,把向量当作自由向量才能定义两个向量相等——只要方向相同、模长相等就视为相等,不必关心起点。本教程后续讨论的线性代数概念(如线性组合、张成、线性无关)都建立在自由向量的前提下。

向量坐标与空间点的坐标映射 ​

向量与空间点之间存在一一对应关系:向量 v=(v1,v2,v3) 对应空间中的点 P(v1,v2,v3)。这种对应关系通过从原点出发的固定向量建立:点 P 的坐标就是从原点 O 指向 P 的向量 OP→ 的分量。

这种映射使得点与向量在很多时候可以互换使用,但要理解它们的语义差异:点描述位置,向量描述方向与位移。说点 A 在 (1,2,3)是描述位置;说向量 v=(1,2,3)是描述一个方向。从点 A 到点 B 的位移向量是 AB→=B−A,这是两点决定一个向量的核心公式,也是后续理解减法几何意义的基础。

1.1.2 向量的代数运算与几何可视化 ​

向量能成为线性代数的核心对象,在于它定义了一组结构良好的运算。本节核心的两个运算是加法与数乘,它们共同构成了线性结构的全部内容。后续将要学习的线性变换、线性空间、线性组合等概念,其线性二字都源自这两条运算规则。

加法:分量法则与几何实现 ​

两个 n 维向量 u=(u1,u2,…,un) 与 v=(v1,v2,…,vn) 的加法,按分量法则逐项相加:

u+v=[u1+v1u2+v2⋮un+vn]

这个理解在代数上很简单,在几何上有两种理解方式:

三角形法则(首尾相连):把向量 v 平移,使其起点落在 u 的终点上,则从 u 的起点指向 v 的终点的箭头就是 u+v。这种接龙式的加法在物理中常见——多次位移的合成、多个力的依次作用,都遵循三角形法则。当你从家走到医院(向量 u),再从医院走到病房(向量 v),总位移就是 u+v,与先回家再绕路到病房无关。

平行四边形法则(同起点):把 u 与 v 平移到同一起点,以它们为邻边作平行四边形,则从公共起点出发的对角线就是 u+v。这是物理学中力的合成的标准画法——两个共点力合成为一个等效力的几何表示。

python
import numpy as np

u = np.array([2.0, 1.0])
v = np.array([1.0, 2.0])

# 三角形法则 / 平行四边形法则的代数实现都是分量相加
w = u + v
print(f"u + v = {w}")  # 输出 [3. 3.]

加法运算律的可视化验证 ​

向量加法满足两条关键运算律,它们看起来显然成立,但理解其几何含义能为后续学习抽象代数打下基础。

交换律:u+v=v+u。几何上,平行四边形的两条邻边无论哪条是 u 哪条是 v,对角线都是同一条——因为平行四边形的对边平行且相等。这意味着**先走 u 再走 v和先走 v 再走 u**到达同一个终点。

结合律:(u+v)+w=u+(v+w)。几何上,三个向量首尾相接形成一条折线,无论先合并哪两段,最终从起点指向终点的箭头都是同一个。这条性质使得多个位移求和无需关心计算顺序,是后续定义向量级数、矩阵幂级数的基础。

减法:同起点连终点 ​

向量减法 u−v 的代数定义是分量相减:

u−v=[u1−v1u2−v2⋮un−vn]

几何上有一个非常实用的口诀:同起点,连终点,指向被减向量。把 u 与 v 平移到同一起点,从 v 的终点指向 u 的终点的箭头就是 u−v。这条口诀在解析几何中频繁使用——求两点间距离、求方向向量、计算相对位移,都是向量减法。

减法也可以转化为加法:u−v=u+(−v)。把 −v 视为与 v 反向的向量,然后套用三角形法则即可。这种转化思维在数学中重要——遇到陌生运算时,先尝试把它转化为已知运算,是解决新问题的通用策略。

数乘:分量伸缩法则 ​

向量 v 与标量 k 的数乘(Scalar Multiplication)定义为:

kv=[kv1kv2⋮kvn]

每个分量都乘以 k。几何上,数乘是对向量的伸缩变换,根据 k 的取值有三种情形:

  • |k|>1:向量被拉伸,方向不变(若 k>0)或反向(若 k<0)。例如 2v 是 v 长度变为 2 倍。
  • 0<|k|<1:向量被压缩,方向同样取决于 k 的符号。例如 0.5v 是 v 长度变为 1/2。
  • k<0:向量被反向,再按 |k| 伸缩。例如 −v 是反向不伸缩,−2v 是反向并拉伸 2 倍。
  • k=0:得到零向量 0,无论原向量方向如何。

数乘满足几条重要的运算律:k(u+v)=ku+kv(对向量加法的分配律)、(k+l)v=kv+lv(对标量加法的分配律)、k(lv)=(kl)v(结合律)。其中对向量加法的分配律几何意义丰富——先把向量相加再伸缩与先分别伸缩再相加结果相同,这是后续理解线性变换的几何基础。

python
import numpy as np

v = np.array([1.0, 2.0, 2.0])

# 数乘的各种情形
print(f"2v  = {2 * v}")    # 拉伸 2 倍
print(f"0.5v = {0.5 * v}") # 压缩到 1/2
print(f"-v   = {-v}")      # 反向
print(f"-2v  = {-2 * v}")  # 反向并拉伸
print(f"0v   = {0 * v}")   # 零向量

1.1.3 向量的度量与空间距离 ​

向量有了,下一步就是测量它。本节将定义几种核心的度量:模长、距离、夹角,它们是后续学习范数、距离度量学习、向量相似度的基础。

模长:勾股定理的高维推广 ​

向量 v=(v1,v2,…,vn) 的模长(也叫 ℓ2 范数或欧几里得范数)定义为:

∥v∥2=v12+v22+⋯+vn2=∑i=1nvi2

这是勾股定理在 n 维空间的自然延拓。在二维情形中,∥v∥=v12+v22 就是从原点到点 (v1,v2) 的直线距离;在三维情形中,∥v∥=v12+v22+v32 是空间中一根箭头的长度。模长是向量主要的大小度量,几乎所有后续的归一化、相似度计算、距离比较都建立在它之上。

L1 范数:曼哈顿距离 ​

除了 ℓ2 范数,还有一种常用度量是 ℓ1 范数(也叫曼哈顿距离或出租车距离):

∥v∥1=|v1|+|v2|+⋯+|vn|

它的几何含义是沿坐标轴走的总路程。在曼哈顿这样的方格街道上,从一点到另一点的最短路径沿街道走(ℓ1),无法走直线(ℓ2)。在机器学习中,ℓ1 范数因能产生稀疏解而被广泛用于 Lasso 回归与特征选择——它能自动把不重要的特征系数压到 0,从而实现自动特征筛选。

空间两点间的距离公式 ​

给定点 A 与点 B,它们之间的欧几里得距离是差向量的模长:

d(A,B)=∥AB→∥=∥B−A∥2=∑i=1n(Bi−Ai)2

这个公式把两点距离与向量模长统一在一起。理解这一点的关键是:B−A 就是从 A 指向 B 的位移向量,它的长度自然就是 A 与 B 之间的距离。在 k-means 聚类、k-近邻算法、推荐系统中,距离公式的选择直接决定算法的行为——选择 ℓ2 范数关注整体偏移,选择 ℓ1 范数关注逐维差异。

向量夹角的定义域 ​

两个非零向量 u 与 v 之间的夹角 θ 定义在区间 [0,π] 上。为什么是闭区间?因为 0 表示两向量同向(指向同一方向),π 表示反向(指向相反方向),所有中间值都对应一个唯一的方向关系。夹角不能超过 π,因为超过 π 的角可以等价表示为 2π−θ,方向关系已经反向。

夹角的余弦值 cos⁡θ 在 [−1,1] 之间取值,这个性质将在下一节的点积中起核心作用,它能够将夹角这个几何概念转化为代数计算。

方向余弦 ​

向量与坐标轴正方向之间的夹角的余弦值,称为方向余弦(Direction Cosines)。对于向量 v=(v1,v2,v3),设它与 x,y,z 轴的夹角分别为 α,β,γ,则:

cos⁡α=v1∥v∥,cos⁡β=v2∥v∥,cos⁡γ=v3∥v∥

也就是说,方向余弦就是归一化后向量的各个分量。三个方向余弦满足恒等式 cos2⁡α+cos2⁡β+cos2⁡γ=1。方向余弦在物理(描述力的方向)、计算机图形学(描述相机朝向)、医学影像(描述切片法向量)中都有广泛应用。

python
import numpy as np

v = np.array([3.0, 4.0, 12.0])
norm_v = np.linalg.norm(v)  # 13.0

# 方向余弦
cos_alpha, cos_beta, cos_gamma = v / norm_v
print(f"cos α = {cos_alpha:.4f}")  # 0.2308
print(f"cos β  = {cos_beta:.4f}")  # 0.3077
print(f"cos γ = {cos_gamma:.4f}")  # 0.9231

# 验证恒等式
print(f"平方和 = {cos_alpha**2 + cos_beta**2 + cos_gamma**2:.4f}")  # 1.0000

1.1.4 向量间的乘法:本节的核心 ​

本节的核心,也是整个线性代数中容易被会用不会懂的部分。两种向量乘法——点积与叉积——分别从方向相似度和垂直方向生成两个角度刻画了向量之间的关系。理解它们的几何本质,比记住公式重要得多。

点积:代数定义与几何定义 ​

点积(Dot Product),又称内积(Inner Product)或数量积(Scalar Product),是两个向量之间基础的一种乘法。它的代数定义是对应分量乘积之和:

u⋅v=u1v1+u2v2+⋯+unvn=∑i=1nuivi

注意点积的结果是一个标量(一个数)。这是数量积名称的由来。

点积的几何定义更加直观的阐述了这一点:

u⋅v=∥u∥∥v∥cos⁡θ

其中 θ 是两向量的夹角。这个公式把长度和角度两个几何量压缩成一个数,是线性代数中的重要公式之一。它告诉我们:点积同时编码了长度信息和方向信息——只看一个点积值,你就能反推两向量的夹角。

代数定义与几何定义的等价性是线性代数的一个基本定理,它的证明依赖于余弦定理,这里不再展开。重要的是要建立代数与几何互推的双向直觉:看到 u⋅v 就同时想到分量乘积之和和长度乘夹角余弦。

投影:点积的几何本质 ​

点积的几何意义是投影。给定两个向量 a 与 b,把 a 沿 b 的方向压扁下来,得到 a 在 b 上的投影。

标量投影(也叫投影长度)的公式是:

compba=∥a∥cos⁡θ=a⋅b∥b∥

它表示 a 在 b 方向上的有效长度。当 θ 为锐角时投影为正,钝角时为负,垂直时为零。

向量投影(Projection Vector)则把标量投影转化为一个向量——方向沿 b,长度为标量投影:

projba=a⋅bb⋅bb=(a⋅b∥b∥2)b

推导过程非常自然:先求出标量投影 a⋅b/∥b∥,再乘以 b 方向的单位向量 b/∥b∥,合并分母即得上式。投影是后续理解最小二乘法、傅里叶级数、主成分分析的几何基础,它们都是把向量投影到某个子空间。

点积的运算律 ​

点积满足三条重要的运算律,理解它们的几何含义比记住公式更重要。

交换律:u⋅v=v⋅u。几何上,u 在 v 上的投影长度乘以 ∥v∥,与 v 在 u 上的投影长度乘以 ∥u∥,结果是同一个数;因为两者都等于 ∥u∥∥v∥cos⁡θ。

分配律:u⋅(v+w)=u⋅v+u⋅w。几何上,和向量在 u 上的投影等于两个向量分别在 u 上投影之和。这是投影线性性的体现,也是后续定义线性变换的关键。

数乘结合律:(ku)⋅v=k(u⋅v)。几何上,把 u 拉伸 k 倍,其投影长度也变为 k 倍,因此点积变为 k 倍。

柯西-施瓦茨不等式 ​

点积几何定义的一个直接推论是柯西-施瓦茨不等式(Cauchy-Schwarz Inequality):

|u⋅v|≤∥u∥∥v∥

这个不等式看似抽象,但其几何解释直观:因为 |cos⁡θ|≤1,所以 |u⋅v|=∥u∥∥v∥|cos⁡θ| 一定不超过 ∥u∥∥v∥。等号成立的条件是 |cos⁡θ|=1,即两向量共线(同向或反向)。

柯西-施瓦茨不等式是数学中重要的不等式之一,它在泛函分析、概率论、量子力学中都有深远影响。在机器学习中,它是证明余弦相似度取值范围 [−1,1] 的理论基础,也是 SVM 推导中的关键工具。

利用点积判定正交 ​

点积重要的应用之一是判定正交(垂直)关系。由几何定义 u⋅v=∥u∥∥v∥cos⁡θ 可知:

若 u⋅v=0 且 u,v 均非零,则 cos⁡θ=0,即 θ=π/2,两向量正交。

若 u⋅v>0,则 θ 为锐角,两向量方向相近。

若 u⋅v<0,则 θ 为钝角,两向量方向相反。

若 u⋅v=∥u∥∥v∥,则 θ=0,两向量同向。

点积为零即正交这条性质是整个线性代数中高频使用的结论之一。它把几何垂直翻译成了代数零,使得判定垂直变成了一次简单的乘加运算。后续学习正交矩阵、Gram-Schmidt 正交化、QR 分解时,这条性质都会反复出现。

叉积:二阶与三阶 ​

叉积(Cross Product),又称向量积(Vector Product),是仅在三维(及二维退化情形)中定义的运算。与点积不同,叉积的结果是一个向量,而非标量。

二维叉积(也叫二维外积)的结果是标量。对于 u=(u1,u2) 与 v=(v1,v2):

u×v=u1v2−u2v1

它的几何意义是两向量张成的平行四边形的有向面积——正负号表示 v 在 u 的左侧还是右侧。

三维叉积的结果是向量。对于 u=(u1,u2,u3) 与 v=(v1,v2,v3),利用行列式记法:

u×v=|ijku1u2u3v1v2v3|=(u2v3−u3v2)i−(u1v3−u3v1)j+(u1v2−u2v1)k

这个行列式记法只是助记工具——第一行是基向量,第二行是 u 的分量,第三行是 v 的分量,按第一行展开就得到上述公式。

叉积的几何意义:法向量与面积 ​

叉积重要的几何性质有两条:

第一,方向:u×v 垂直于 u 与 v 所张成的平面。具体指向哪个方向由右手定则(Right-hand Rule)决定——右手四指从 u 转向 v(转角小于 180°),大拇指所指方向就是 u×v 的方向。这条性质使得叉积成为由两个向量生成垂直向量的标准工具,在物理(力矩、电磁力)、计算机图形学(法向量计算)中应用广泛。

第二,模长:∥u×v∥=∥u∥∥v∥sin⁡θ,恰好等于两向量张成的平行四边形的面积。这一性质把面积计算转化为叉积求模,是解析几何中的常用技巧。如果两向量共线(θ=0 或 π),则 sin⁡θ=0,叉积为零向量——这是判定三维向量共线的充要条件。

叉积的运算律 ​

叉积的运算律与点积有重要区别,需要特别注意。

反交换律(Anticommutativity):u×v=−(v×u)。注意这里的负号!交换叉积顺序会改变结果方向。几何上,从 u 转向 v 与从 v 转向 u 是反方向旋转,因此右手定则给出的大拇指方向相反。这与点积的交换律形成鲜明对比——点积交换无影响,叉积交换要加负号。

分配律:u×(v+w)=u×v+u×w。这条性质使得叉积对加法可分配,是后续理解叉积矩阵、李代数等高级概念的基础。

不满足结合律:u×(v×w)≠(u×v)×w。这是叉积与普通乘法最大的差异,使用时务必注意括号位置。

python
import numpy as np

u = np.array([1.0, 0.0, 0.0])  # x 方向单位向量
v = np.array([0.0, 1.0, 0.0])  # y 方向单位向量

# 叉积:x × y = z
cross = np.cross(u, v)
print(f"u × v = {cross}")  # 输出 [0. 0. 1.],即 z 方向

# 反交换律验证
print(f"v × u = {np.cross(v, u)}")  # 输出 [0. 0. -1.]

# 模长 = 平行四边形面积
area = np.linalg.norm(cross)
print(f"面积 = {area}")  # 输出 1.0

混合积:平行六面体的有向体积 ​

把点积与叉积结合,就得到混合积(Scalar Triple Product):

[u,v,w]=u⋅(v×w)

混合积的几何意义很清晰——它等于三个向量张成的平行六面体的有向体积。叉积 v×w 给出底面的法向量(其模长是底面积),再与 u 点积就得到 u 在法向量方向上的投影长度,乘积即为底面积 × 高。

混合积为零,当且仅当三个向量共面(它们张成的平行六面体压扁成平面,体积为零)。这是判定三向量共面的标准方法,也是后续理解行列式几何意义(行列式即体积)的入门。

1.1.5 向量的组合与空间的初步构建 ​

本节是从单向量向向量空间过渡的桥梁。前面讨论的都是单个向量或两个向量之间的关系,从这里开始,我们要把视角提升到一组向量如何构成空间。这种视角的转换,是从算术进入代数的关键一步。

线性组合 ​

给定一组向量 v1,v2,…,vk 和一组标量 c1,c2,…,ck,表达式

c1v1+c2v2+⋯+ckvk

称为这些向量的线性组合(Linear Combination)。线性组合是线性代数最基础的结构——它把加法和数乘两种运算结合起来,构造出无穷多个新向量。

线性组合在工程中无处不在。在机器学习中,神经网络的一层就是输入特征的线性组合加上偏置;在信号处理中,傅里叶级数把任意信号表示为正弦波的线性组合;在统计学中,主成分分析把高维数据表示为若干主成分的线性组合。理解线性组合,就理解了线性代数的加法—数乘二件套如何在工程中应用。

张成:从向量到空间 ​

把一个向量组的所有可能的线性组合构成的集合,称为这个向量组的张成空间(Span),记作 span(v1,…,vk)。

单个非零向量的张成是一条过原点的直线。因为 cv(c∈R)取遍所有实数时,箭头终点在过原点沿 v 方向的直线上移动。无论 c 是正、负还是零,终点都落在这条直线上。

两个不共线向量的张成是一个过原点的平面。因为 c1v1+c2v2 取遍所有 (c1,c2) 时,箭头终点扫过整个由 v1,v2 决定的平面。如果两向量共线,则张成退化为一根直线——这是后续线性相关的雏形。

三个不共面向量的张成是整个三维空间。因为三个独立方向足以够到空间中任何一点。如果三个向量共面,则张成退化为一张平面——它们提供不了第三个独立方向。

张成的直觉

张成回答了一个核心问题:用这些向量能走到哪些地方? 在二维平面中,单个向量只能让你在一条直线上移动;两个不共线向量能让你走到平面任何一点。向量组提供的独立方向数决定了张成空间的维度——这是后续秩概念的几何原型。

线性相关与线性无关 ​

一个向量组如果存在一组不全为零的标量 c1,c2,…,ck,使得

c1v1+c2v2+⋯+ckvk=0

则称这组向量线性相关(Linearly Dependent)。否则称为线性无关(Linearly Independent)。

线性相关的几何直觉是:至少有一个向量可以表示为其他向量的线性组合——它在某种意义上是多余的,去掉它不会减少张成空间。线性无关则意味着每个向量都提供了独立的方向贡献,缺一不可。

  • 两个向量共线(一个能表示为另一个的数倍)→ 线性相关
  • 三个向量共面(一个能表示为另两个的线性组合)→ 线性相关
  • 向量组线性无关 → 每个向量都指出一个新的方向

共线定理与共面定理 ​

共线定理:两个向量 u,v 共线(同向或反向),当且仅当存在实数 k 使得 u=kv。这是两向量线性相关的最简形式。判定方法:叉积为零(三维情形)或对应分量比例相等(任意维情形)。

共面向量定理:三个向量 u,v,w 共面,当且仅当其中一个能表示为另两个的线性组合。判定方法:混合积为零(三维情形),即 u⋅(v×w)=0。

这两条定理在解析几何中频繁使用——判断空间中三点是否共线、四点是否共面、直线与平面是否平行,都是共线/共面判定。它们也是后续学习线性方程组解的结构和矩阵的秩的几何入口。

python
import numpy as np

# 共线判定
u = np.array([1.0, 2.0, 3.0])
v = np.array([2.0, 4.0, 6.0])  # u 的 2 倍,共线
print(f"u × v = {np.cross(u, v)}")  # 输出 [0. 0. 0.],共线判定通过

# 共面判定
a = np.array([1.0, 0.0, 0.0])
b = np.array([0.0, 1.0, 0.0])
c = np.array([1.0, 1.0, 0.0])  # a + b,与 a, b 共面
mixed = np.dot(a, np.cross(b, c))
print(f"混合积 = {mixed}")  # 输出 0.0,共面判定通过

# 线性无关判定(通过矩阵秩)
import numpy.linalg as la
M = np.column_stack([a, b, np.array([0.0, 0.0, 1.0])])
rank = la.matrix_rank(M)
print(f"秩 = {rank}")  # 输出 3,三个向量线性无关

1.1.6 交互演示:把抽象公式变成可操作对象 ​

下面这个 3D 交互演示把本节的核心概念——向量的模长、点积、投影、夹角——全部集中在一个场景中。你可以拖动滑块调整两个向量 a 与 b 的三个分量,实时观察:

  • 两个向量的箭头方向与长度
  • 它们的夹角 θ 的弧度与角度
  • a 在 b 上的投影(绿色虚线)
  • 点积 a⋅b 的数值变化

建议实验:

  1. 把 a 与 b 调到同一方向(如 a=(2,0,0),b=(3,0,0)),观察点积——此时 cos⁡θ=1,点积等于两模长之积。
  2. 把 b 调到与 a 垂直(如 a=(2,0,0),b=(0,3,0)),观察点积——此时 cos⁡θ=0,点积为零。
  3. 把 b 调到与 a 反向(如 a=(2,0,0),b=(−3,0,0)),观察点积——此时 cos⁡θ=−1,点积为负。
  4. 观察投影开关打开时,投影向量的长度如何随夹角变化。

本节小结

本节从向量的几何本质(有向线段)与代数本质(有序数对)出发,建立了代数—几何双向直觉。加法、数乘是后续一切线性结构的源头;模长、距离、夹角提供了向量的度量;点积把方向相似度压缩成一个数,叉积则从两个向量生成垂直方向;线性组合、张成、线性相关则是从个体向量过渡到向量空间的桥梁。掌握这些概念,就为后续学习矩阵、线性变换、特征值打下了坚实基础。

练习题 ​

第 1 题 概念推导 ​

设 a,b∈Rn 且 b≠0。从点积的几何定义 a⋅b=∥a∥∥b∥cos⁡θ 出发,推导 a 在 b 方向上的向量投影公式 projba=a⋅b∥b∥2b,并解释分母为何是 ∥b∥2 而非 ∥b∥。

参考答案

标量投影为 compba=∥a∥cos⁡θ=a⋅b∥b∥,表示 a 在 b 方向上的有效长度。向量投影需要把标量投影乘以 b 方向的单位向量 b^=b∥b∥,得到

projba=compba⋅b^=a⋅b∥b∥⋅b∥b∥=a⋅b∥b∥2b.

分母出现 ∥b∥2 是因为既要除以 ∥b∥ 求标量投影,又要再除以 ∥b∥ 把 b 归一化为单位向量,两次归一合并即得平方。这一形式也保证当 b 缩放 k 倍时投影向量不变,符合投影只依赖方向而非长度的几何直觉。

第 2 题 代码验证 ​

利用本节的 <VectorDemo> 交互组件,取 a=(3,4,0),依次将 b 设为 (1,0,0)、(0,5,0)、(−3,−4,0)、(2,1,1)。记录每组的点积 a⋅b 与模长乘积 ∥a∥∥b∥,验证 |a⋅b|≤∥a∥∥b∥ 是否恒成立,并指出等号成立的几何条件。

参考答案

∥a∥=5。四组数据依次为:b1=(1,0,0),点积 3,模长乘积 5;b2=(0,5,0),点积 20,模长乘积 25;b3=(−3,−4,0),点积 −25,模长乘积 25;b4=(2,1,1),点积 10,模长乘积 56≈12.25。四组均满足 |a⋅b|≤∥a∥∥b∥。等号仅在 b3 这一组成立,此时 b 与 a 共线(反向),夹角 θ=π,|cos⁡θ|=1。这印证柯西-施瓦茨不等式等号条件为两向量共线。

第 3 题 概念推导 ​

设 v1=(1,2,3),v2=(2,4,6),v3=(1,0,1)。判断这三个向量是否线性相关;若相关,给出一组非零标量 c1,c2,c3 使 c1v1+c2v2+c3v3=0,并说明 v3 能否由 v1,v2 线性表出。

参考答案

v2=2v1,故 v1,v2 已经线性相关,三向量整体必然线性相关。取 c1=2,c2=−1,c3=0,则 2v1−v2+0v3=0 成立。但 v3=(1,0,1) 不在 v1 所张成的直线上(v1=(1,2,3) 的三个分量不成 1:0:1 的比例),因此 v3 不能由 v1,v2 线性表出。该例说明线性相关只要求存在冗余向量,不要求每个向量都能被其他向量表出;判定某个具体向量是否可表出,需要单独求解线性方程组。

常见错误 ​

错误 1 · 把零向量的方向说成任意方向

原因:零向量 0 的所有分量为零,模长为零,几何上退化为一个点,没有可定义的朝向。教材中方向任意的表述常被误解为零向量可以指向任何方向,进而在涉及单位向量 v^=v/∥v∥ 时忽视分母为零的隐患。

解决:明确零向量没有方向这一结论,凡涉及归一化、方向角、单位向量的运算都先排除 v=0 的情形,再做后续推导。

错误 2 · 行向量与列向量混用导致矩阵乘法维度不匹配

原因:默认列向量 v∈Rn×1,矩阵右乘列向量 Av 要求 A 的列数等于 n。若在同一推导中把 v 当作行向量 1×n 直接代入 Av,会出现内维不一致的乘法错误,或在 NumPy 中因广播机制得到错误结果而不报错。

解决:在每段推导开头明确约定向量取向(本教程默认列向量),涉及转置时显式写出 vT;在代码中用 v.reshape(-1, 1) 或 v[:, None] 强制列向量形状,避免一维数组的歧义。

错误 3 · 把点积结果当作向量,或把叉积结果当作标量

原因:点积 u⋅v=∑uivi 是标量,叉积 u×v 是向量(三维情形)。两者公式都含乘法与减法,初学时容易把 u⋅v 写成向量形式,或把 u×v 当成面积数值直接使用。

解决:记忆点积出标量、叉积出向量这条结果类型规则;在运算前先核对结果维度,若题目要求面积则对叉积再取模长 ∥u×v∥,而非直接使用叉积本身。

错误 4 · 用叉积为零判定任意维向量的共线

原因:叉积仅在二维(退化形式)与三维中有定义。面对 R4 或更高维的两个向量,套用 u×v=0 判定共线会直接失效,因为高维叉积本身没有标准定义。

解决:高维情形改用对应分量比例相等或秩判据:构造矩阵 [u v],若 rank≤1 则两向量共线;也可检查是否存在标量 k 使 u=kv。