Skip to content

1.2 矩阵与线性变换 ​

上一节我们建立了向量的几何与代数直觉——一根带方向的箭头。本节把视角从对象提升到动作:矩阵(Matrix)描述的是向量如何被变换。无论把向量理解为位置还是信息,矩阵都描述对向量的变换与处理。线性代数重要,因为现实世界中大量问题都可以抽象为用矩阵变换向量。机器学习中的权重矩阵、图像处理中的滤波核、医学影像中的重建矩阵,都是同一回事——一个把输入向量映射到输出向量的线性变换。

1.2.1 矩阵的几何本质与代数表达 ​

矩阵作为线性变换的数学抽象 ​

要理解矩阵,一种视角是把它视为一种函数——把输入向量 x 映射为输出向量 y 的函数。记作 y=Ax,其中 A 是矩阵,x 是输入向量,y 是输出向量。这种函数式的视角赋予矩阵明确的语义,把它看作一种变换动作。

这种变换必须满足两条性质,称为线性(Linearity):

A(u+v)=Au+Av,A(ku)=k(Au)

第一条是可加性——和的像等于像的和;第二条是齐次性——数乘的像等于像的数乘。两条性质合起来等价于:线性变换保持向量的线性组合关系不变。这是后续一切讨论的基石——只要满足这两条,变换就可以用矩阵表示;只要能用矩阵表示,就满足这两条性质。

矩阵的几何直觉:从空间到空间的映射 ​

几何上,矩阵 A 把整个输入空间扭曲成输出空间。具体地说,输入空间中的每一个点(向量 x)都被映射到输出空间中的某个点(向量 Ax)。这种映射可以保持维度(如二维到二维的旋转),也可以改变维度(如三维到二维的投影)。

一个直观的类比是把矩阵看作网格变换器:想象输入空间是一张画满方格的橡皮纸,矩阵 A 就是拉扯橡皮纸的动作——拉伸、旋转、剪切、压缩,但绝不能把直线弯成曲线(这是线性的本质要求)。所有方格可能会变形,但仍然保持直的、平行的特征。后续讨论的行列式、秩、特征值,都是在刻画这种拉扯的不同侧面。

矩阵的代数定义:m × n 数表 ​

代数上,矩阵是一个 m 行 n 列的数表,记作 A∈Rm×n:

A=[a11a12⋯a1na21a22⋯a2n⋮⋮⋱⋮am1am2⋯amn]

其中 aij 表示第 i 行第 j 列的元素。行的生物学意义与列的生物学意义是后续理解矩阵乘法的关键——列向量是基向量的像(下一小节展开),行向量则是输出空间每个分量如何从输入分量组合而来。

在工程实践中,矩阵的行与列常常承载具体的语义。在基因表达数据中,行代表基因,列代表样本;在图像数据中,行代表像素的 y 坐标,列代表 x 坐标;在推荐系统中,行代表用户,列代表商品。理解矩阵语义的行/列含义是后续进行矩阵分解(如 SVD、NMF)的前提。

方阵与非方阵的几何意义差异 ​

方阵(Square Matrix)是行数等于列数的矩阵,即 m=n。方阵对应的线性变换把 Rn 映射到 Rn 自身——空间维度不变,只是被扭曲。常见的方阵包括旋转矩阵、缩放矩阵、反射矩阵,它们都是同维度内的变换。

非方阵(Non-square Matrix)是 m≠n 的矩阵,对应的变换会改变维度。当 m<n(如 2×3 矩阵),变换把三维空间压缩到二维平面,这是降维——主成分分析(PCA)的核心思想就是把高维数据通过非方阵投影到低维空间。当 m>n(如 3×2 矩阵),变换把二维平面嵌入到三维空间,这是升维——把低维特征映射到高维特征空间,常见于核方法(Kernel Methods)。

维度流向

对于矩阵 A∈Rm×n,变换的维度流向是 Rn→Rm——输入是 n 维向量,输出是 m 维向量。记法行决定输出维度,列决定输入维度有助于避免混淆:行数 = 输出维数,列数 = 输入维数。

矩阵的列向量:基向量的像 ​

理解矩阵 A 的有效方式是看它的列。设 A 的第 j 列为 aj,则矩阵作用于单位基向量 ej(第 j 个分量为 1、其余为 0 的向量)的结果是 aj:

Aej=aj

也就是说,矩阵的每一列,就是它把对应基向量映射到的位置。这个观察很重要——它告诉我们:要理解一个矩阵做什么变换,只需要看它把基向量送到了哪里。一旦知道基向量的去向,由线性性质,任意向量(作为基向量的线性组合)的像也就确定了。

具体地,对于 x=(x1,x2,…,xn)T,有:

Ax=x1a1+x2a2+⋯+xnan

即 Ax 就是 A 的各列以 x 的分量为系数的线性组合。这是矩阵-向量乘法的列视角,与行视角(行向量与 x 的点积)形成互补。

单位矩阵与零矩阵 ​

单位矩阵(Identity Matrix)In 是 n×n 的对角矩阵,对角元为 1,非对角元为 0:

In=[10⋯001⋯0⋮⋮⋱⋮00⋯1]

单位矩阵对应恒等变换——它把任何向量映射到自身,Ix=x。几何上,单位矩阵保持空间不动,是所有变换的参照原点。它的列向量是标准正交基 e1,e2,…,en——每个基向量被映射到自身。

零矩阵(Zero Matrix)O 是所有元素都为 0 的矩阵,对应零变换——它把任何向量映射到零向量,Ox=0。几何上,零矩阵把整个空间压扁到一个点(原点)。零矩阵是极端的塌缩变换,它对应的行列式为零,不可逆。

矩阵的分量记法与基向量映射 ​

矩阵的元素 aij 承载着清晰的几何含义:它是输入空间的第 j 个基向量 ej 被变换后,在输出空间的第 i 个坐标轴上的投影分量:

aij=(Aej)i

这种记法把矩阵的每个元素与基向量映射显式联系起来,是理解矩阵-向量乘法的根本视角。当你看到 a23=5 时,应该理解为第 3 个基向量被变换后,其第 2 个坐标分量为 5。

python
import numpy as np

# 一个 2x3 矩阵:把 R^3 映射到 R^2
A = np.array([[1, 2, 0],
              [0, 1, 3]])

# 验证列向量是基向量的像
e1 = np.array([1, 0, 0])
e2 = np.array([0, 1, 0])
e3 = np.array([0, 0, 1])

print(f"A @ e1 = {A @ e1}")  # [1, 0] —— 第 1 列
print(f"A @ e2 = {A @ e2}")  # [2, 1] —— 第 2 列
print(f"A @ e3 = {A @ e3}")  # [0, 3] —— 第 3 列

# 任意向量 x = (4, 5, 6) 的像
x = np.array([4, 5, 6])
print(f"A @ x = {A @ x}")  # [14, 23],即 4*[1,0] + 5*[2,1] + 6*[0,3]

交互演示:基向量的像 ​

下面的交互演示把矩阵的列 = 基向量的像这一核心思想可视化。3D 场景中:

  1. 红/蓝/绿半透明箭头是原始基向量 i^,j^,k^(参照)
  2. 深色不透明箭头是矩阵 A=[ab0cd0001] 作用后的像
  3. 拖动 a,b,c,d 四个滑块,观察 i^′=(a,c,0) 与 j^′=(b,d,0) 如何移动
  4. 鼠标拖拽旋转视角,滚轮缩放,从不同角度观察基向量的像

建议实验:

  • 点击单位矩阵预设,所有箭头重合(A=I)
  • 点击**旋转 45°**预设,观察 i^′,j^′ 整体旋转,长度不变
  • 点击剪切预设,观察 i^′ 不动而 j^′ 倾斜——这是剪切变换的特征
  • 把 a,b,c,d 调成共线(如 a=d,b=c),观察 det(A)→0(两个像共线,维度塌缩)

1.2.2 矩阵的代数运算与几何对应 ​

矩阵运算的代数规则看似繁琐,但每一条规则背后都有清晰的几何含义。理解几何含义比记忆公式重要——公式可以查表得到,但几何直觉一旦建立,就能在新问题中迅速定位正确方向。

矩阵加法:变换的叠加 ​

两个同形状的矩阵 A,B∈Rm×n 的加法,按分量逐项相加:

(A+B)ij=aij+bij

几何意义:矩阵加法对应变换的叠加(Superposition)。(A+B)x=Ax+Bx——对任何向量 x,先单独应用 A 与 B 两个变换,再把结果相加,等价于直接应用 A+B 这个变换。这在物理中常见——两个力场叠加、两个信号叠加、两个扰动叠加,都是矩阵加法的几何实现。

矩阵加法满足交换律(A+B=B+A)与结合律((A+B)+C=A+(B+C)),与向量加法完全类似,是后续讨论线性空间结构的基础。

矩阵数乘:变换强度的缩放 ​

标量 k 与矩阵 A 的数乘定义为每个元素都乘以 k:

(kA)ij=k⋅aij

几何意义:数乘对应变换强度的整体缩放。(kA)x=k(Ax)——把变换 A 的效果放大 k 倍。当 k>1 时,变换效果增强;当 0<k<1 时,变换效果减弱;当 k<0 时,变换结果被反向。注意数乘不改变变换的类型——一个旋转变换数乘后仍然是旋转(再叠加一个缩放),一个剪切变换数乘后仍然是剪切。

矩阵乘法:行与列的点积法则 ​

矩阵乘法是线性代数中重要的运算。对于 A∈Rm×n 与 B∈Rn×p,乘积 C=AB∈Rm×p 的元素 cij 由下式给出:

cij=∑k=1naikbkj=rowi(A)⋅colj(B)

也就是说,C 的第 (i,j) 元素是 A 的第 i 行与 B 的第 j 列的点积。这种行乘列的记法是工程实现的标准方式,但理解矩阵乘法还需要补充列视角:AB 的第 j 列等于 A 乘以 B 的第 j 列,即 colj(AB)=A⋅colj(B)。这一视角在后续理解基变换、特征分解、SVD 时是基础。

矩阵乘法要求内维匹配——A 的列数必须等于 B 的行数。这一要求由函数复合的几何本质决定:A 接受 n 维输入,B 输出 n 维结果,B 的输出才能作为 A 的输入。

矩阵乘法的顺序依赖性 ​

矩阵乘法不满足交换律:一般而言 AB≠BA。这是矩阵乘法与实数乘法显著的区别,也是初学者容易出错的地方。

几何解释清晰:AB 表示先应用 B,再应用 A;BA 表示先应用 A,再应用 B。先旋转再剪切,与先剪切再旋转,结果通常不同——先穿袜子再穿鞋,与先穿鞋再穿袜子,结果截然不同。这种顺序敏感性是变换复合的本质属性。

python
import numpy as np

A = np.array([[0, 1],   # 90 度逆时针旋转
              [-1, 0]])
B = np.array([[2, 0],   # x 方向拉伸 2 倍
              [0, 1]])

print(f"AB =\n{A @ B}")
print(f"BA =\n{B @ A}")
# AB ≠ BA,证明矩阵乘法不可交换

矩阵乘法的结合律 ​

矩阵乘法满足结合律:(AB)C=A(BC)。这条性质看似理所当然,但其几何含义值得深思——它表示**先做 C 再做 AB(即先 C 后 B 后 A)与先做 BC 再做 A(即先 C 后 B 后 A)**完全等价。无论怎么分组,变换的执行顺序都是从右向左依次应用,结果自然相同。

结合律是后续讨论矩阵幂、矩阵指数、矩阵级数的基础。没有结合律,矩阵的连乘就失去了明确含义,高级概念如 eA(矩阵指数)也就无法定义。

矩阵乘法的分配律 ​

矩阵乘法对加法满足分配律:A(B+C)=AB+AC 与 (A+B)C=AC+BC。几何意义:变换对叠加的可分配性——先叠加再变换,等价于分别变换后再叠加。这是线性性质的直接体现,也是后续讨论线性方程组叠加原理的基础。

矩阵乘法的几何本质:函数的复合 ​

矩阵乘法的几何本质是函数的复合(Composition of Functions)。如果把矩阵理解为把输入向量映射到输出向量的函数,那么矩阵乘法 AB 就是先把输入送给 B,再把 B 的输出送给 A——这是函数复合 f∘g 的几何含义。

这个视角把矩阵与函数论统一起来——矩阵是离散的函数,函数是连续的矩阵。在泛函分析中,这种统一达到了极致:算子(无限维矩阵)就是函数空间之间的线性映射。理解矩阵即函数复合,就理解了为什么线性代数在量子力学、信号处理、机器学习中如此重要——它们都在处理复合变换。

矩阵幂:重复应用同一变换 ​

对于方阵 A,定义 Ak 为 A 连乘 k 次:Ak=A⋅A⋯A⏟k 次。几何意义:重复应用同一变换 k 次。

矩阵幂在工程中重要。马尔可夫链的状态转移矩阵 P 的 k 次幂 Pk 描述经过 k 步转移后的状态分布;Google 的 PageRank 算法是计算转移矩阵的高次幂;神经网络中的循环结构可以视为权重矩阵的多次幂。理解矩阵幂的几何含义——同一变换反复作用,是把握这些应用的关键。

矩阵的转置与对称矩阵 ​

矩阵 A∈Rm×n 的转置(Transpose)AT∈Rn×m 定义为把 A 的行与列互换:(AT)ij=aji。几何上,转置对应一种镜像——把行作为输出、列作为输入的视角对调。

如果方阵 A 满足 AT=A,则称 A 为对称矩阵(Symmetric Matrix)。对称矩阵的几何意义重要——它对应自伴随变换,在数学、物理、工程中都起核心作用。在量子力学中,可观测量对应厄米算子(实数情形即对称矩阵);在机器学习中,协方差矩阵、Hessian 矩阵、Gram 矩阵都是对称矩阵;在数值计算中,对称矩阵有更稳定的算法(如对称 QR 算法)。对称矩阵的特征值全是实数,且可以选出正交的特征向量组,这是后续学习谱定理的基础。

交互演示:矩阵加法与乘法的几何对应 ​

下面的演示把本节讨论的两种核心运算——矩阵加法与矩阵乘法——可视化。组件顶部按钮切换两种模式:

  1. 矩阵加法模式:8 个滑块分别调节 A 和 B 的四个元素,画布同时显示三个变换后的正方形——蓝色(仅 A)、紫色(仅 B)、绿色(A+B,叠加效果),右侧实时显示 A+B 的数值
  2. 矩阵乘法模式:8 个滑块调节 A 和 B,分步动画展示**先 B 后 A**的复合过程——原始(灰虚线)→ 应用 B(黄色虚线中间态)→ 应用 A⋅B(红色最终态),右侧显示复合矩阵 AB 的数值

关键观察:

  • 加法模式:绿色 A+B 的正方形 ≠ 蓝色 A 与紫色 B 的简单叠加(位置上),而是对任意向量 x,(A+B)x=Ax+Bx
  • 乘法模式:分步动画直观展示**先 B 后 A**的执行顺序,AB 的几何效果与 BA 通常不同(见 1.2.4 节)

1.2.3 四种基本线性变换 ​

本节是本章的核心。我们将系统讨论四种常见的线性变换:缩放、旋转、剪切、反射。它们是构造一切复杂变换的基本单元——任何二维线性变换都可以分解为这四种基本变换的组合。

缩放变换:均匀与各向异性 ​

缩放变换(Scaling / Dilation)改变向量的长度,但不改变方向(在各向异性缩放下,方向会发生偏转)。简单的缩放矩阵是对角矩阵:

S=[sx00sy]

它把 x 方向的分量缩放 sx 倍,y 方向的分量缩放 sy 倍。

均匀缩放(Uniform Scaling):当 sx=sy=s 时,缩放矩阵为 sI,它把所有向量按同一比例伸缩,方向保持不变。这是简单的缩放,模长变为原来的 |s| 倍。

各向异性缩放(Non-uniform Scaling):当 sx≠sy 时,不同方向的伸缩比例不同,向量的方向一般会改变。例如 sx=2,sy=1 会把单位圆变成椭圆——x 方向拉长 2 倍,y 方向不变。

缩放的几何效果:面积缩放倍率为 |sx⋅sy|——这是后续行列式概念的几何起源。如果 sx⋅sy=0(某个方向被压成零),整个平面被压成一条直线,这是降维塌缩的简单例子。

python
import numpy as np

# 各向异性缩放:x 拉伸 2 倍,y 压缩到 1/2
S = np.array([[2, 0],
              [0, 0.5]])

# 单位圆上的点(参数化)
theta = np.linspace(0, 2*np.pi, 20)
unit_circle = np.stack([np.cos(theta), np.sin(theta)])

# 变换后
transformed = S @ unit_circle

# 面积缩放倍率
print(f"面积缩放倍率 = {np.linalg.det(S)}")  # 1.0,行列式 = s_x * s_y

旋转变换:保持长度不变 ​

旋转变换(Rotation)把向量绕原点旋转一个角度。二维旋转矩阵的标准形式为:

Rθ=[cos⁡θ−sin⁡θsin⁡θcos⁡θ]

按惯例,θ>0 表示逆时针旋转(右手系下)。这种约定源自右手坐标系——如果你把右手大拇指指向 z 轴正方向(指向纸外),其余四指弯曲的方向就是逆时针方向。

旋转的两条关键性质:保持原点不动(线性变换的必然要求)与保持向量长度不变(旋转不改变模长)。后一条使得旋转矩阵是正交矩阵——它的列向量是单位正交的,行列式为 1。这两条性质使得旋转变换在物理(坐标变换)、计算机图形学(相机视角)、机器人学(关节角度)中重要。

三维旋转:在三维空间中,旋转必须指定一个旋转轴。基础的三种旋转是绕 X,Y,Z 轴的旋转,对应三个基础旋转矩阵:

Rx(α)=[1000cos⁡α−sin⁡α0sin⁡αcos⁡α],Ry(β)=[cos⁡β0sin⁡β010−sin⁡β0cos⁡β],Rz(γ)=[cos⁡γ−sin⁡γ0sin⁡γcos⁡γ0001]

任意三维旋转都可以表示为这三种基础旋转的复合,对应的三个角度 α,β,γ 称为欧拉角(Euler Angles)。欧拉角是飞行器姿态、机器人关节、医学影像切片方向的标准描述方式。

剪切变换:保持面积不变 ​

剪切变换(Shear / Skew)是一种形变——把矩形变成平行四边形,但保持面积不变。二维水平剪切矩阵为:

Hx=[1k01]

它的几何效果是:固定 y 坐标,让 x 坐标按 k⋅y 偏移。具体来说,原本在 x 轴上的点(y=0)保持不动;越靠上(y 越大)的点越向右(k>0)或向左(k<0)偏移。视觉上,把一摞卡片向右推——底部不动,顶部偏移最大。

对应的垂直剪切矩阵为:

Hy=[10k1]

它固定 x 坐标,让 y 坐标按 k⋅x 偏移。

剪切变换的一个重要性质是面积不变——其行列式为 1,意味着无论剪切多大,平行四边形的面积始终等于原矩形的面积。这一性质使得剪切在数值计算中有用——许多保体积的变换可以用剪切组合构造,例如 LU 分解就是用一系列剪切变换把矩阵化为上三角。

反射变换:翻转空间定向 ​

反射变换(Reflection)把向量关于某条直线或某个平面对称翻转。常见的二维反射矩阵包括:

关于 X 轴反射(y 取反):

Fx=[100−1]

关于 Y 轴反射(x 取反):

Fy=[−1001]

关于直线 y=x 反射(x 与 y 互换):

Fy=x=[0110]

关于原点的中心对称(点反射,等价于旋转 180°):

FO=[−100−1]

反射变换的关键性质是翻转空间定向——其行列式为 −1。直观地说,反射把右手坐标系变成了左手坐标系,镜子里的文字左右颠倒。这种定向翻转在物理中具有重要意义——宇称不守恒(弱相互作用下镜像不对称)是反射变换非平凡性的物理体现。

交互演示:四种基本变换的实时探索 ​

下面的交互演示把本节讨论的四种基本变换整合在一个场景中。你可以:

  1. 顶部按钮切换变换类型(缩放 / 旋转 / 剪切 / 反射)
  2. 滑块实时调节参数(如缩放系数 sx,sy、旋转角度 θ、剪切系数 k)
  3. 观察灰色虚线是原始单位正方形,绿色(或红色)填充是变换后的形状
  4. 右侧实时显示变换矩阵 A、行列式 det(A)、面积与空间定向

建议实验:

  • 切到缩放,把 sx 或 sy 调到 0,观察 det(A)=0(塌缩为直线)
  • 切到旋转,把 θ 从 0° 扫到 360°,勾选显示旋转轨迹观察单位圆,det(A) 始终为 1
  • 切到剪切,切换水平/垂直方向,调节 k,观察面积守恒行始终绿色高亮(|det|=1)
  • 切到反射,切换 4 种反射轴,观察 det(A)=−1 时填充色由绿变红(定向翻转)

1.2.4 变换的复合与分解 ​

复合变换:矩阵连乘的几何顺序 ​

多个变换连续作用,称为复合变换(Composite Transformation)。代数上,复合变换对应矩阵连乘——若先应用 B,再应用 A,则复合变换为 AB。需要注意的是,矩阵乘法从右向左读——最右侧的矩阵最先应用,最左侧的矩阵最后应用。

这种从右向左的顺序与函数复合 f(g(x)) 的记法一致:g 在内层先执行,f 在外层后执行。理解这一点重要——一旦搞反顺序,结果完全不同(因为矩阵乘法不可交换)。

python
import numpy as np

# 三个变换:B(缩放)→ R(旋转 90°)→ F(关于 X 轴反射)
B = np.array([[2, 0], [0, 1]])              # x 拉伸 2 倍
R = np.array([[0, -1], [1, 0]])              # 逆时针旋转 90°
F = np.array([[1, 0], [0, -1]])              # 关于 X 轴反射

x = np.array([1, 1])

# 顺序:先 B 后 R 后 F,对应复合矩阵 F @ R @ B
composite = F @ R @ B
print(f"复合变换 F·R·B 作用于 x = {composite @ x}")

# 等价的分步执行
y1 = B @ x           # 第 1 步:缩放
y2 = R @ y1          # 第 2 步:旋转
y3 = F @ y2          # 第 3 步:反射
print(f"分步执行结果 = {y3}")  # 应与上面相同

复合变换的顺序解读 ​

先旋转再缩放与先缩放再旋转的差异,可以通过一个具体例子看清。设 x=(1,0):

  • 先旋转 90° 再缩放 2 倍(复合矩阵 S⋅R):先把 (1,0) 旋转为 (0,1),再缩放为 (0,2)。
  • 先缩放 2 倍再旋转 90°(复合矩阵 R⋅S):先把 (1,0) 缩放为 (2,0),再旋转为 (0,2)。

在这个特例中两者恰好相同,但只要换一个向量就会不同——例如 x=(1,1) 时两个顺序给出不同结果。一般而言,变换顺序的依赖性是矩阵乘法不可交换性的直接体现。

矩阵分解的直觉 ​

理解复合变换的另一面是矩阵分解(Matrix Decomposition)——把一个复杂矩阵拆解为若干简单矩阵的乘积。把一道复杂的菜分解为洗、切、炒、调味四个简单步骤,矩阵分解把一个难以直接理解的变换拆解为几个一看就懂的变换的组合。

重要的矩阵分解之一是极分解(Polar Decomposition):任何方阵 A 都可以分解为 A=UP,其中 U 是正交矩阵(旋转/反射),P 是半正定对称矩阵(拉伸/压缩)。几何上,这意味着任何线性变换都可以分解为先拉伸,再旋转两步。这个分解的几何直觉——任何扭曲都可以拆为旋转 + 拉伸——是理解 SVD 的前奏。

更细的分解是 SVD(后续章节详述):A=UΣVT,把任何矩阵(甚至非方阵)分解为旋转—拉伸—旋转三步。SVD 的几何意义与工程价值使它成为线性代数的重要成果之一。

逆变换:撤销操作 ​

如果变换 A 把 x 变为 y=Ax,那么逆变换 A−1 把 y 变回 x:A−1y=x。代数上,逆矩阵满足 A−1A=AA−1=I。几何上,逆变换是撤销操作——把 A 做过的事原路返回。

并非所有变换都有逆。可逆变换(Invertible)要求变换是一一对应的——每个输入对应唯一的输出,且每个输出也对应唯一的输入。从几何上看,可逆变换不能塌缩维度——塌缩意味着多个输入对应同一输出,无法撤销。

不可逆变换(Non-invertible)的典型例子是投影——投影把整个平面压到一条直线,自然无法从直线反推平面。判定矩阵是否可逆的几何标准是是否塌缩维度,代数标准则是下一节要讨论的行列式是否为零。

逆矩阵的代数求法 ​

求解逆矩阵有几种常用方法。

伴随矩阵法:A−1=1detAadj(A),其中 adj(A) 是 A 的伴随矩阵。这种方法理论意义清晰(直接给出逆矩阵的代数表达),但计算量大,仅适用于小矩阵(如 2×2,3×3)。

初等行变换法:把 [A|I] 通过行变换化为 [I|A−1],右半部分就是逆矩阵。这是数值计算中常用的方法,是高斯消元法的同时应用——对 A 做的每一步行变换,同时施加到 I 上,最终 A 变成 I 时,I 就变成了 A−1。

python
import numpy as np

A = np.array([[2, 1],
              [1, 3]])

# 用 NumPy 直接求逆
A_inv = np.linalg.inv(A)
print(f"A^-1 =\n{A_inv}")

# 验证:A @ A^-1 = I
print(f"A @ A^-1 =\n{A @ A_inv}")  # 应接近单位矩阵

# 注意:数值计算中很少显式求逆,通常用 np.linalg.solve 更稳定

逆矩阵的几何性质 ​

逆矩阵满足一条重要的穿脱顺序性质:

(AB)−1=B−1A−1

几何意义直观——复合变换的撤销顺序与原变换相反。穿衣服时先穿内衣再穿外套,脱衣服时必须先脱外套再脱内衣。如果 AB 表示先 B 后 A,那么撤销时必须先撤销 A(即 A−1)再撤销 B(即 B−1),对应 B−1A−1。

这条性质在密码学、信号处理、控制论中频繁使用——任何复合操作的逆操作都必须反向进行。

交互演示:AB ≠ BA 的并排对比 ​

下面的演示用两个并排画布直观展示矩阵乘法的顺序依赖性:

  1. 配置变换 A(旋转 θ)和变换 B(缩放 sx + 剪切 k),通过滑块独立调节
  2. 左画布展示先 A 后 B的复合(矩阵 B⋅A),用绿色填充
  3. 右画布展示先 B 后 A的复合(矩阵 A⋅B),用紫色填充
  4. 点击 下一步 或 自动播放 同步推进两种顺序的分步回放(原始 → 中间态 → 最终态)
  5. 右侧实时显示 A、B、AB、BA 四个矩阵的数值,并验证 det(AB)=det(BA)=det(A)⋅det(B)

关键观察:

  • 两个画布的最终形状通常截然不同——这是 AB≠BA 的直观证据
  • 但两个最终形状的面积相同——因为 det(AB)=det(BA)
  • 调节 θ=0 或 sx=1,k=0 时,A 或 B 退化为恒等矩阵,此时 AB=BA(这是矩阵可交换的特例)

1.2.5 行列式:变换的放大倍数 ​

行列式的几何起源:面积缩放因子 ​

行列式(Determinant)是方阵重要的不变量之一,记作 det(A) 或 |A|。它的几何起源清晰——行列式是变换的面积(或体积)缩放因子。

考虑二维情形。矩阵 A 把整个平面变换后,单位正方形(由基向量 e1,e2 张成)变成了由 Ae1,Ae2 张成的平行四边形。这个平行四边形的面积与原单位正方形面积(为 1)之比,就是 det(A)。换言之,det(A) 是变换后任意区域面积与变换前面积之比。

如果 det(A)=2,说明变换把所有区域的面积都放大 2 倍;如果 det(A)=0.5,说明面积压缩到一半;如果 det(A)=0,说明面积被压成零——整个平面塌缩成一条直线或一个点,这是不可逆变换的特征。

二阶行列式的公式 ​

对于 2×2 矩阵 A=[abcd],行列式公式为:

det(A)=ad−bc

这个看似简单的公式背后有清晰的几何解释。A 的两个列向量是 a1=(a,c)T 与 a2=(b,d)T。这两个向量张成的平行四边形的面积就是 |ad−bc|——这是上一节叉积公式 a1×a2=ad−bc 给出的结果。行列式与叉积在这一层面实现了统一——二维行列式就是两列向量张成的有向面积。

三阶行列式:平行六面体的有向体积 ​

对于 3×3 矩阵,行列式是三个列向量张成的平行六面体的有向体积。这与上一节讨论的混合积完全对应——三阶行列式就是三个列向量的混合积。这一对应关系把代数公式与几何体积无缝连接,使得行列式的几何含义在任意维度下都成立:n 阶行列式是 n 个列向量张成的平行多面体的有向体积。

行列式的符号:空间定向 ​

行列式的符号承载着重要的几何信息——空间定向(Orientation)。

正行列式(det(A)>0)表示变换保持空间定向——右手坐标系变换后仍然是右手坐标系。旋转、缩放(缩放因子为正)、剪切等变换都属于此类。直观地说,原本顺时针的图形变换后仍然顺时针。

负行列式(det(A)<0)表示变换翻转空间定向——右手坐标系变成了左手坐标系,类似照镜子。反射变换的典型行列式为 −1,意味着面积大小不变,但定向翻转。

零行列式(det(A)=0)表示变换塌缩了维度——面积或体积被压成零。这是不可逆变换的标志,后续讨论的秩亏损问题都是行列式为零。

行列式的代数性质与几何对应 ​

行列式有几条核心的代数性质,每一条都对应清晰的几何含义。

乘法性质:det(AB)=det(A)⋅det(B)。几何含义直观——复合变换的面积缩放倍率等于各变换缩放倍率的乘积。如果 A 把面积放大 2 倍,B 把面积放大 3 倍,那么 AB 把面积放大 6 倍。这条性质是后续讨论矩阵分解(如 SVD)的关键工具。

转置不变性:det(AT)=det(A)。几何上,转置不改变体积缩放倍率——无论用行视角还是列视角看变换,面积/体积的缩放效果相同。这条性质使得许多关于行的定理可以自动迁移到列,反之亦然。

逆矩阵性质:det(A−1)=1/det(A)。几何上,逆变换的缩放倍率是原变换的倒数——如果 A 把面积放大 2 倍,那么 A−1 把面积压缩到 1/2。这与撤销操作的几何直觉完全一致。

行列式为零:维度的塌缩 ​

行列式为零是线性代数重要的报警信号。当 det(A)=0 时:

  • 几何上:变换把空间压扁——二维平面被压成直线或点,三维空间被压成平面、直线或点。这种塌缩使得变换不可逆——多个不同的输入被映射到同一输出,无法恢复。
  • 代数上:矩阵不可逆,对应的线性方程组 Ax=b 要么无解(b 不在 A 的列空间中),要么有无穷多解(自由变量存在)。
  • 工程上:数值算法会失效或产生巨大误差,因为系统处于奇异状态。

理解行列式为零的几何含义——维度塌缩——是把握线性代数核心概念(秩、可逆性、解的存在性)的关键。

行列式与可逆性的等价关系 ​

行列式重要的应用之一是判定矩阵可逆性:

det(A)≠0⟺A 可逆

这条等价关系把几何可逆性(变换不塌缩维度)与代数可逆性(行列式非零)严格对应起来。后续学习秩、特征值、SVD 时,这条等价关系会以不同形式反复出现——可逆矩阵的秩满秩、特征值非零、奇异值非零。这些看似不同的判据,都在描述同一件事:变换是否塌缩了维度。

行列式的本质

行列式是一个倍率——它告诉你变换把空间放大或缩小了多少倍。它的符号告诉你是否翻转了空间,它的绝对值告诉你面积/体积的缩放比例,它是否为零告诉你是否塌缩了维度。这三层信息合在一起,构成了行列式作为变换指纹的全部意义。

交互演示:行列式 · 面积与定向 ​

下面的演示把行列式的几何本质——面积缩放因子与定向指示器——可视化。你可以:

  1. 拖动 4 个滑块改变矩阵 A 的四个元素 a,b,c,d
  2. 实时观察单位正方形被变换为平行四边形的过程
  3. 5 个预设按钮一键切换典型场景(单位矩阵 / 旋转 30° / 缩放 2 倍 / 反射 / 不可逆)
  4. 右侧实时显示 det(A)=ad−bc、缩放因子 |det|、面积效果、定向徽章、可逆性

颜色编码(按 |det| 分类):

  • 绿色填充:|det|>1,放大效果(面积变大)
  • 红色填充:|det|<1,缩小效果(面积变小)
  • 灰色填充:|det|≈0,塌缩为直线(不可逆)
  • 黄色填充:|det|≈1,面积基本保持

符号徽章:

  • 蓝色徽章:det>0,定向保持(右手系仍是右手系)
  • 橙色徽章:det<0,定向翻转(右手系变成左手系,伴随翻面动画)
  • 灰色徽章:det≈0,塌缩

建议实验:

  • 点击不可逆预设(a=1,b=2,c=2,d=4,两列共线),观察 det=0、灰色填充
  • 点击反射预设,观察橙色徽章定向翻转和翻面动画
  • 拖动滑块让 det 从正变负,观察徽章从蓝变橙的瞬间翻转
python
import numpy as np

# 可逆矩阵:行列式非零
A = np.array([[2, 1],
              [1, 3]])
print(f"det(A) = {np.linalg.det(A):.2f}")  # 5.0,可逆

# 不可逆矩阵:行列式为零(两列共线)
B = np.array([[1, 2],
              [2, 4]])
print(f"det(B) = {np.linalg.det(B):.2f}")  # 0.0,不可逆

# 反射变换:行列式为负
F = np.array([[1, 0],
              [0, -1]])
print(f"det(F) = {np.linalg.det(F):.2f}")  # -1.0,定向翻转

# 验证乘法性质
print(f"det(A·F) = {np.linalg.det(A @ F):.2f}")       # -5.0
print(f"det(A)·det(F) = {np.linalg.det(A) * np.linalg.det(F):.2f}")  # -5.0

1.2.6 本节小结 ​

从向量到变换的认知跃迁

本节完成了从向量到变换的认知跃迁。矩阵是把输入空间映射到输出空间的线性函数。它的每一列是基向量的像,它的乘法是函数的复合,它的行列式是面积/体积的缩放倍率,它的可逆性对应是否塌缩维度。掌握这一整套动作视角,后续学习线性方程组、特征值、SVD 时,就能始终把握几何本质——它们都是在不同侧面刻画变换的结构。

接下来 1.3 节将把这套变换视角应用于线性方程组——把解方程翻译为寻找被 A 映射到 b 的向量 x,这一翻译会改变你对解方程的几何理解。

练习题 ​

第 1 题 概念推导 ​

设 A,B∈Rn×n 均可逆。证明 (AB)−1=B−1A−1,并用撤销复合变换的顺序这一几何视角解释为何逆序出现,而非 A−1B−1。

参考答案

只需验证 B−1A−1 满足 AB 的逆矩阵定义,即 (AB)(B−1A−1)=I 且 (B−1A−1)(AB)=I。利用矩阵乘法结合律:

(AB)(B−1A−1)=A(BB−1)A−1=AIA−1=AA−1=I.

同理 (B−1A−1)(AB)=B−1(A−1A)B=B−1IB=I,故 (AB)−1=B−1A−1。

几何解读:AB 表示先作用 B 再作用 A。撤销时必须后做的先撤销,即先用 A−1 撤销 A,再用 B−1 撤销 B,整体顺序为 B−1A−1。若写成 A−1B−1,相当于在 A 还未撤销时就试图撤销 B,与原作用顺序不匹配,代数上 (AB)(A−1B−1)=A(BA−1)B−1 一般不等于 I。

第 2 题 代码验证 ​

利用本节的 <CompositeTransformDemo> 交互组件,固定变换 A 为旋转 45°,变换 B 为 x 方向缩放 2 倍加剪切 k=0.5。观察左画布(BA,先 A 后 B)与右画布(AB,先 B 后 A)的最终形状是否相同,并记录 det(AB) 与 det(BA) 的数值,验证 det(AB)=det(BA)=det(A)det(B)。

参考答案

旋转 45° 的矩阵 A=[cos⁡45°−sin⁡45°sin⁡45°cos⁡45°],det(A)=1。缩放加剪切的矩阵 B=[20.501],det(B)=2。两个画布的最终形状通常截然不同——BA 先旋转再剪切会把剪切方向旋转到斜向,AB 先剪切再旋转则保持剪切沿 x 轴后再整体旋转,几何效果差异显著。但两个最终形状的面积相同,因为 det(AB)=det(BA)=det(A)det(B)=1×2=2。这印证矩阵乘法不可交换,而行列式作为面积缩放倍率满足乘法性质。

第 3 题 概念推导 ​

设 A=[1224],b=[36]。计算 det(A),判断 A 是否可逆,并说明从维度塌缩的几何角度为何此矩阵不可逆。

参考答案

det(A)=1×4−2×2=0,故 A 不可逆。从几何角度看,A 的两列 [12] 与 [24] 共线(第二列是第一列的 2 倍),矩阵把整个二维平面塌缩到一条直线上——单位正方形被压成一条线段,面积为零。这种塌缩意味着多个不同的输入向量被映射到同一输出,无法从输出反推输入,故逆矩阵不存在。此时 Ax=b 的解不唯一(沿塌缩方向的自由变量存在),与行列式为零的代数判据一致。

常见错误 ​

错误 1 · 把矩阵乘法当作可交换运算

原因:受标量乘法 ab=ba 的习惯影响,初学时容易写出 AB=BA 或在复合变换中颠倒作用顺序。矩阵乘法一般不可交换,AB 与 BA 的几何效果可能完全不同——先旋转再剪切与先剪切再旋转给出截然不同的形状。

解决:始终按从右向左的顺序解读矩阵连乘:ABx 表示先作用 B 再作用 A。在代码中用 A @ B @ x 时显式注释每步对应的变换名称,避免顺序错位。

错误 2 · 对奇异矩阵直接调用求逆函数

原因:当 det(A)=0 时矩阵不可逆,但 np.linalg.inv 在数值扰动下可能不报错而返回极大数值的伪逆,导致后续计算结果失真。原因在于未先检查行列式或秩。

解决:求逆前先用 np.linalg.matrix_rank(A) 或条件数 np.linalg.cond(A) 判定是否满秩;解线性方程组时优先使用 np.linalg.solve 而非显式求逆,遇到奇异矩阵会抛出 LinAlgError 便于定位问题。

错误 3 · 把行列式为零与矩阵全零混为一谈

原因:看到 det(A)=0 就认为矩阵所有元素为零,或反过来认为只有零矩阵才不可逆。[1224] 这样的非零矩阵同样行列式为零。

解决:明确行列式为零的判据是列向量线性相关,而非元素全零。任何秩亏矩阵(列向量存在冗余)都行列式为零,无论其元素是否非零;判定时检查秩是否等于矩阵阶数。

错误 4 · 复合变换撤销时按原顺序求逆

原因:把 (AB)−1 误写为 A−1B−1,忽视逆序规则。代数上 (AB)(A−1B−1)=A(BA−1)B−1 一般不等于单位阵,几何上相当于先脱外套再脱内衣的顺序反了。

解决:记忆穿脱顺序相反这一类比:复合 AB 是先 B 后 A,撤销时先 A−1 后 B−1,即 (AB)−1=B−1A−1。涉及多个矩阵连乘 Ak⋯A2A1 时,逆矩阵为 A1−1A2−1⋯Ak−1,顺序完全反转。