跳到主要内容

矩阵与行列式

{/* label: chap:ch21 */}

在数学的众多领域中,我们常常需要处理由数字构成的矩形阵列. 为了理解这种结构的起源与威力,让我们回到一个熟悉的问题:求解线性方程组.

考虑一个三元一次方程组: <MathBlock raw={"\begin{aligned} 2x + 3y - z &= 5 4x - y + 2z &= 1 x + 5y + 3z &= 10 \end{aligned}"} /> 当我们运用加减消元法求解时,我们的操作本质上是对方程的系数和常数项进行组合与变换. 变量 x,y,zx, y, z 在整个过程中仅仅是占位符,它们的位置是固定的. 真正承载系统全部信息的是那些数字: <MathBlock raw={"\begin{array}{ccc|c} 2 & 3 & -1 & 5 4 & -1 & 2 & 1 1 & 5 & 3 & 10 \end{array}"} /> 这种洞察启发了一个深刻的思想:我们能否将这些关键的数字信息从方程的形式中剥离出来,作为一个独立的数学对象进行研究? 答案是肯定的. 这个被剥离出来的、由数字构成的矩形阵列,就是我们即将探讨的核心概念——矩阵. 它将线性方程组的求解、几何空间的变换以及数据的统计分析等诸多问题,统一在了一套优美的语言之下.

约束与自由度

在深入研究矩阵之前,我们有必要从一个更基本的层面来理解线性方程组的本质. 在没有任何限制的情况下,三个变量 x,y,zx,y,z 可以在三维空间中自由取值. 我们可以独立地为 x,y,zx,y,z 中的任意一个或多个变量赋值,而不会影响其他变量的可能性. 我们称这种情况拥有三个自由度.

然而,当我们引入第一个方程 2x+3yz=52x+3y-z=5 时, 情况发生了根本性的变化. 这个方程对变量 x,y,zx,y,z 施加了一个约束. 它们不再能够独立地自由取值. 例如, 一旦我们确定了 xxyy 的值, zz 的值就必须是 z=2x+3y5z=2x+3y-5,它被唯一地确定了. 此时,我们只能自由地选择两个变量的值,系统的自由度从三个降至两个.

从几何上看,三个自由度对应着整个三维空间. 而一个形如 ax+by+cz=dax+by+cz=d 的线性方程,在三维空间中定义的是一个平面. 这个平面是一个二维的几何对象. 因此,施加一个约束,等价于将解的活动范围从三维空间限制到了一个二维平面上,自由度减一.

当我们引入第二个方程 4xy+2z=14x-y+2z=1 时, 我们施加了第二个约束. 现在, 解 (x,y,z)(x,y,z) 必须同时位于两个平面上. 两个不平行的平面相交, 其交集是一条直线. 直线是一个一维的几何对象. 这意味着, 我们现在只剩下一个自由度. 只要我们确定了直线上一点的某个坐标 (例如 xx), 其余的坐标 y,zy,z 就会随之确定.

最后,引入第三个方程 x+5y+3z=10x+5y+3z=10, 这是第三个约束. 这个解现在必须同时位于三个平面上. 在通常情况下, 一条直线与一个不平行于它的平面相交, 其交集是一个唯一的点. 点是零维的几何对象. 此时, 我们没有任何自由度了, 变量 x,y,zx,y,z 的值被这三个约束完全锁定,这就是方程组有唯一解的情形.

这个过程揭示了一个核心关系: <MathBlock raw={"\text{解的自由度} = \text{变量的个数} - \text{有效约束的个数}"} /> 然而,并非所有约束都是“有效”的. 如果第三个方程是前两个方程的线性组合 (例如,第一个方程乘以 3),那么它并没有提供任何新的信息,也就不是一个有效的独立约束. 在几何上,这意味着第三个平面恰好也通过前两个平面的交线,因此交集仍然是一条直线,解有无穷多个. 如果第三个方程与前两个方程矛盾 (例如 2x+3yz=1002x+3y-z=100),那么三个平面将没有公共交点,方程组无解.

因此,求解线性方程组的核心问题,转化为一个更为深刻的问题: 如何判断一个方程组中的 nn 个约束是否是相互独立的有效约束? 要系统地回答这个问题,我们需要一种能够描述并量化这些系数之间关系的工具. 这正是矩阵和行列式即将要扮演的关键角色.

向量

{/* label: sec:ch21-s01 */}

在本书的平面向量一章,我们已经接触过向量,它是一种既有大小又有方向的量,常用于描述位移、速度、力等物理概念. 向量可以看作是最简单的“矩阵”,它们是线性代数中最基本的构建块之一.

定义与表示

向量

一个向量是一个有序的数字列表. 它可以表示为一个行向量 或一个列向量.

  • 列向量: v=(v1v2vn)\mathbf{v} = \begin{pmatrix} v_1 \\ v_2 \\ \vdots \\ v_n \end{pmatrix}

  • 行向量: v=(v1v2vn)\mathbf{v} = \begin{pmatrix} v_1 & v_2 & \cdots & v_n \end{pmatrix}

    其中 v1,v2,...,vnv_1, v_2, ..., v_n 称为向量的分量. 向量的维数等于其分量的数量.

几何解释与基本运算

\paragraph{几何解释} 在坐标系中,一个向量可以被理解为一个从原点出发指向某一点的有向线段,其分量对应着该点的坐标.

  • 二维向量 (x,y)(x,y) 对应平面上的一个点.
  • 三维向量 (x,y,z)(x,y,z) 对应三维空间中的一个点.

向量的大小模长 通常用双竖线表示,例如 v\|\mathbf{v}\|. 在二维和三维空间中,它可以用勾股定理计算: <MathBlock raw={"\|\begin{pmatrix} v_1 \\ v_2 \end{pmatrix}\| = \sqrt{v_1^2+v_2^2}, \|\begin{pmatrix} v_1 \\ v_2 \\ v_3 \end{pmatrix}\| = \sqrt{v_1^2+v_2^2+v_3^2}"} />

\paragraph{向量加法} 向量加法的几何意义是将两个向量首尾相接,其和向量是从第一个向量起点到第二个向量终点的向量 (三角形法则);或将两个向量平移到同一起点,其和向量是以这两个向量为邻边构成的平行四边形的对角线 (平行四边形法则). 在代数上,向量加法是对应分量相加. 设 u=(u1u2),v=(v1v2)\mathbf{u} = \begin{pmatrix} u_1 \\ u_2 \end{pmatrix}, \mathbf{v} = \begin{pmatrix} v_1 \\ v_2 \end{pmatrix}, 则 u+v=(u1+v1u2+v2)\mathbf{u}+\mathbf{v} = \begin{pmatrix} u_1+v_1 \\ u_2+v_2 \end{pmatrix}.

\paragraph{标量乘法} 向量的标量乘法是改变向量的长度和/或方向. 标量 kk 乘以向量 v\mathbf{v}, 就是将 v\mathbf{v} 的每个分量都乘以 kk. 设 v=(v1v2)\mathbf{v} = \begin{pmatrix} v_1 \\ v_2 \end{pmatrix}, kk 为标量, 则 kv=(kv1kv2)k\mathbf{v} = \begin{pmatrix} kv_1 \\ kv_2 \end{pmatrix}. 如果 k0k\>0, 向量方向不变, 长度变为原来的 kk 倍;如果 k\<0k\<0, 向量方向反向, 长度变为原来的 k|k| 倍.

矩阵

{/* label: sec:ch21-s02 */}

在很多问题中,我们需要同时处理一大批数,例如线性方程组的各个系数、几何中的坐标数据等. 把这些数随意堆在一起既不直观,也不便于运算;把它们按“行”和“列”排成一个长方形的数表,就得到本节要讨论的矩阵.

除了作为“有结构的数表”之外,更重要的是:在解析几何里,如果把平面或空间中的点写成向量,那么“对整个平面(或空间)做一次统一的变换”(比如绕原点旋转、沿某个方向拉伸)往往都可以用一个矩阵来描述. 从这个意义上说,矩阵是研究几何变换的基本工具.

定义与记法

矩阵

一个 m×nm\times n矩阵是一个由 mnm\cdot n 个数排成的长方形数表, 它有 mm(自上而下)和 nn(自左向右). 本书中,矩阵里的数一般取实数(必要时会说明为复数或其他数).

我们通常用大写字母表示矩阵,例如 AA.为了精确地指明矩阵中的每一个数,我们给这些数编上“行、列”两个下标:记 <MathBlock raw={"a_{ij} \text{ 为矩阵 } A \text{ 中第 } i \text{ 行、第 } j \text{ 列的元素} (1\le i\le m,\ 1\le j\le n)."} /> 于是一个 m×nm\times n 的矩阵 AA 可以写成 <MathBlock raw={"A = \begin{pmatrix} a_{11} & a_{12} & \cdots & a_{1n} a_{21} & a_{22} & \cdots & a_{2n} \vdots & \vdots & \ddots & \vdots a_{m1} & a_{m2} & \cdots & a_{mn} \end{pmatrix}."} /> 为了强调“由哪些元素组成”和“大小是多少”,我们也常将其简记为 <MathBlock raw={"A = (a_{ij}){m\times n} \text{或}
A = (a
{ij})_{1\le i\le m,\ 1\le j\le n}."} /> 在矩阵的大小 m×nm\times n 已经由上下文明确时, 也常简写为 A=(aij)A=(a_{ij}).

  • 2×32\times 3 矩阵: <MathBlock raw={"A = \begin{pmatrix} 1 & -2 & 0 \\ 4 & 5 & 9 \end{pmatrix}."} /> 它有 2 行、3 列,所以是一个 2×32\times 3 矩阵. 按上面的记号,矩阵元素 a21a_{21}(第 2 行、第 1 列)等于 44, a13a_{13}(第 1 行、第 3 列)等于 00,等等.
  • 3×33\times 3 的单位矩阵: <MathBlock raw={"B = \begin{pmatrix} 1 & 0 & 0 \\ 0 & 1 & 0 \\ 0 & 0 & 1 \end{pmatrix}."} /> 这个矩阵的行数与列数都为 3,它是一个 3×33\times3 矩阵. 这类行数和列数相同的矩阵统称为方阵,在后续的行列式、逆矩阵和特征值等内容中会反复出现.
  • 3×13\times 1 的列向量: <MathBlock raw={"C = \begin{pmatrix} 7 \\ -5 \\ 1 \end{pmatrix}."} /> 只有一列的矩阵被称为列向量,可以看作是“竖着写”的一组数,常用来表示空间中一点的坐标或一个方向.
  • 1×41\times 4 的行向量: <MathBlock raw={"D = \begin{pmatrix} 8 & 0 & -2 & 6 \end{pmatrix}."} /> 只有一行的矩阵被称为行向量,可以看作是“横着写”的一组数.
方阵

当一个矩阵的行数与列数相等时(即 m=nm=n), 我们称之为一个 nn 阶方阵, 也常写作“nn 阶矩阵”.

方阵在线性代数中占据着核心地位:行列式、逆矩阵、特征值和特征向量等重要概念,都是首先在方阵上定义的.

\paragraph{矩阵作为平面或空间的变换} 上面的定义把矩阵看作“排成表格的数”.从几何的角度看,更重要的是:矩阵可以用来描述平面或空间中的线性几何变换.

例如,在平面上,每个点都可以用一个列向量来表示: <MathBlock raw={"(x,y) \in \mathbb{R}^2 \longleftrightarrow
\begin{pmatrix} x \\ y \end{pmatrix}."} /> 给定一个 2×22\times2 矩阵 <MathBlock raw={"A=\begin{pmatrix} a & b \\ c & d \end{pmatrix},"} /> 我们可以让它作用在这个向量上: <MathBlock raw={"A\begin{pmatrix} x \\ y \end{pmatrix}

\begin{pmatrix} ax+by \\ cx+dy \end{pmatrix}."} /> 几何上,这表示:平面上点 (x,y)(x,y) 被矩阵 AA 送到新点 <MathBlock raw={"(x',y') = (ax+by,\; cx+dy)."} /> 于是,矩阵 AA 描述了一次把整个平面“统一移动”的过程——例如整体拉伸、压缩、剪切或者绕原点旋转等.

拉伸与压缩

考虑 <MathBlock raw={"S = \begin{pmatrix} 2 & 0 \\ 0 & \tfrac12 \end{pmatrix}."} /> 则 <MathBlock raw={"S\begin{pmatrix} x \\ y \end{pmatrix}

\begin{pmatrix} 2x \\ \tfrac12 y \end{pmatrix}."} /> 几何上,这个矩阵把所有点的 xx 坐标放大 2 倍, 把 yy 坐标缩小为原来的一半:整个平面在水平方向被拉伸,在竖直方向被压缩.

绕原点旋转 $90^\circ$

考虑 <MathBlock raw={"R = \begin{pmatrix} 0 & -1 \\ 1 & 0 \end{pmatrix}."} /> 对任意点 (x,y)(x,y), <MathBlock raw={"R\begin{pmatrix} x \\ y \end{pmatrix}

\begin{pmatrix} -y \\ x \end{pmatrix}."} /> 在平面中,把点 (x,y)(x,y) 绕原点逆时针旋转 9090^\circ 后的坐标正好是 (y,x)(-y,x). 因此,矩阵 RR 准确地表示了“绕原点逆时针旋转 9090^\circ”这一几何变换.

以后,当我们写 AxA\boldsymbol{x}(矩阵 AA 乘以列向量 x\boldsymbol{x})时,可以同时记住两个图像:

  • 代数上:按行列相乘的规则得到一个新的向量;
  • 几何上:x\boldsymbol{x} 对应的点在平面(或空间)中被某个几何变换送到了新位置.

矩阵的运算

有了记号 A=(aij)A=(a_{ij}) 之后,我们可以非常简洁地描述矩阵之间的运算. 从几何的角度看,这些运算也会对应到“把变换叠加”“把变换整体缩放”等操作(后面在矩阵乘法中会看到).

\paragraph{矩阵加法与标量乘法} 矩阵的加法与数乘运算都是逐元素进行的. 设 A=(aij)A=(a_{ij})B=(bij)B=(b_{ij}) 是两个大小相同m×nm\times n 矩阵, kk 是一个常数(也称为标量).定义 <MathBlock raw={"A+B := (a_{ij}+b_{ij}){m\times n},
kA := (ka
{ij})_{m\times n}."} /> 也就是说:

  • 矩阵加法:两个矩阵相加,得到一个同大小的新矩阵,新矩阵的每一个元素,都是原矩阵对应位置元素之和;
  • 标量乘法:一个标量乘以一个矩阵,得到一个同大小的新矩阵,新矩阵的每一个元素,都是原矩阵对应位置元素与该标量的乘积.

矩阵的减法 ABA-B 定义为加法与标量乘法的组合: <MathBlock raw={"A-B := A + (-1)B."} />

A=(1230)A = \begin{pmatrix} 1 & -2 \\ 3 & 0 \end{pmatrix}, B=(4516)B = \begin{pmatrix} 4 & 5 \\ -1 & 6 \end{pmatrix}.计算 A+BA+B.

把对应位置的元素相加: <MathBlock raw={"\begin{aligned} A+B &= \begin{pmatrix} 1 & -2 \\ 3 & 0 \end{pmatrix} + \begin{pmatrix} 4 & 5 \\ -1 & 6 \end{pmatrix} &= \begin{pmatrix} 1+4 & -2+5 \\ 3+(-1) & 0+6 \end{pmatrix} &= \begin{pmatrix} 5 & 3 \\ 2 & 6 \end{pmatrix}. \end{aligned}"} />

设矩阵 C=(201451)C = \begin{pmatrix} 2 & 0 & -1 \\ 4 & 5 & 1 \end{pmatrix}.计算 3C3C.

把标量 33 乘入矩阵的每一个元素: <MathBlock raw={"\begin{aligned} 3C &= 3 \begin{pmatrix} 2 & 0 & -1 \\ 4 & 5 & 1 \end{pmatrix} &= \begin{pmatrix} 3\cdot2 & 3\cdot0 & 3\cdot(-1) \\ 3\cdot4 & 3\cdot5 & 3\cdot1 \end{pmatrix} &= \begin{pmatrix} 6 & 0 & -3 \\ 12 & 15 & 3 \end{pmatrix}. \end{aligned}"} />

X=(8104)X = \begin{pmatrix} 8 & 1 \\ 0 & 4 \end{pmatrix}, Y=(2351)Y = \begin{pmatrix} -2 & 3 \\ 5 & 1 \end{pmatrix}.计算 2X3Y2X - 3Y.

这是标量乘法与矩阵加减法的组合.先分别计算 2X2X3Y3Y: <MathBlock raw={"2X = 2\begin{pmatrix} 8 & 1 \\ 0 & 4 \end{pmatrix} = \begin{pmatrix} 16 & 2 \\ 0 & 8 \end{pmatrix},
3Y = 3\begin{pmatrix} -2 & 3 \\ 5 & 1 \end{pmatrix} = \begin{pmatrix} -6 & 9 \\ 15 & 3 \end{pmatrix}."} /> 然后相减: <MathBlock raw={"\begin{aligned} 2X - 3Y &= \begin{pmatrix} 16 & 2 \\ 0 & 8 \end{pmatrix} - \begin{pmatrix} -6 & 9 \\ 15 & 3 \end{pmatrix} &= \begin{pmatrix} 16 - (-6) & 2-9 \\ 0-15 & 8-3 \end{pmatrix} &= \begin{pmatrix} 22 & -7 \\ -15 & 5 \end{pmatrix}. \end{aligned}"} />

矩阵的乘法

矩阵的加法与标量乘法是逐元素定义的,这非常直观;但矩阵乘法却并不是“对应位置元素相乘”. 这种看似“反直觉”的定义,其实不是人为规定出来的,而是从线性变换的复合几何变形的叠加中自然涌现的结果.

假设我们有两组变量,其中第一组变量 {y1,y2}\{y_1, y_2\} 可以由第二组变量 {x1,x2,x3}\{x_1, x_2, x_3\} 的线性组合来表示: <MathBlock raw={"\begin{aligned} y_1 &= a_{11}x_1 + a_{12}x_2 + a_{13}x_3, y_2 &= a_{21}x_1 + a_{22}x_2 + a_{23}x_3 . \end{aligned}"} /> 线性关系可以写成矩阵形式 <MathBlock raw={"\begin{pmatrix} y_1 \\[0.2em] y_2 \end{pmatrix}

\begin{pmatrix} a_{11} & a_{12} & a_{13} a_{21} & a_{22} & a_{23} \end{pmatrix} \begin{pmatrix} x_1 \\[0.2em] x_2 \\[0.2em] x_3 \end{pmatrix}, \text{记作 } y = Ax."} /> 也就是说,AA33 维空间 R3\mathbb{R}^3 中的向量 xx 映射到 22 维空间 R2\mathbb{R}^2 中的向量 yy.

再假设有第三组变量 {z1,z2}\{z_1, z_2\}{y1,y2}\{y_1, y_2\} 线性表示: <MathBlock raw={"\begin{aligned} z_1 &= b_{11}y_1 + b_{12}y_2, z_2 &= b_{21}y_1 + b_{22}y_2, \end{aligned}"} /> 同样写成矩阵形式: <MathBlock raw={"\begin{pmatrix} z_1 \\[0.2em] z_2 \end{pmatrix}

\begin{pmatrix} b_{11} & b_{12} b_{21} & b_{22} \end{pmatrix} \begin{pmatrix} y_1 \\[0.2em] y_2 \end{pmatrix}, \text{记作 } z = By."} />

现在我们面临一个自然的问题:能否找到一个直接的线性关系,把 {z1,z2}\{z_1, z_2\} 写成 {x1,x2,x3}\{x_1, x_2, x_3\} 的线性组合?为此, 我们将 y=Axy=Ax 代入到 z=Byz=By 中进行推导: <MathBlock raw={"\begin{aligned} z_1 &= b_{11}(a_{11}x_1 + a_{12}x_2 + a_{13}x_3) + b_{12}(a_{21}x_1 + a_{22}x_2 + a_{23}x_3) &= (b_{11}a_{11} + b_{12}a_{21})x_1

  • (b_{11}a_{12} + b_{12}a_{22})x_2
  • (b_{11}a_{13} + b_{12}a_{23})x_3, z_2 &= b_{21}(a_{11}x_1 + a_{12}x_2 + a_{13}x_3) + b_{22}(a_{21}x_1 + a_{22}x_2 + a_{23}x_3) &= (b_{21}a_{11} + b_{22}a_{21})x_1
  • (b_{21}a_{12} + b_{22}a_{22})x_2
  • (b_{21}a_{13} + b_{22}a_{23})x_3. \end{aligned}"} />

于是 zzxx 的直接关系也可以写成矩阵形式 z=Cxz=Cx,其中 <MathBlock raw={"C = \begin{pmatrix} b_{11}a_{11} + b_{12}a_{21} & b_{11}a_{12} + b_{12}a_{22} & b_{11}a_{13} + b_{12}a_{23} b_{21}a_{11} + b_{22}a_{21} & b_{21}a_{12} + b_{22}a_{22} & b_{21}a_{13} + b_{22}a_{23} \end{pmatrix}."} /> 注意到 z=By=B(Ax)=(BA)x=  Cxz=By=B(Ax)=(BA)x=\;Cx, 因此我们自然地把 CC 记作 BABA, 称为 BBAA乘积. (这里之所以记为 BABA 而不是 ABAB, 是因为从变量关系看, 是xx 施加 AA, 施加 BB;在矩阵算符的表达中,作用顺序总是从右往左的.)

仔细观察 CC 的元素,例如 <MathBlock raw={"c_{11} = b_{11}a_{11} + b_{12}a_{21}

\begin{pmatrix} b_{11} & b_{12} \end{pmatrix} \cdot \begin{pmatrix} a_{11} \\[0.1em] a_{21} \end{pmatrix},"} /> 它是 BB 的第一行与 AA 的第一列的内积. 一般地, cijc_{ij}BB 的第 ii 行与 AA 的第 jj 列的内积. 这就是“行乘列求和”计算规则的由来.

矩阵乘法

AAm×nm\times n 矩阵, BBp×mp\times m 矩阵. 若 BB 的列数(mm)等于 AA 的行数(mm), 则乘积 C=BAC=BA 有定义, 并且是一个 p×np\times n 矩阵. 它的第 ii 行第 jj 列元素定义为 <MathBlock raw={"c_{ij}

(\text{BB 的第 ii 行})\cdot(\text{AA 的第 jj 列})

\sum_{k=1}^{m} b_{ik}a_{kj}."} />

上述推导给出了代数上的严谨定义. 然而,若仅停留在代数层面,这个定义似乎仍显生硬. 为了真正看清楚矩阵乘法背后的深层逻辑,我们需要转向几何视角,去审视矩阵作为线性变换的本质.

R2\mathbb{R}^2 中,标准基向量为 <MathBlock raw={"e_1=\begin{pmatrix}1\\0\end{pmatrix},
e_2=\begin{pmatrix}0\\1\end{pmatrix}."} /> 任何向量 xx 都可以写成 x=x1e1+x2e2x = x_1 e_1 + x_2 e_2. 当我们取一个 2×22\times 2 矩阵 AA 作用在 xx 上时,利用线性性,有 <MathBlock raw={"Ax =A(x_1 e_1 + x_2 e_2) =x_1(A e_1)+x_2(A e_2)."} /> 直接计算 AA 对基向量的作用: <MathBlock raw={"A e_1

\begin{pmatrix} a_{11} \\ a_{21} \end{pmatrix},
A e_2

\begin{pmatrix} a_{12} \\ a_{22} \end{pmatrix}."} /> 这揭示了一个极其重要的几何事实:矩阵 AA 的第 jj 列, 正是基向量 eje_j 变换后的像. 换句话说, 矩阵不仅是数字表格, 更是对空间“怎么被拉伸、旋转、剪切”的说明书——列向量 a1,a2a_1, a_2 描述了变换后新坐标轴的位置.

{/* latex-label: fig:matrix-column-geometry */} \begin{figure}[htbp]

TikZ 图 375
TikZ 图 375

{A} 的第 \texorpdfstring{jj}{j} 列 \texorpdfstring{aj=Aej\boldsymbol{a}_j = A\boldsymbol{e}_j}{a_j = A e_j} 是标准基向量 \texorpdfstring{ej\boldsymbol{e}_j}{e_j} 的像,单位正方形变换为平行四边形.}

\end{figure} 图:矩阵的几何意义:\texorpdfstring{AA

既然矩阵代表了线性变换,那么两个矩阵相乘 BABA 又意味着什么呢?

A=(a1...an)A = (a_1 ... a_n), 我们将 AA 看作第一个变换, 它把标准基 eje_j 变成了 aja_j. 随后, BB 作为第二个变换, 继续作用在这些“新轴”上. 于是, 复合变换 BABAeje_j 的作用结果就是 B(Aej)=BajB(A e_j) = B a_j. 这意味着, BABA 的第 jj 列, 等于 BB 作用在 AA 的第 jj 列上: <MathBlock raw={"BA = \begin{pmatrix} | & & |\\ B a_1 & \cdots & B a_n\\ | & & | \end{pmatrix}."} /> 从几何上看,矩阵乘法本质上就是“连续做两次几何变换”:先按照 AA 描述的方式拉伸或旋转, 再按照 BB 描述的方式继续变形.

除了上述的“列视角”,我们还可以从行视角来审视乘法. 把 BB 的第 iirir_i 看作一个线性测量函数(或共变向量), 那么元素 cij=riajc_{ij} = r_i \cdot a_j 就代表着:先用 AA 把基向量 eje_j 送到空间中的某个位置 aja_j, 再用 BB 的第 ii 个测量尺 rir_i 去测量这个位置的投影或数值. 无论是列的“基变换”视角,还是行的“测量”视角,矩阵乘法都是线性变换之间协作的体现.

这种“变换复合”的观点,在二维几何操作中体现得尤为淋漓尽致. 例如,逆时针旋转 9090^\circ 对应的矩阵是 R=(0110)R = \begin{pmatrix} 0 & -1 \\ 1 & 0 \end{pmatrix}, 而放大 22 倍对应的矩阵是 S=(2002)S = \begin{pmatrix} 2 & 0 \\ 0 & 2 \end{pmatrix}. 如果我们想“先放大, 再旋转”, 其整体效果就由乘积 M=RSM=RS 一次性描述. 这种思想也是计算机图形学与神经网络的基础——无论是屏幕上的像素坐标变换,还是深度学习中特征向量在层与层之间的流动,本质上都是一连串矩阵乘法的叠加.

然而,空间的变换顺序往往是不能随意的. 考虑剪切变换: <MathBlock raw={"S_x = \begin{pmatrix} 1 & 1 \\ 0 & 1 \end{pmatrix} (\text{水平剪切}),
S_y = \begin{pmatrix} 1 & 0 \\ 1 & 1 \end{pmatrix} (\text{竖直剪切})."} /> 若是先水平剪切再竖直剪切(SySxS_y S_x), 网格会变成一种形态;若是反过来(SxSyS_x S_y),网格则会变成完全不同的另一种形态. 计算结果也证实了这一点: <MathBlock raw={"S_y S_x = \begin{pmatrix} 1 & 1 \\ 1 & 2 \end{pmatrix} \neq \begin{pmatrix} 2 & 1 \\ 1 & 1 \end{pmatrix} = S_x S_y."} /> 这便解释了矩阵乘法不满足交换律ABBAAB \neq BA)的几何根源:在多维空间中,变换的次序决定了最终的姿态.

既然矩阵乘法对应着线性变换的复合,这自然就对参与运算的矩阵的形状(即维度)提出了严格的匹配要求.我们不能随意地将两个矩阵相乘,除非它们之间存在某种“接口兼容性”.

从几何上讲,如果矩阵 AA 代表从 nn 维空间到 mm 维空间的变换(记作 A:RnRmA: \mathbb{R}^n \to \mathbb{R}^m), 而矩阵 BB 代表从 qq 维空间到 pp 维空间的变换(记作 B:RqRpB: \mathbb{R}^q \to \mathbb{R}^p), 那么要进行复合运算 B(Ax)B(Ax), 必须要求 AA 的输出能够毫无阻碍地成为 BB 的输入.也就是说, AA 的输出空间维度 mm 必须严格等于 BB 的输入空间维度 qq.

这就引出了矩阵乘法何时可行的代数铁律:

只有当左边矩阵的列数等于右边矩阵的行数时,乘法才有定义.

我们可以用一个简单的符号图示来记住这个规则.设 AAm×nm \times n 矩阵, BBn×pn \times p 矩阵, 计算乘积 ABAB: <MathBlock raw={"\underbrace{(m \times \mathbf{n})}{\text{左矩阵 } A} \times \underbrace{(\mathbf{n} \times p)}{\text{右矩阵 } B} = \underbrace{(m \times p)}_{\text{结果矩阵 } C}"} /> 注意中间相邻的两个数字(n\mathbf{n}n\mathbf{n}), 它们不仅必须相等, 而且会在运算过程中“湮灭”, 最终结果矩阵的形状由两端剩下的数字(mmpp)决定.

何时不能相乘? 一旦中间的这两个维度不匹配,乘法就是未定义的.这种“未定义”不仅仅是人为规定的禁止,而是有着深刻的运算障碍:

  • 几何上: 维度错位.就像试图把一个 2 维的平面图像塞进一个只接受 3 维立体输入的机器里,接口对不上.
  • 代数上: 内积无法计算.矩阵乘法的核心是“左行乘右列”.如果左矩阵的一行有 3 个元素(即左矩阵有 3 列),而右矩阵的一列只有 2 个元素(即右矩阵有 2 行),当我们试图将它们对应相乘时,会发现元素个数不正如,无法完成点积运算.

让我们看一个具体的例子来辨析这一点.设 <MathBlock raw={"A = \begin{pmatrix} 1 & 2 & 3 \\ 4 & 5 & 6 \end{pmatrix} \; (2 \times 3),
B = \begin{pmatrix} 1 & 0 \\ 0 & 1 \end{pmatrix} \; (2 \times 2)."} />

  1. 计算 BABA BB2×22 \times \mathbf{2}, AA2×3\mathbf{2} \times 3.中间维度均为 22,匹配成功. 结果将是一个 2×32 \times 3 的矩阵.
  2. 计算 ABAB AA2×32 \times \mathbf{3}, BB2×2\mathbf{2} \times 2.中间维度 323 \neq 2,匹配失败. 因此,ABAB 是不存在的.我们无法用 AA 的一行 (1,2,3)(1, 2, 3) 去和 BB 的一列 (1,0)T(1, 0)^T 做内积,因为前者长度为 3,后者长度为 2.

这个例子再次印证了矩阵乘法的非交换性:很多时候,BABA 有意义, 而 ABAB 甚至连定义都没有.

理解了背后的几何意义,我们再回过头来看具体的计算过程. 实际上,每一个元素的计算 cij=bikakjc_{ij} = \sum b_{ik}a_{kj} 都可以通过下图这种直观的方式进行索引:

{/* latex-label: fig:matrix-multiplication */} \begin{figure}[htbp]

TikZ 图 376
TikZ 图 376

{C} 的第 \texorpdfstring{(i,j)(i,j)}{(i,j)} 元素等于 \texorpdfstring{AA}{A} 的第 \texorpdfstring{ii}{i} 行与 \texorpdfstring{BB}{B} 的第 \texorpdfstring{jj}{j} 列的内积.}

\end{figure} 图:矩阵乘法的计算规则:\texorpdfstring{CC

让我们通过具体的数值计算来巩固这一过程. 设 <MathBlock raw={"A = \begin{pmatrix} 1 & 0 & 2 \\ 3 & 1 & 0 \end{pmatrix},
B = \begin{pmatrix} 4 & 1 \\ 0 & 5 \\ 2 & 3 \end{pmatrix}."} /> 由于 AA2×32\times 3, BB3×23\times 2, 乘积 ABAB 将是一个 2×22\times 2 矩阵. 计算第一行第一列元素:14+00+22=81\cdot 4 + 0\cdot 0 + 2\cdot 2 = 8. 计算第二行第一列元素:34+10+02=123\cdot 4 + 1\cdot 0 + 0\cdot 2 = 12. 依次类推,最终得到 <MathBlock raw={"AB = \begin{pmatrix} 8 & 7 \\ 12 & 8 \end{pmatrix}."} />

最后,值得一提的是,这种看似复杂的乘法规则并非某人拍脑袋的产物,而是 19 世纪数学家们在解决深刻问题时殊途同归的发现. 早在 19 世纪初,高斯在处理线性方程组的变量代换时,就已经在手稿中使用了这种“行乘列”的组合方式,但他当时仅将其视为一种计算技巧.

真正赋予其独立生命的是英国数学家亚瑟·凯莱 (Arthur Cayley). 凯莱在研究不变量理论时,为了描述坐标变换的复合(即我们前文提到的将 xxxx\to x' \to x'' 合并为一步),发现必须定义这样一种乘法规则. 1858 年,凯莱通过引入“矩阵”这一概念,将几何变换的复合与代数上的矩阵乘法完美对应起来. 自此,矩阵不再仅仅是方程组系数的缩写,而成为了现代数学中描述线性结构与空间变换最强有力的语言.

矩阵的基本性质

与我们熟悉的实数运算相似,矩阵的运算也遵循一套明确的代数法则. 掌握这些性质,是进行更复杂的矩阵计算与推导的基础.

\paragraph{矩阵加法与标量乘法的性质} 矩阵的加法与标量乘法性质与向量的性质非常相似,它们共同构成了一个线性空间. 设 A,B,CA, B, C 为同阶矩阵, k,lk, l 为标量.

零矩阵

所有元素均为 0 的矩阵称为零矩阵,记作 OO.

加法与标量乘法运算律
  1. 加法交换律: A+B=B+AA+B=B+A
  2. 加法结合律: (A+B)+C=A+(B+C)(A+B)+C = A+(B+C)
  3. 零元: A+O=AA+O=A
  4. 负元: A+(A)=OA+(-A)=O, 其中 A=(1)A-A = (-1)A
  5. 标量乘法结合律: k(lA)=(kl)Ak(lA)=(kl)A
  6. 标量乘法分配律: k(A+B)=kA+kBk(A+B)=kA+kB 以及 (k+l)A=kA+lA(k+l)A=kA+lA

\paragraph{矩阵乘法的性质} 矩阵乘法的性质更为特殊,特别是它不满足交换律,这一点需要特别注意. 设 A,B,CA,B,C 为阶数适合于下列运算的矩阵, kk 为标量.

单位矩阵

一个 nn 阶方阵, 如果其主对角线上的元素全为 1, 其余元素全为 0, 则称其为 nn 阶单位矩阵, 记作 IIInI_n. <MathBlock raw={"I_2 = \begin{pmatrix} 1 & 0 \\ 0 & 1 \end{pmatrix}, I_3 = \begin{pmatrix} 1 & 0 & 0 \\ 0 & 1 & 0 \\ 0 & 0 & 1 \end{pmatrix}"} />

乘法与混合运算律
  1. 乘法结合律: (AB)C=A(BC)(AB)C = A(BC)
  2. 乘法分配律 (左分配律与右分配律): A(B+C)=AB+ACA(B+C)=AB+AC 以及 (A+B)C=AC+BC(A+B)C=AC+BC
  3. 与标量乘法的结合性: k(AB)=(kA)B=A(kB)k(AB)=(kA)B=A(kB)
  4. 单位元: 若 AAm×nm \times n 矩阵, 则 ImA=AIn=AI_m A = A I_n = A. 特别地, 对于 nn 阶方阵 AA, 有 AI=IA=AAI=IA=A. 单位矩阵在矩阵乘法中的作用,如同数字 1 在普通乘法中的作用.

值得注意的是,矩阵乘法通常不满足交换律. 即便 ABABBABA 都有定义且阶数相同, 也绝不能默认为 AB=BAAB=BA.

\paragraph{矩阵的转置} 转置是一种非常基本且重要的矩阵运算,它将矩阵的行与列进行互换.

转置矩阵

将一个 m×nm \times n 矩阵 A=(aij)A=(a_{ij}) 的所有元素沿主对角线进行翻转, 得到的 n×mn \times m 矩阵称为 AA转置矩阵, 记作 ATA^T. 其元素满足 (AT)ij=aji(A^T)_{ij} = a_{ji}. <MathBlock raw={"\text{例如, } A = \begin{pmatrix} 1 & 2 & 3 \\ 4 & 5 & 6 \end{pmatrix}, \text{则} A^T = \begin{pmatrix} 1 & 4 \\ 2 & 5 \\ 3 & 6 \end{pmatrix}"} />

转置运算律
  1. 两次转置: (AT)T=A(A^T)^T = A
  2. 和的转置: (A+B)T=AT+BT(A+B)^T = A^T+B^T
  3. 标量乘积的转置: (kA)T=kAT(kA)^T = kA^T
  4. 乘积的转置: (AB)T=BTAT(AB)^T = B^T A^T. 这是最重要且不直观的性质,乘积的转置等于转置的反序乘积.

验证性质 (AB)T=BTAT(AB)^T=B^TA^T. 设 A=(1203),B=(4125)A=\begin{pmatrix} 1 & 2 \\ 0 & 3 \end{pmatrix}, B=\begin{pmatrix} 4 & 1 \\ 2 & 5 \end{pmatrix}.

我们分别计算等式的左边和右边.

计算左边 (AB)T(AB)^T: <MathBlock raw={"AB = \begin{pmatrix} 1 & 2 \\ 0 & 3 \end{pmatrix}\begin{pmatrix} 4 & 1 \\ 2 & 5 \end{pmatrix} = \begin{pmatrix} 1\cdot4+2\cdot2 & 1\cdot1+2\cdot5 \\ 0\cdot4+3\cdot2 & 0\cdot1+3\cdot5 \end{pmatrix} = \begin{pmatrix} 8 & 11 \\ 6 & 15 \end{pmatrix}"} /> <MathBlock raw={"(AB)^T = \begin{pmatrix} 8 & 6 \\ 11 & 15 \end{pmatrix}"} />

计算右边 BTATB^TA^T: <MathBlock raw={"A^T = \begin{pmatrix} 1 & 0 \\ 2 & 3 \end{pmatrix}, B^T = \begin{pmatrix} 4 & 2 \\ 1 & 5 \end{pmatrix}"} /> <MathBlock raw={"B^TA^T = \begin{pmatrix} 4 & 2 \\ 1 & 5 \end{pmatrix}\begin{pmatrix} 1 & 0 \\ 2 & 3 \end{pmatrix} = \begin{pmatrix} 4\cdot1+2\cdot2 & 4\cdot0+2\cdot3 \\ 1\cdot1+5\cdot2 & 1\cdot0+5\cdot3 \end{pmatrix} = \begin{pmatrix} 8 & 6 \\ 11 & 15 \end{pmatrix}"} /> 左右两边的计算结果相同,性质得到验证.

矩阵的行列式

对于每一个方阵,我们都可以计算一个与之对应的唯一的标量,这个标量被称为该方阵的行列式. 行列式是一个极其重要的概念,它浓缩了方阵的关键信息,例如与该方阵对应的线性方程组是否有唯一解,以及它所代表的几何变换是放大、缩小还是反转了空间.

我们首先从最简单的二阶方阵出发来定义行列式.

二阶行列式

对于一个二阶方阵 <MathBlock raw={"A = \begin{pmatrix} a & b \\ c & d \end{pmatrix}"} /> 我们定义,从左上角到右下角的元素序列 (a,d)(a, d) 称为主对角线, 从右上角到左下角的元素序列 (b,c)(b, c) 称为副对角线.

该方阵的行列式的值,定义为主对角线元素之积减去副对角线元素之积,记作 det(A)\det(A)A|A|. <MathBlock raw={"\det(A) = \begin{vmatrix} a & b \\ c & d \end{vmatrix} = ad - bc"} />

这个定义并非凭空而来. 它恰好出现在二元一次方程组的通解公式中. 考虑方程组 <MathBlock raw={"\begin{aligned} a_1x + b_1y &= c_1 a_2x + b_2y &= c_2 \end{aligned}"} /> 其解为 x=c1b2c2b1a1b2a2b1,y=a1c2a2c1a1b2a2b1x = \frac{c_1b_2 - c_2b_1}{a_1b_2 - a_2b_1}, y = \frac{a_1c_2 - a_2c_1}{a_1b_2 - a_2b_1}. 分母 a1b2a2b1a_1b_2-a_2b_1 正是系数矩阵 A=(a1b1a2b2)A = \begin{pmatrix} a_1 & b_1 \\ a_2 & b_2 \end{pmatrix} 的行列式.

三阶行列式

对于一个三阶方阵 <MathBlock raw={"A = \begin{pmatrix} a_1 & b_1 & c_1 \\ a_2 & b_2 & c_2 \\ a_3 & b_3 & c_3 \end{pmatrix}"} /> 其行列式的值定义为 <MathBlock raw={"\det(A) = \begin{vmatrix} a_1 & b_1 & c_1 \\ a_2 & b_2 & c_2 \\ a_3 & b_3 & c_3 \end{vmatrix} = a_1b_2c_3 + b_1c_2a_3 + c_1a_2b_3 - a_3b_2c_1 - b_3c_2a_1 - c_3a_2b_1"} />

对于三阶行列式的计算,一种直观的记忆法则是对角线法则 (Sarrus' Rule). 我们将矩阵的前两列复制到右侧,然后将三条主对角线方向的元素之积相加,再减去三条副对角线方向的元素之积. <MathBlock raw={"\begin{array}{ccc|cc} a_1 & b_1 & c_1 & a_1 & b_1 a_2 & b_2 & c_2 & a_2 & b_2 a_3 & b_3 & c_3 & a_3 & b_3 \end{array}"} /> <MathBlock raw={"\det(A) = (a_1b_2c_3 + b_1c_2a_3 + c_1a_2b_3) - (a_3b_2c_1 + b_3c_2a_2 + c_3a_2b_1)"} />

值得注意的是对角线法则仅适用于三阶行列式,不能推广至更高阶的行列式.

计算矩阵 A=(123045106)A = \begin{pmatrix} 1 & 2 & 3 \\ 0 & 4 & 5 \\ -1 & 0 & 6 \end{pmatrix} 的行列式.

根据对角线法则, <MathBlock raw={"\begin{aligned} \det(A) &= (1 \cdot 4 \cdot 6 + 2 \cdot 5 \cdot (-1) + 3 \cdot 0 \cdot 0) - ((-1) \cdot 4 \cdot 3 + 0 \cdot 5 \cdot 1 + 6 \cdot 0 \cdot 2) &= (24 - 10 + 0) - (-12 + 0 + 0) &= 14 - (-12) &= 26 \end{aligned}"} />

更高阶或更本质的计算方法是代数余子式展开. 任意 nn 阶行列式的值,都等于其任意一行(或一列)的各元素与其对应的代数余子式乘积之和. 对于三阶行列式,沿第一行展开的形式为: <MathBlock raw={"\begin{vmatrix} a_1 & b_1 & c_1 \\ a_2 & b_2 & c_2 \\ a_3 & b_3 & c_3 \end{vmatrix} = a_1 \begin{vmatrix} b_2 & c_2 \\ b_3 & c_3 \end{vmatrix} - b_1 \begin{vmatrix} a_2 & c_2 \\ a_3 & c_3 \end{vmatrix} + c_1 \begin{vmatrix} a_2 & b_2 \\ a_3 & b_3 \end{vmatrix}"} /> 展开项的符号遵循 (1)i+j(-1)^{i+j} 的棋盘格规则, 其中 iijj 分别是元素的行号和列号. 第一行的符号即为 +,,++,-,+.

行列式的几何应用

行列式最引人入胜的特性在于其深刻的几何内涵.

\paragraph{三角形面积} 我们首先阐述这个公式的几何原理,然后通过严格的代数推导来证明其正确性.

\subparagraph{几何原理} 该公式的几何核心在于将三角形的面积与向量所张成的平行四边形面积联系起来. 考虑由三个顶点 A(x1,y1)A(x_1, y_1), B(x2,y2)B(x_2, y_2), C(x3,y3)C(x_3, y_3) 构成的三角形. 我们可以从顶点 AA 出发,构造两条边向量: <MathBlock raw={"\vec{AB} = (x_2-x_1, y_2-y_1)"} /> <MathBlock raw={"\vec{AC} = (x_3-x_1, y_3-y_1)"} /> 众所周知,三角形 ABCABC 的面积, 恰好是由向量 AB\vec{AB}AC\vec{AC} 作为邻边所构成的平行四边形面积的一半.

在二维坐标系中,由两个向量 u=(ux,uy)\vec{u}=(u_x, u_y)v=(vx,vy)\vec{v}=(v_x, v_y) 所张成的平行四边形的有向面积,恰好由二阶行列式给出: <MathBlock raw={"\text{平行四边形的面积} = \begin{vmatrix} u_x & u_y \\ v_x & v_y \end{vmatrix} = u_x v_y - u_y v_x"} /> 这个值的正负号取决于从 u\vec{u} 旋转到 v\vec{v} 的方向 (逆时针为正,顺时针为负). 因此,三角形 ABCABC 的面积可以表示为: <MathBlock raw={"{/* label: eq:triangle-area-vector */} S = \frac{1}{2} \left| \begin{vmatrix} x_2-x_1 & y_2-y_1 \\ x_3-x_1 & y_3-y_1 \end{vmatrix} \right|"} /> 我们的任务就是证明,教科书中给出的那个三阶行列式,其值本质上就等于这个二阶行列式.

我们从目标三阶行列式出发,利用行列式的初等变换性质进行化简. 行列式的一个基本性质是:将某一行 (或列) 的倍数加到另一行 (或列),行列式的值不变.

令目标行列式为 DD: <MathBlock raw={"D = \begin{vmatrix} x_1 & y_1 & 1 \\ x_2 & y_2 & 1 \\ x_3 & y_3 & 1 \end{vmatrix}"} /> 为了在行列式中构造出向量 AB\vec{AB}AC\vec{AC} 的分量,我们执行以下行变换: 将第一行乘以 1-1 分别加至第二行和第三行 (R2R2R1R_2 \to R_2 - R_1, R3R3R1R_3 \to R_3 - R_1). <MathBlock raw={"D = \begin{vmatrix} x_1 & y_1 & 1 \\ x_2-x_1 & y_2-y_1 & 1-1 \\ x_3-x_1 & y_3-y_1 & 1-1 \end{vmatrix} = \begin{vmatrix} x_1 & y_1 & 1 \\ x_2-x_1 & y_2-y_1 & 0 \\ x_3-x_1 & y_3-y_1 & 0 \end{vmatrix}"} /> 接着,沿第三列对这个行列式进行代数余子式展开. 由于该列有两个零元素,展开式非常简洁: <MathBlock raw={"\begin{aligned} D &= 1 \cdot \begin{vmatrix} x_2-x_1 & y_2-y_1 \\ x_3-x_1 & y_3-y_1 \end{vmatrix} - 0 + 0 &= \begin{vmatrix} x_2-x_1 & y_2-y_1 \\ x_3-x_1 & y_3-y_1 \end{vmatrix} \end{aligned}"} /> 这个结果表明,三阶行列式 DD 的值与我们基于向量法得到的二阶行列式完全相等. 将此结果代入方程 \eqref{eq:triangle-area-vector},我们便完成了对公式的证明.

<MathBlock raw={"S = \frac{1}{2} |D| = \frac{1}{2} \left| \begin{vmatrix} x_1 & y_1 & 1 \\ x_2 & y_2 & 1 \\ x_3 & y_3 & 1 \end{vmatrix} \right|"} /> 行列式本身计算的是一个有向面积. 其正负取决于顶点 ABCA \to B \to C 的排列顺序 (逆时针为正,顺时针为负). 因此,我们取其绝对值来获得通常意义下的面积. 将此行列式沿第三列展开,我们得到 <MathBlock raw={"\begin{aligned} \text{det} &= 1 \begin{vmatrix} x_2 & y_2 \\ x_3 & y_3 \end{vmatrix} - 1 \begin{vmatrix} x_1 & y_1 \\ x_3 & y_3 \end{vmatrix} + 1 \begin{vmatrix} x_1 & y_1 \\ x_2 & y_2 \end{vmatrix} &= (x_2y_3 - x_3y_2) - (x_1y_3 - x_3y_1) + (x_1y_2 - x_2y_1) &= (x_1y_2 + x_2y_3 + x_3y_1) - (x_2y_1 + x_3y_2 + x_1y_3) \end{aligned}"} /> 这个表达式正是著名的鞋带公式. 它并非一个独立的记忆诀窍,而是该三阶行列式经过代数展开后的自然结果.

\paragraph{三点共线与直线方程} 从面积公式可以立即推导出两个重要的结论. 其一,三点 A(x1,y1)A(x_1, y_1), B(x2,y2)B(x_2, y_2), C(x3,y3)C(x_3, y_3) 共线的充要条件是它们所构成的三角形面积为零. <MathBlock raw={"\begin{vmatrix} x_1 & y_1 & 1 \\ x_2 & y_2 & 1 \\ x_3 & y_3 & 1 \end{vmatrix} = 0"} /> 其二,给定两点 A(x1,y1)A(x_1, y_1)B(x2,y2)B(x_2, y_2), 平面上任意一点 P(x,y)P(x,y) 在直线 ABAB 上的充要条件是 P,A,BP,A,B 三点共线. 因此,经过 A,BA,B 两点的直线方程可以极为优美地表示为: <MathBlock raw={"\begin{vmatrix} x & y & 1 \\ x_1 & y_1 & 1 \\ x_2 & y_2 & 1 \end{vmatrix} = 0"} />

求经过点 A(1,2)A(1,2)B(3,4)B(3,-4) 的直线方程.

根据行列式形式的直线方程,我们有 <MathBlock raw={"\begin{vmatrix} x & y & 1 \\ 1 & 2 & 1 \\ 3 & -4 & 1 \end{vmatrix} = 0"} /> 沿第一行展开此行列式, <MathBlock raw={"x \begin{vmatrix} 2 & 1 \\ -4 & 1 \end{vmatrix} - y \begin{vmatrix} 1 & 1 \\ 3 & 1 \end{vmatrix} + 1 \begin{vmatrix} 1 & 2 \\ 3 & -4 \end{vmatrix} = 0"} /> <MathBlock raw={"x(2 - (-4)) - y(1 - 3) + 1(-4 - 6) = 0"} /> <MathBlock raw={"6x - y(-2) - 10 = 0"} /> <MathBlock raw={"6x + 2y - 10 = 0"} /> 化简得直线方程为 3x+y5=03x+y-5=0.

\paragraph{向量外积与法向量} 在三维空间中,行列式是定义向量外积的标准工具. 对于两个向量 a=(a1,a2,a3)\vec{a} = (a_1, a_2, a_3)b=(b1,b2,b3)\vec{b} = (b_1, b_2, b_3), 它们的外积 a×b\vec{a} \times \vec{b} 是一个同时垂直于 a\vec{a}b\vec{b} 的新向量,其定义为一个形式上的行列式: <MathBlock raw={"\vec{a} \times \vec{b} = \begin{vmatrix} \mathbf{i} & \mathbf{j} & \mathbf{k} \\ a_1 & a_2 & a_3 \\ b_1 & b_2 & b_3 \end{vmatrix} = (a_2b_3 - a_3b_2)\mathbf{i} - (a_1b_3 - a_3b_1)\mathbf{j} + (a_1b_2 - a_2b_1)\mathbf{k}"} /> 其中 i,j,k\mathbf{i}, \mathbf{j}, \mathbf{k} 是沿 x,y,zx,y,z 轴的单位向量. 这个工具在解析几何中至关重要,因为它提供了一种直接计算平面法向量的方法. 一个由三点 A,B,CA,B,C 确定的平面, 其法向量 n\vec{n} 必定垂直于平面内的任意向量, 例如 AB\vec{AB}AC\vec{AC}. 因此,我们可以通过计算这两个向量的外积来求得法向量. <MathBlock raw={"\vec{n} = \vec{AB} \times \vec{AC}"} />

求经过三点 A(1,0,0)A(1,0,0), B(0,1,0)B(0,1,0), C(0,0,1)C(0,0,1) 的平面的一个法向量.

我们首先构造两个在平面内的向量. <MathBlock raw={"\vec{AB} = B - A = (0-1, 1-0, 0-0) = (-1, 1, 0)"} /> <MathBlock raw={"\vec{AC} = C - A = (0-1, 0-0, 1-0) = (-1, 0, 1)"} /> 该平面的法向量 n\vec{n} 可以通过计算 AB\vec{AB}AC\vec{AC} 的外积得到. <MathBlock raw={"\begin{aligned} \vec{n} &= \vec{AB} \times \vec{AC} = \begin{vmatrix} \mathbf{i} & \mathbf{j} & \mathbf{k} \\ -1 & 1 & 0 \\ -1 & 0 & 1 \end{vmatrix} &= \mathbf{i} \begin{vmatrix} 1 & 0 \\ 0 & 1 \end{vmatrix} - \mathbf{j} \begin{vmatrix} -1 & 0 \\ -1 & 1 \end{vmatrix} + \mathbf{k} \begin{vmatrix} -1 & 1 \\ -1 & 0 \end{vmatrix} &= \mathbf{i}(1-0) - \mathbf{j}(-1-0) + \mathbf{k}(0-(-1)) &= 1\mathbf{i} + 1\mathbf{j} + 1\mathbf{k} \end{aligned}"} /> 因此,该平面的一个法向量是 n=(1,1,1)\vec{n}=(1,1,1).

\paragraph{平行六面体的体积} 行列式的几何意义可以自然地推广到三维体积. 其核心思想源于一个基本的几何事实:任何柱体的体积都等于其底面积乘以高. 在这里,我们将使用向量代数的工具来精确地表达底面积和高.

一个平行六面体的体积 VV 可以通过其底面平行四边形的面积 SS_{\text{底}} 与垂直于该底面的高 hh 的乘积来计算. <MathBlock raw={"V = S_{\text{底}} \cdot h"} /> 我们不妨选择由向量 b\vec{b}c\vec{c} 所张成的平行四边形作为底面. 根据向量外积的几何意义,这个底面平行四边形的面积等于外积向量 b×c\vec{b} \times \vec{c} 的模长. <MathBlock raw={"S_{\text{底}} = \| \vec{b} \times \vec{c} \|"} /> 根据外积的定义,向量 n=b×c\vec{n} = \vec{b} \times \vec{c} 的方向是同时垂直于 b\vec{b}c\vec{c} 的,即垂直于底面. 平行六面体的高 hh, 就是第三个向量 a\vec{a} 在底面法向量 n\vec{n} 方向上的投影的长度. 一个向量 a\vec{a} 在另一个向量 n\vec{n} 上的标量投影(用proj表示)由点积给出:projna=ann\text{proj}_{\vec{n}}\vec{a} = \frac{\vec{a} \cdot \vec{n}}{\|\vec{n}\|}. 因此,高 hh 是这个投影值的绝对值 (因为高度必须为非负). <MathBlock raw={"h = \left| \frac{\vec{a} \cdot \vec{n}}{\|\vec{n}\|} \right| = \frac{|\vec{a} \cdot (\vec{b} \times \vec{c})|}{\|\vec{b} \times \vec{c}\|}"} /> 接着,我们将底面积和高的表达式代入体积公式: <MathBlock raw={"V = S_{\text{底}} \cdot h = \|\vec{b} \times \vec{c}\| \cdot \frac{|\vec{a} \cdot (\vec{b} \times \vec{c})|}{\|\vec{b} \times \vec{c}\|}"} /> 分子与分母中的 b×c\|\vec{b} \times \vec{c}\| 项相互抵消,我们得到了一个极为简洁的表达式: <MathBlock raw={"V = |\vec{a} \cdot (\vec{b} \times \vec{c})|"} /> 这个表达式 a(b×c)\vec{a} \cdot (\vec{b} \times \vec{c}) 被称为三个向量的混合积. 它在几何上代表了由这三个向量所张成的平行六面体的有向体积.

最后一步是证明,混合积的代数计算结果与三阶行列式的值完全相同. 设 a=(a1,a2,a3)\vec{a}=(a_1,a_2,a_3), b=(b1,b2,b3)\vec{b}=(b_1,b_2,b_3), c=(c1,c2,c3)\vec{c}=(c_1,c_2,c_3). 我们首先计算外积 b×c\vec{b} \times \vec{c}: <MathBlock raw={"\vec{b} \times \vec{c} = (b_2c_3 - b_3c_2)\mathbf{i} + (b_3c_1 - b_1c_3)\mathbf{j} + (b_1c_2 - b_2c_1)\mathbf{k}"} /> 接着,计算 a\vec{a}与上述结果的点积: <MathBlock raw={"\begin{aligned} \vec{a} \cdot (\vec{b} \times \vec{c}) &= a_1(b_2c_3 - b_3c_2) + a_2(b_3c_1 - b_1c_3) + a_3(b_1c_2 - b_2c_1) &= a_1b_2c_3 - a_1b_3c_2 + a_2b_3c_1 - a_2b_1c_3 + a_3b_1c_2 - a_3b_2c_1 \end{aligned}"} /> 接着,我们计算由这三个向量作为行构成的三阶行列式,并沿第一行展开: <MathBlock raw={"\begin{aligned} \begin{vmatrix} a_1 & a_2 & a_3 \\ b_1 & b_2 & b_3 \\ c_1 & c_2 & c_3 \end{vmatrix} &= a_1 \begin{vmatrix} b_2 & b_3 \\ c_2 & c_3 \end{vmatrix} - a_2 \begin{vmatrix} b_1 & b_3 \\ c_1 & c_3 \end{vmatrix} + a_3 \begin{vmatrix} b_1 & b_2 \\ c_1 & c_2 \end{vmatrix} &= a_1(b_2c_3 - b_3c_2) - a_2(b_1c_3 - b_3c_1) + a_3(b_1c_2 - b_2c_1) &= a_1b_2c_3 - a_1b_3c_2 - a_2b_1c_3 + a_2b_3c_1 + a_3b_1c_2 - a_3b_2c_1 \end{aligned}"} /> 通过重新排列各项的顺序,我们发现这两个展开式是完全相同的. 这就证明了混合积与行列式在数值上是等价的. 因此,平行六面体的体积可以表示为: <MathBlock raw={"V = \left| \begin{vmatrix} a_1 & a_2 & a_3 \\ b_1 & b_2 & b_3 \\ c_1 & c_2 & c_3 \end{vmatrix} \right|"} /> 由此可知,三个向量共面的充要条件是它们无法张成一个具有体积的实体,即它们所张成的平行六面体体积为零. 这等价于它们的混合积为零,即上述行列式的值为零.

平面截距式方程

设平面 π\pix,y,zx,y,z 坐标轴分别交于三点 A(a,0,0)A(a,0,0), B(0,b,0)B(0,b,0), C(0,0,c)C(0,0,c), 其中 a,b,ca,b,c 均为非零实数. 求该平面的方程.

平面的方程可以通过共面条件来确定. 设 P(x,y,z)P(x,y,z) 是该平面上的任意一点. 那么向量 AP\vec{AP}, AB\vec{AB}, AC\vec{AC} 必定共面. 三个向量共面的充要条件是,由它们所张成的平行六面体体积为零. 我们首先计算这三个向量: <MathBlock raw={"\vec{AP} = (x-a, y-0, z-0) = (x-a, y, z)"} /> <MathBlock raw={"\vec{AB} = (0-a, b-0, 0-0) = (-a, b, 0)"} /> <MathBlock raw={"\vec{AC} = (0-a, 0-0, c-0) = (-a, 0, c)"} /> 令这三个向量构成的行列式等于零: <MathBlock raw={"\begin{vmatrix} x-a & y & z \\ -a & b & 0 \\ -a & 0 & c \end{vmatrix} = 0"} /> 我们沿第一行展开此行列式. <MathBlock raw={"(x-a)\begin{vmatrix} b & 0 \\ 0 & c \end{vmatrix} - y\begin{vmatrix} -a & 0 \\ -a & c \end{vmatrix} + z\begin{vmatrix} -a & b \\ -a & 0 \end{vmatrix} = 0"} /> <MathBlock raw={"(x-a)(bc) - y(-ac) + z(0 - (-ab)) = 0"} /> <MathBlock raw={"bcx - abc + acy + abz = 0"} /> 将常数项移到等式右边. <MathBlock raw={"bcx + acy + abz = abc"} /> 由于 a,b,ca,b,c 均非零, 我们可以用 abcabc 同除等式两边. <MathBlock raw={"\frac{bcx}{abc} + \frac{acy}{abc} + \frac{abz}{abc} = \frac{abc}{abc}"} /> 化简后,我们得到了平面方程的著名形式——截距式方程. <MathBlock raw={"\frac{x}{a} + \frac{y}{b} + \frac{z}{c} = 1"} />

行列式与多项式因式分解

行列式本身是元素的多线性组合,因此一旦元素中含有未知量,行列式自然就是关于这些未知量的一个多项式. 这一点使得行列式成为因式分解(尤其是高次、多元、具有对称性或轮换对称性的多项式)的一把利器.

总体思路可以概括为两种互补的方向:

  • 从行列式出发做因式分解:把行列式看成多项式,利用“代入使行列式为零”来找因式;
  • 从多项式出发构造行列式:先把一个给定多项式巧妙地改写成一个行列式的值,再利用行列式的初等变换和公因式提取来实现因式分解.

这两种方法的理论基础都来自下面两条简单却非常有力的原理.

\paragraph{原理一:根与因式的关系(因式定理)}

对于一个关于变量 xx 的一元多项式 P(x)P(x),因式定理指出: <MathBlock raw={"\text{如果 } P(a)=0,\ \text{那么 } (x-a)\ \text{是 } P(x) \text{ 的一个因式.}"} />

多元情形下,若把某个变量看作未知,其余变量看作参数,这一原理同样成立. 例如,设 P(a,b,c)P(a,b,c) 是关于 aa 的多项式(b,cb,c 只是系数所在的参数). 若 <MathBlock raw={"P(b,b,c)=0,"} /> 则在多项式环 R[a,b,c]\mathbb{R}[a,b,c] 中, (ab)(a-b) 就是 P(a,b,c)P(a,b,c) 的一个因式. 换言之, “把 aa 换成 bb 会使多项式变成 0”, 就意味着 (ab)(a-b) 整除这个多项式.

\paragraph{原理二:行列式的零值条件}

行列式有一条极其关键的性质: <MathBlock raw={"\text{若行列式的任意两行或两列成比例(特别是完全相同),则该行列式的值为零.}"} />

这源于行列式对每一行(或列)的线性性和交错性:当两行(列)相同或成比例时,行列式中相应项彼此抵消,结果必为 00.

把这两个原理结合,就得到利用行列式寻找多项式因式的基本逻辑链条:

  1. 把一个含有变量的行列式 D(x,y,z,...)D(x,y,z,...) 视作关于这些变量的多项式;
  2. 通过对变量赋特定值(如令 x=yx=y 或令某变量为 0,1 等),观察此时行列式的两行或两列是否会变得相同或成比例;
  3. 一旦在这种代入下出现两行(或两列)相同(或成比例),就知道此时行列式的值必为 00
  4. 因此,按因式定理,对应的表达式(如 xyx-ya+b+ca+b+c 等)就是该行列式所代表多项式的一个因式.

对于范德蒙行列式、轮换对称行列式等高度对称的结构,这一逻辑链条往往能系统地“逼出”所有本应出现的线性因式(如 (xy)(x-y)(ab)(a-b)(a+b+c)(a+b+c) 等),再配合次数比较和系数比较,就可以完成因式分解.

\paragraph{典型用途概览}

行列式方法在因式分解中的常见用途包括:

  • 处理范德蒙类行列式,得到优美的积形式,如 i\<j(xixj)\displaystyle \prod_{i\<j}(x_i-x_j)
  • 对轮换(循环)对称多项式/行列式自动“检出”因式 (a+b+c)(a+b+c)(ab)(bc)(ca)(a-b)(b-c)(c-a) 等;
  • 在题目给出的是“普通多项式”时,逆向构造行列式,通过初等变换和公因式提取完成分解;
  • 证明某些多项式恒等式(例如 a3+b3+c33abc=(a+b+c)(a2+b2+c2abbcca)a^3+b^3+c^3-3abc=(a+b+c)(a^2+b^2+c^2-ab-bc-ca))时,行列式方法往往给出结构清晰的证明.

下面分别从“两种方向”来整理具体的操作步骤.

一、从行列式出发做因式分解

D(a,b,c,...)D(a,b,c,...) 是由若干多项式元素构成的行列式.

  1. 寻找线性因式(通过“造零”)

仔细观察行列式的结构,尝试通过代入 <MathBlock raw={"a=b, b=c, a=-b, a+b+c=0, x=0,1,..."} /> 等特殊关系,使得两行或两列变得相同/成比例,从而保证 D=0D=0. 每得到一次这样的“必为 0”的代入关系,就对应找到了一个因式.

例如:

  • 若令 a=ba=bD=0D=0, 则 (ab)(a-b)DD 的一个因式;
  • 对于轮换对称行列式,如果 (ab)(a-b) 是因式, 那么通常 (bc)(b-c)(ca)(c-a) 也是因式;
  • 若总能在 a+b+c=0a+b+c=0 时得到 D=0D=0, 往往 (a+b+c)(a+b+c) 就是一个因式.
  1. 比较次数

DD 展开成多项式后,可以讨论它的总次数(多元情形可以看作齐次多项式的次数,或专门看作关于某一指定变量的次数).

对大多数有规律的行列式,只需观察“每行中次数最高的项”,从每行各取一次就能得到最高次项. 例如,对 <MathBlock raw={"\begin{vmatrix} 1 & 1 & 1 x & y & z x^2 & y^2 & z^2 \end{vmatrix}"} /> 每一行的最高次数分别为 0,1,20,1,2,故整个行列式是一个三次齐次多项式.

同时,计算前一步已找到的所有因式之积的总次数. 若两者次数相同,则行列式与这些因式之积至多只差一个常数因子. 3. 确定常数因子

若已知 <MathBlock raw={"D = k \cdot (\text{因子}_1)\cdot(\text{因子}_2)\cdots,"} /> 且左右两边次数相同,则只需要比较某个具体单项式的系数即可确定 kk.

常用做法是选取行列式展开中较容易定位的某一单项式(例如主对角线上元素乘积产生的那一项),在因式乘积一侧也找到同一单项式,比较系数即可. 若 k=1k=1,则说明因式分解已经完备.

二、从多项式出发构造行列式

当题目一开始给出的是普通多项式 P(x)P(x)P(a,b,c,...)P(a,b,c,...) 时,也可以主动把它写成行列式的形式,然后用上面的行列式技巧来揭示因式结构.

  1. 构造行列式

这是最具创造性的一步. 目标是把 PP 通过分组、配凑等方式写成 <MathBlock raw={"P = A(x)D(x) - B(x)C(x)"} /> 这样的“ADBCAD-BC 结构”,从而可以写成一个二阶行列式: <MathBlock raw={"P(x) = \begin{vmatrix} A(x) & B(x) C(x) & D(x) \end{vmatrix}."} /> 有时也可以构造成更高阶行列式,但能够用 2×22\times2 解决时往往最简洁. 2. 初等变换制造公因式

利用行列式的初等变换性质:

  • 某一行(列)乘以一个数加到另一行(列)上,行列式的值不变;

  • 调换两行(列)只会改变符号;

  • 某一行(列)乘以常数 kk, 行列式整体乘以 kk.

    通过这些变换,力图使某一行或某一列的每一项都含有同一个因式(例如 (x+3)(x+3)(x1)(x-1)(a+b+c)(a+b+c) 等).

  1. 提取公因式

一旦某行或某列出现了公因式,就可根据行列式的多线性性质把它提出行列式之外: <MathBlock raw={"\begin{vmatrix} f(x)\,g(x) & f(x)\,h(x) ... & ... \end{vmatrix} = f(x)\begin{vmatrix} g(x) & h(x) ... & ... \end{vmatrix}."} /> 4. 化简并重复

对提取了公因式后剩下的、更简单的行列式,继续做初等变换与公因式提取,直至可以直接计算其值. 最终就得到 <MathBlock raw={"P = (\text{若干因式}) \times (\text{一个较简单的多项式}),"} /> 这样 PP 的因式结构就显现出来了.

下面通过几个例题,展示这两种思路在具体问题中的运用:既包括标准范德蒙行列式及其变体,也包括轮换对称行列式以及通过巧妙代数构造得到的 2×22\times2 行列式.

因式分解多项式 P(x)=x3+4x2+x6P(x) = x^3 + 4x^2 + x - 6.

尝试把 P(x)P(x) 写成一个 2×22\times2 行列式. 先对多项式分组: <MathBlock raw={"P(x) = (x^3+4x^2) + (x-6) = x^2(x+4) - (-1)(x-6)."} /> 于是 <MathBlock raw={"P(x) = \begin{vmatrix} x^2 & x-6 -1 & x+4 \end{vmatrix},"} /> 因为 <MathBlock raw={"\begin{vmatrix} x^2 & x-6 -1 & x+4 \end{vmatrix} = x^2(x+4) - (x-6)(-1) = x^3 + 4x^2 + x - 6."} />

下面对行列式做初等变换以制造公因式. 先做列变换 C2C2+C1C_2\to C_2+C_1: <MathBlock raw={"P(x) = \begin{vmatrix} x^2 & x^2 + x - 6 -1 & x+3 \end{vmatrix}."} /> 将二次三项式因式分解: <MathBlock raw={"x^2+x-6 = (x+3)(x-2),"} /> 得到 <MathBlock raw={"P(x) = \begin{vmatrix} x^2 & (x+3)(x-2) -1 & x+3 \end{vmatrix}."} /> 此时第二列有公因式 (x+3)(x+3),提出: <MathBlock raw={"P(x) = (x+3)\begin{vmatrix} x^2 & x-2 -1 & 1 \end{vmatrix}."} />

为了进一步化简,做行变换 R1R1+R2R_1 \to R_1 + R_2: <MathBlock raw={"P(x) = (x+3)\begin{vmatrix} x^2-1 & x-1 -1 & 1 \end{vmatrix}."} /> 注意到 x21=(x1)(x+1)x^2-1=(x-1)(x+1), 故第一行有公因式 (x1)(x-1),提出: <MathBlock raw={"P(x) = (x+3)(x-1)\begin{vmatrix} x+1 & 1 -1 & 1 \end{vmatrix}."} /> 最后计算这个最简单的 2×22\times2 行列式: <MathBlock raw={"\begin{vmatrix} x+1 & 1 -1 & 1 \end{vmatrix} = (x+1)\cdot1 - 1\cdot(-1) = x+2."} /> 因此 <MathBlock raw={"P(x) = (x-1)(x+2)(x+3)."} />

本例属于“从多项式出发构造行列式”的思路:先凑出 ADBCAD-BC,再用行列式变换与公因式提取完成因式分解.

范德蒙行列式

因式分解三阶行列式 <MathBlock raw={"D = \begin{vmatrix} 1 & 1 & 1 x & y & z x^2 & y^2 & z^2 \end{vmatrix}."} />

DD 视为关于 x,y,zx,y,z 的一个多项式.

第一步:通过“造零”寻找因式.

若令 x=yx=y,则第一列与第二列完全相同: <MathBlock raw={"\begin{vmatrix} 1 & 1 & 1 y & y & z y^2 & y^2 & z^2 \end{vmatrix}=0."} /> 因此,当 x=yx=yD=0D=0, 由因式定理知 (xy)(x-y)DD 的一个因式.

同理,由于 x,y,zx,y,z 的地位完全对称:

  • y=zy=z, 得到 (yz)(y-z) 是一个因式;

  • z=xz=x, 得到 (zx)(z-x) 是一个因式.

    于是 DD 至少含有因式 <MathBlock raw={"(x-y)(y-z)(z-x)."} />

    第二步:比较次数.

    注意第 kk 行的元素是 xk1,yk1,zk1x^{k-1},y^{k-1},z^{k-1}, 其次数分别为 0,1,20,1,2, 所以整个行列式是关于 x,y,zx,y,z 的三次齐次多项式. 而因式乘积 (xy)(yz)(zx)(x-y)(y-z)(z-x) 的总次数也是 33. 因此存在常数 kk 使得 <MathBlock raw={"D = k(x-y)(y-z)(z-x)."} />

    第三步:比较系数确定 kk.

    在左边的展开式中,yz2yz^2 项只可能来自主对角线 1yz21\cdot y\cdot z^2, 故其系数为 +1+1.

    右边展开 (xy)(yz)(zx)(x-y)(y-z)(z-x),可得 <MathBlock raw={"(x-y)(y-z)(z-x) = -xz^2 - y^2z + yz^2 - x^2y + x^2z + xy^2,"} /> 其中 yz2yz^2 的系数也是 +1+1.

    故 <MathBlock raw={"1 = k\cdot 1 \Rightarrow k=1."} />

    综上, <MathBlock raw={"\begin{vmatrix} 1 & 1 & 1 x & y & z x^2 & y^2 & z^2 \end{vmatrix} = (x-y)(y-z)(z-x)."} />

    本例是“从行列式出发”的标准范例:用行列式的零值条件找线性因式,用次数与系数比较确定常数因子.

因式分解行列式 <MathBlock raw={"D = \begin{vmatrix} x & y & z x^2 & y^2 & z^2 x^3 & y^3 & z^3 \end{vmatrix}."} />

观察到每一列都具有公因式: <MathBlock raw={"\text{第 1 列有因式 }x, \text{第 2 列有因式 }y, \text{第 3 列有因式 }z."} /> 利用行列式列的多线性,可将这三个因式提出: <MathBlock raw={"D = xyz \begin{vmatrix} 1 & 1 & 1 x & y & z x^2 & y^2 & z^2 \end{vmatrix}."} /> 括号内正是三阶范德蒙行列式,其因式分解刚刚已求得为 (xy)(yz)(zx)(x-y)(y-z)(z-x). 故 <MathBlock raw={"D = xyz(x-y)(y-z)(z-x)."} />

本例体现了“先利用公因式把行列式简化,再套用已知模型”的思路.

因式分解轮换对称行列式 <MathBlock raw={"D = \begin{vmatrix} a & b & c b & c & a c & a & b \end{vmatrix}."} />

该行列式具有明显的轮换对称性:将 ab, bc, caa\to b,\ b\to c,\ c\to a 作循环置换, 行列式的形式保持不变. 这种对称性提示我们, 它的因式中很可能包含“对称”的表达式, 例如 (a+b+c)(a+b+c).

第一步:用列变换造出 (a+b+c)(a+b+c).

将第二列与第三列同时加到第一列上: <MathBlock raw={"C_1\to C_1+C_2+C_3."} /> 得到 <MathBlock raw={"D = \begin{vmatrix} a+b+c & b & c b+c+a & c & a c+a+b & a & b \end{vmatrix}."} /> 此时,第一列每个元素都是 (a+b+c)(a+b+c),可以提出: <MathBlock raw={"D = (a+b+c)\begin{vmatrix} 1 & b & c 1 & c & a 1 & a & b \end{vmatrix}."} />

第二步:用行变换制造零,降阶.

对后一个行列式,做行变换 R2R2R1, R3R3R1R_2\to R_2-R_1,\ R_3\to R_3-R_1: <MathBlock raw={"D = (a+b+c)\begin{vmatrix} 1 & b & c 0 & c-b & a-c 0 & a-b & b-c \end{vmatrix}."} /> 沿第一列展开: <MathBlock raw={"D = (a+b+c)\cdot 1\cdot \begin{vmatrix} c-b & a-c a-b & b-c \end{vmatrix}."} />

第三步:计算 2×22\times2 行列式并整理.

<MathBlock raw={"\begin{aligned} \begin{vmatrix} c-b & a-c a-b & b-c \end{vmatrix} &= (c-b)(b-c) - (a-c)(a-b) &= -(b-c)^2 - (a^2-ab-ac+bc) &= -\bigl(a^2+b^2+c^2-ab-bc-ca\bigr). \end{aligned}"} /> 于是 <MathBlock raw={"D = -(a+b+c)\bigl(a^2+b^2+c^2-ab-bc-ca\bigr)."} />

另一方面,利用恒等式 <MathBlock raw={"a^3+b^3+c^3-3abc = (a+b+c)\bigl(a^2+b^2+c^2-ab-bc-ca\bigr),"} /> 可知 <MathBlock raw={"D = -(a^3+b^3+c^3-3abc) = 3abc-a^3-b^3-c^3."} />

本例体现了:通过恰当的列(行)变换,主动造出 (a+b+c)(a+b+c) 这样的“对称因式”,再使用降阶与整理,就能清晰地看出轮换对称行列式的因式结构.

线性变换与几何应用

在前文中,矩阵被引入作为线性方程组系数的容器,或是代数运算的某种对象. 然而,矩阵最直观的生命力在于几何:在解析几何中,矩阵不仅是静态的坐标记录者,更是动态的空间变换算子.

本节将在原有内容的基础上,进一步探讨:

  • 如何用矩阵统一描述旋转、镜像、切变、缩放等几何变换;
  • 行列式如何度量“面积变化”和“翻转”;
  • 如何用矩阵语言一眼看出一条二次曲线是圆、椭圆、双曲线还是抛物线;
  • 中学解析几何里熟悉的“配方”“旋转坐标系”,在高观点下其实都是线性代换(矩阵变换).

线性变换的矩阵表示

当我们说一个映射 T:R2R2T: \mathbb{R}^2 \to \mathbb{R}^2线性变换时,意味着它保持了向量加法和标量乘法的结构:原点保持不动,直线变换后仍为直线(或退化为点),且平行的刻度保持均匀.

任何平面上的线性变换都可以由一个二阶方阵 AA 唯一确定. 如前所述,寻找这个矩阵的关键在于追踪基向量的去向. 设标准基向量 <MathBlock raw={"e_1 = \begin{pmatrix} 1 \\ 0 \end{pmatrix},
e_2 = \begin{pmatrix} 0 \\ 1 \end{pmatrix},"} /> 若它们在变换 TT 下的像分别为 <MathBlock raw={"T(e_1) = v_1, T(e_2) = v_2,"} /> 则该变换对应的矩阵为: <MathBlock raw={"A = \begin{pmatrix} v_1 & v_2 \end{pmatrix},
T(x) = Ax."} />

这意味着:知道基向量往哪儿去,就等于知道了整个线性变换.

\paragraph{典型变换一览}

在解析几何中,几种最常用的线性变换可以统一写成矩阵:

  • 各向同性缩放(等比放缩): <MathBlock raw={"S_\lambda = \begin{pmatrix} \lambda & 0 \\ 0 & \lambda \end{pmatrix},
    (x,y)^T \mapsto (\lambda x,\lambda y)^T."} />
  • 各向异性缩放(在不同方向上拉伸不同倍数): <MathBlock raw={"D_{a,b} = \begin{pmatrix} a & 0 \\ 0 & b \end{pmatrix},
    (x,y)^T \mapsto (ax,by)^T."} />
  • 关于坐标轴的镜像: <MathBlock raw={"x\text{-轴对称}:\ \begin{pmatrix} 1 & 0 \\ 0 & -1 \end{pmatrix},
    y\text{-轴对称}:\ \begin{pmatrix} -1 & 0 \\ 0 & 1 \end{pmatrix}."} />
  • 关于原点的旋转(逆时针角 θ\theta): <MathBlock raw={"R_\theta = \begin{pmatrix} \cos\theta & -\sin\theta \sin\theta & \cos\theta \end{pmatrix}."} />
  • 切变(Shear): <MathBlock raw={"\text{水平切变}:\ S_k = \begin{pmatrix} 1 & k \\ 0 & 1 \end{pmatrix},
    (x,y)^T \mapsto (x+ky,y)^T."} />

下面通过几个例子体会矩阵与几何的对应.

镜像变换

求平面上关于直线 y=xy=x 对称的变换矩阵.

只需追踪基向量的像.

对于 xx 轴上的单位向量 e1=(1,0)Te_1 = (1,0)^T, 关于直线 y=xy=x 对称后, 它落在 yy 轴上, 变为 v1=(0,1)Tv_1 = (0,1)^T. 对于 yy 轴上的单位向量 e2=(0,1)Te_2 = (0,1)^T, 对称后落在 xx 轴上, 变为 v2=(1,0)Tv_2 = (1,0)^T.

于是变换矩阵为 <MathBlock raw={"P = \begin{pmatrix} v_1 & v_2 \end{pmatrix} = \begin{pmatrix} 0 & 1 \\ 1 & 0 \end{pmatrix}."} /> 验证:对任意点 (a,a)T(a,a)^T, <MathBlock raw={"P\begin{pmatrix} a \\ a \end{pmatrix} = \begin{pmatrix} a \\ a \end{pmatrix},"} /> 保持不动;点 (1,0)T(1,0)^T 变成 (0,1)T(0,1)^T,与几何直观一致.

旋转变换

{/* label: ex:rotation */} 求绕原点逆时针旋转角 θ\theta 的线性变换矩阵.

同样考察基向量的像.

(1,0)(1,0) 绕原点逆时针旋转 θ\theta 后落在单位圆上的点 (cosθ,sinθ)(\cos\theta,\sin\theta),故 <MathBlock raw={"T(e_1) = \begin{pmatrix} \cos\theta \\ \sin\theta \end{pmatrix}."} /> 点 (0,1)(0,1) 绕原点逆时针旋转 θ\theta 后, 其极角从 π2\frac{\pi}{2} 变为 π2+θ\frac{\pi}{2}+\theta,坐标为 <MathBlock raw={"(\cos(\tfrac{\pi}{2}+\theta),\ \sin(\tfrac{\pi}{2}+\theta)) = (-\sin\theta,\ \cos\theta),"} /> 故 <MathBlock raw={"T(e_2) = \begin{pmatrix} -\sin\theta \\ \cos\theta \end{pmatrix}."} /> 于是旋转矩阵为 <MathBlock raw={"R_\theta = \begin{pmatrix} \cos\theta & -\sin\theta \\[2pt] \sin\theta & \cos\theta \end{pmatrix}."} />

这个矩阵在高中解析几何中非常重要,它不仅描述坐标系的旋转,还暗含了三角恒等式,例如 <MathBlock raw={"R_\alpha R_\beta = R_{\alpha+\beta}"} /> 从矩阵乘法写开,就得到熟悉的 <MathBlock raw={"\cos(\alpha+\beta)=\cos\alpha\cos\beta-\sin\alpha\sin\beta,
\sin(\alpha+\beta)=\sin\alpha\cos\beta+\cos\alpha\sin\beta."} />

切变与面积不变性

考察水平切变矩阵 Sk=(1k01)S_k = \begin{pmatrix} 1 & k \\ 0 & 1 \end{pmatrix} 对单位正方形的作用,验证它保持面积不变.

单位正方形的顶点为 (0,0),(1,0),(1,1),(0,1)(0,0),(1,0),(1,1),(0,1). 变换后四点分别为 <MathBlock raw={"(0,0),\ (1,0),\ (1+k,1),\ (k,1),"} /> 它们构成一个平行四边形,其两条邻边向量为 <MathBlock raw={"\vec{u} = (1,0)^T, \vec{v} = (k,1)^T."} /> 平行四边形面积等于 <MathBlock raw={"|\det(\vec{u},\vec{v})| = \left| \begin{vmatrix} 1 & k 0 & 1 \end{vmatrix} \right| = 1,"} /> 与原单位正方形面积相同. 这与 det(Sk)=1|\det(S_k)|=1 完全一致(见下一小节).

行列式的几何意义

在前文中,我们将二阶行列式定义为两个向量围成的平行四边形的面积(带符号): <MathBlock raw={"\det\begin{pmatrix} a & c \\ b & d \end{pmatrix} = ad-bc."} /> 如果将这两列看作两个向量 u=(a,b)T, v=(c,d)T\vec{u}=(a,b)^T,\ \vec{v}=(c,d)^T,则 <MathBlock raw={"|\det(\vec{u},\vec{v})|"} /> 就是它们围成平行四边形的面积.

更一般地,对于线性变换 y=Axy = Ax, 如果输入空间中的一个图形具有面积 SS, 那么变换后的图形面积 SS' 与原面积之间存在确定的倍率关系.

面积变换定理

AA 为二阶方阵, Ω\Omega 是平面上的一个可测图形, 其面积为 SΩS_\Omega. 经矩阵 AA 变换后, 图形 Ω={AxxΩ}\Omega' = \{ Ax \mid x \in \Omega \} 的面积为: <MathBlock raw={"S_{\Omega'} = |\det(A)| \cdot S_\Omega."} />

因此,行列式绝对值的几何本质是:它是线性变换改变面积的比例系数.

  • det(A)1|\det(A)| \> 1: 变换起到了放大的作用.
  • 0\<det(A)\<10 \< |\det(A)| \< 1: 变换起到了缩小的作用.
  • det(A)=0\det(A) = 0: 图形被压扁,面积变为 0(退化为直线或点).
  • det(A)\<0\det(A) \< 0: 变换包含了一个镜像翻转操作,改变了图形的手性(定向).
三角形面积的行列式公式

已知三角形三个顶点 P1(x1,y1),P2(x2,y2),P3(x3,y3)P_1(x_1,y_1),P_2(x_2,y_2),P_3(x_3,y_3),证明其面积为 <MathBlock raw={"S = \frac12 \left| \begin{vmatrix} x_2-x_1 & x_3-x_1 y_2-y_1 & y_3-y_1 \end{vmatrix} \right|."} />

P1P_1 为原点,向量 <MathBlock raw={"\vec{u} = P_2-P_1 = (x_2-x_1,\ y_2-y_1)^T,
\vec{v} = P_3-P_1 = (x_3-x_1,\ y_3-y_1)^T"} /> 构成三角形的两条邻边. 它们围成的平行四边形面积为 <MathBlock raw={"|\det(\vec{u},\vec{v})|

\left| \begin{vmatrix} x_2-x_1 & x_3-x_1 y_2-y_1 & y_3-y_1 \end{vmatrix} \right|."} /> 三角形面积是该平行四边形的一半,故结论成立.

椭圆面积公式

{/* label: ex:ellipse-area */} 利用单位圆的变换推导长半轴为 aa、短半轴为 bb 的椭圆面积.

单位圆 x2+y21x^2+y^2 \leq 1 的面积已知为 π\pi. 标准椭圆方程为 x2a2+y2b21\dfrac{x^2}{a^2} + \dfrac{y^2}{b^2} \leq 1. 我们可以构造一个对角矩阵 AA 将单位圆拉伸为该椭圆: <MathBlock raw={"A = \begin{pmatrix} a & 0 \\ 0 & b \end{pmatrix}."} /> 对于单位圆上的任意向量 u=(u1,u2)T\mathbf{u}=(u_1, u_2)^T,变换后的向量 <MathBlock raw={"\mathbf{x} = A\mathbf{u} = (au_1, bu_2)^T"} /> 满足 <MathBlock raw={"\left(\frac{x}{a}\right)^2 + \left(\frac{y}{b}\right)^2 = u_1^2+u_2^2 \leq 1."} /> 因此,该变换确实将单位圆双射到了椭圆区域.

计算变换矩阵的行列式: <MathBlock raw={"\det(A) = ab."} /> 根据面积变换定理: <MathBlock raw={"S_{\text{椭圆}} = |\det(A)| \cdot S_{\text{单位圆}} = ab \cdot \pi = \pi ab."} />

这个推导揭示了一个思想:通过线性变换把复杂图形“拉回”到熟悉的标准图形,再用行列式把面积缩放回来. 这是许多高等积分技巧的雏形.

齐次坐标与平移

线性变换有一个固有的局限:它必须固定原点 (A0=0A\mathbf{0} = \mathbf{0}). 这意味着单纯的 2×22\times 2 矩阵乘法无法表示平移 (Translation).

为了统一处理平移与旋转,解析几何中引入了齐次坐标.

齐次坐标

平面点 (x,y)(x,y) 的齐次坐标表示为三维列向量 <MathBlock raw={"\tilde{x}= \begin{pmatrix} x \\ y \\ 1 \end{pmatrix}."} />

通过增加一个维度,我们可以用 3×33 \times 3 的矩阵来描述二维平面上的仿射变换 (Affine Transformation). 例如:

  • 平移向量 (h,k)(h, k): <MathBlock raw={"T_{h,k}= \begin{pmatrix} 1 & 0 & h 0 & 1 & k 0 & 0 & 1 \end{pmatrix},

    T_{h,k}\begin{pmatrix} x \\ y \\ 1 \end{pmatrix}

    \begin{pmatrix} x+h \\ y+k \\ 1 \end{pmatrix}."} />

  • 先旋转再平移: <MathBlock raw={"\tilde{A}= \begin{pmatrix} \cos\theta & -\sin\theta & h \sin\theta & \cos\theta & k 0 & 0 & 1 \end{pmatrix},"} /> 则 <MathBlock raw={"\tilde{A} \begin{pmatrix} x \\ y \\ 1 \end{pmatrix}

    \begin{pmatrix} x\cos\theta - y\sin\theta + h x\sin\theta + y\cos\theta + k 1 \end{pmatrix}."} />

这样,所有“旋转+缩放+切变+平移”的组合都可以表示为一个 3×33\times 3 矩阵的一次相乘. 计算机图形学中, 三维空间里的物体变换同理使用 4×44\times 4 齐次坐标矩阵.

组合变换一次完成

已知点 P(1,0)P(1,0), 先绕原点逆时针旋转 π2\frac{\pi}{2}, 再向右平移 22 个单位,求变换后的坐标,并给出相应的齐次矩阵.

绕原点旋转 π2\frac{\pi}{2} 的矩阵为 <MathBlock raw={"R_{\frac{\pi}{2}}= \begin{pmatrix} 0 & -1 1 & 0 \end{pmatrix}."} /> 向右平移 22 的矩阵为 <MathBlock raw={"T_{2,0}= \begin{pmatrix} 1 & 0 & 2 0 & 1 & 0 0 & 0 & 1 \end{pmatrix}."} /> 对应的齐次形式(先旋转后平移)是 <MathBlock raw={"\tilde{A}= \begin{pmatrix} 0 & -1 & 2 1 & 0 & 0 0 & 0 & 1 \end{pmatrix}."} /> 代入 PP 的齐次坐标 (1,0,1)T(1,0,1)^T: <MathBlock raw={"\tilde{A} \begin{pmatrix} 1 \\ 0 \\ 1 \end{pmatrix}

\begin{pmatrix} 2 \\ 1 \\ 1 \end{pmatrix},"} /> 因此变换后点为 (2,1)(2,1).

二次曲线的矩阵分类

中学解析几何中的圆锥曲线,一般从如下二元二次方程出发: <MathBlock raw={"Ax^2 + 2Bxy + Cy^2 + Dx + Ey + F = 0,"} /> 其中 A,B,CA,B,C 不全为零. 交叉项 xyxy 的存在使得曲线发生旋转,难以直接辨识其类型(椭圆、双曲线或抛物线).

矩阵为我们提供了一种“更高视角”:先只看最高次项,忽略线性项和常数项,聚焦在方程的二次部分(即二次型).

\paragraph{二次型与系数矩阵}

方程的二次部分可以写成矩阵形式: <MathBlock raw={"q(x,y) = \begin{pmatrix} x & y \end{pmatrix} \underbrace{\begin{pmatrix} A & B \\ B & C \end{pmatrix}}_{M} \begin{pmatrix} x \\ y \end{pmatrix},"} /> 其中 MM 是一个实对称矩阵, 称为系数矩阵, qq 称为二次型.

几何上,MM 决定了曲线的开闭形态(椭圆型 / 双曲线型 / 抛物线型), 而线性项 Dx+EyDx+Ey 与常数项 FF 只会把曲线平移、旋转、缩放,不改变“本性”.

\paragraph{线性代换下的不变量}

x=Ayx = A y, 其中 AA 是任意可逆的 2×22\times 2 矩阵,这相当于做了一个线性坐标变换(旋转、缩放、切变等的组合). 则 <MathBlock raw={"q(x) = x^T M x = y^T (A^T M A) y."} /> 这说明:

  • 在新坐标中,二次项的系数矩阵变成 M=ATMAM' = A^T M A
  • det(M)=det(AT)det(M)det(A)=det(A)2det(M)\det(M') = \det(A^T)\det(M)\det(A) = \det(A)^2\det(M),因而符号不变.

所以,det(M)\det(M) 的符号是一个几何不变量:不管你怎么选择坐标系(即怎么做线性代换),它都不会变号.

\paragraph{椭圆/双曲线/抛物线判别}

记 <MathBlock raw={"M = \begin{pmatrix} A & B \\ B & C \end{pmatrix},
\delta = \det(M) = AC - B^2."} />

二次曲线分类准则

{/* label: thm:conic-class */} 对于二次曲线 <MathBlock raw={"Ax^2 + 2Bxy + Cy^2 + Dx + Ey + F = 0,"} /> 令 δ=ACB2\delta = AC - B^2.

  1. δ0\delta \> 0: 曲线为椭圆型(包括圆、点或虚椭圆);
  2. δ\<0\delta \< 0: 曲线为双曲线型(包括相交双直线);
  3. δ=0\delta = 0: 曲线为抛物线型(包括平行双直线或重合直线).

这是高中常见判别式 B2ACB^2-AC 的矩阵版:因为 <MathBlock raw={"\delta = AC-B^2 = - (B^2-AC),"} /> 于是 <MathBlock raw={"\delta\>0 \Longleftrightarrow B^2-AC\<0,
\delta\<0 \Longleftrightarrow B^2-AC\>0,
\delta=0 \Longleftrightarrow B^2-AC=0,"} /> 与熟悉的“B2AC\<0B^2-AC\<0 椭圆, =0=0 抛物线, 0\>0 双曲线”完全一致,只是写法不同而已.

为什么只看 det(M)\det(M) 的符号就够了? 如果用一点特征值(本书别处会系统讲),实对称矩阵 MM 可以正交对角化: <MathBlock raw={"P^T M P = \begin{pmatrix} \lambda_1 & 0 \\ 0 & \lambda_2 \end{pmatrix},"} /> 其中 PP 是正交矩阵(一个旋转或旋转+镜像), λ1,λ2\lambda_1,\lambda_2 是实特征值. 换变量 <MathBlock raw={"\begin{pmatrix} x \\ y \end{pmatrix} = P \begin{pmatrix} u \\ v \end{pmatrix},"} /> 二次项就变成 <MathBlock raw={"q(x,y) = \lambda_1 u^2 + \lambda_2 v^2."} /> 此时 <MathBlock raw={"\delta = \det(M) = \lambda_1\lambda_2."} /> 于是:

  • δ0λ1,λ2\delta\>0 \Rightarrow \lambda_1,\lambda_2 同号:u2u^2v2v^2 同号, 形如 αu2+βv2+=0\alpha u^2+\beta v^2 + \cdots = 0,为椭圆型;
  • δ\<0λ1,λ2\delta\<0 \Rightarrow \lambda_1,\lambda_2 异号:形如 u2v2+=0u^2-v^2+\cdots = 0,为双曲线型;
  • δ=0\delta=0 \Rightarrow 有一个特征值为 0:形如 u2+=0u^2+\cdots=0v2+=0v^2+\cdots=0,缺少一个二次方向,得到抛物线型.

这就是定理 [ref:thm:conic-class] 背后的“高观点”.

用行列式快速判别类型

判断曲线 <MathBlock raw={"x^2 + 4xy + y^2 = 1"} /> 的类型.

对应的系数矩阵为 <MathBlock raw={"M = \begin{pmatrix} 1 & 2 \\ 2 & 1 \end{pmatrix},"} /> 注意是 2B=42B=4, 所以 B=2B=2. 计算行列式: <MathBlock raw={"\delta = \det(M) = 1\cdot 1 - 2\cdot 2 = -3 \< 0."} /> 所以该曲线为双曲线型.

如要验证,可配方: <MathBlock raw={"x^2+4xy+y^2 = (x+2y)^2 - 3y^2 = 1,"} /> 令 u=x+2y, v=3yu=x+2y,\ v=\sqrt{3}\,y, 方程变为 u2v2=1u^2-v^2=1,是标准双曲线.

椭圆型:消去 $xy$ 项

{/* label: ex:ellipse-rotate */} 判断并化简曲线 <MathBlock raw={"3x^2 - 4xy + 3y^2 = 12."} />

先判别类型. 二次项矩阵为 <MathBlock raw={"M = \begin{pmatrix} 3 & -2 \\ -2 & 3 \end{pmatrix},

\delta = 3\cdot 3 - (-2)^2 = 9 - 4 = 5 \> 0,"} /> 故为椭圆型.

接下来用“旋转坐标系”消去 xyxy 项. 线性代数语言就是:找一个正交矩阵 RR,使得 <MathBlock raw={"M' = R^T M R"} /> 为对角矩阵. 一个自然的选择是 4545^\circ 旋转: <MathBlock raw={"R = R_{\frac{\pi}{4}} = \frac{1}{\sqrt{2}} \begin{pmatrix} 1 & -1 1 & 1 \end{pmatrix}."} /> 直接计算(可略去中间过程)得到 <MathBlock raw={"M' = R^T M R = \begin{pmatrix} 1 & 0 0 & 5 \end{pmatrix}."} /> 令 <MathBlock raw={"\begin{pmatrix} x \\ y \end{pmatrix} = R \begin{pmatrix} u \\ v \end{pmatrix}, \text{即}
\begin{cases} x = \dfrac{u-v}{\sqrt{2}},\\[4pt] y = \dfrac{u+v}{\sqrt{2}}. \end{cases}"} /> 代入原方程,二次部分变成 <MathBlock raw={"\begin{pmatrix} u & v \end{pmatrix} M' \begin{pmatrix} u \\ v \end{pmatrix} = u^2 + 5v^2,"} /> 故方程化为 <MathBlock raw={"u^2 + 5v^2 = 12."} /> 这是一个以原点为中心、长短轴分别沿 uuvv 轴的椭圆: <MathBlock raw={"\frac{u^2}{12} + \frac{v^2}{12/5} = 1."} /> 与传统“先求旋转角 θ\theta 再代入”的做法本质相同, 只是用矩阵 RR 更为简洁统一.

抛物线型:$\delta=0$

{/* label: ex:parabola */} 判断并化简曲线 <MathBlock raw={"x^2 + 2xy + y^2 + 2x + 2y = 0."} />

二次项矩阵为 <MathBlock raw={"M = \begin{pmatrix} 1 & 1 \\ 1 & 1 \end{pmatrix},

\delta = 1\cdot 1 - 1\cdot 1 = 0,"} /> 故为抛物线型(或其退化形式).

观察 x2+2xy+y2=(x+y)2x^2+2xy+y^2=(x+y)^2,方程化为 <MathBlock raw={"(x+y)^2 + 2(x+y) = 0."} /> 令 u=x+yu=x+y,则 <MathBlock raw={"u^2 + 2u = 0 \iff u(u+2)=0."} /> 也就是说,原方程实际上是两条直线 <MathBlock raw={"x+y=0, x+y=-2"} /> 的并集,是抛物线型的一个退化情形(平行双直线).

这里“x+yx+y”作为新变量 uu,本质上是做了一个线性代换 <MathBlock raw={"\begin{pmatrix} u \\ v \end{pmatrix} = P \begin{pmatrix} x \\ y \end{pmatrix}"} /> 的第一行,其中 PP 的第一行是 (1,1)(1,1).

\paragraph{从“配方法”到“矩阵语言”}

中学里处理圆锥曲线,常用两大套路:

  1. 配方消去一次项,找到中心或顶点,如 <MathBlock raw={"x^2+4x+y^2-2y+1=0\ \Rightarrow\ (x+2)^2+(y-1)^2=4."} />
  2. 旋转坐标系消去 xyxy 项, 用公式 tan2θ=2BAC\tan2\theta=\dfrac{2B}{A-C}.

在矩阵视角下:

  • 配方对应平移:对方程 <MathBlock raw={"x^T M x + b^T x + F = 0,"} /> 令 x=z+x0x = z + x_0, 选取 x0x_0 使得线性项消失(即 2Mx0+b=02Mx_0 + b = 0),就完成了“把中心移到原点”的操作;
  • 旋转对应正交变换:选正交矩阵 PP, 令 x=Pyx = P y, 则二次项矩阵变为 PTMPP^T M P, 可选 PP 使其对角化, 从而消去 xyxy 项.

二者组合(先平移再旋转)就把任意圆锥曲线化成最熟悉的标准方程. 整个过程只是在对向量做线性代换,这就是“圆锥曲线的线性代数高观点”.

综合:用矩阵思路整理一条椭圆

设曲线 <MathBlock raw={"4x^2 + y^2 - 4x - 2y - 2 = 0."} /> 用“矩阵+线性代换”的语言,把它化成标准椭圆方程,并求椭圆中心与半轴长.

先看二次项矩阵 <MathBlock raw={"M = \begin{pmatrix} 4 & 0 \\ 0 & 1 \end{pmatrix},

\delta = 4\cdot 1 - 0 = 4\>0,"} /> 没有 xyxy 项,且为椭圆型;因此无需旋转,只需平移(配方)即可.

原方程写成 <MathBlock raw={"\begin{pmatrix} x & y \end{pmatrix} \begin{pmatrix} 4 & 0 \\ 0 & 1 \end{pmatrix} \begin{pmatrix} x \\ y \end{pmatrix}

  • \begin{pmatrix} -4 & -2 \end{pmatrix} \begin{pmatrix} x \\ y \end{pmatrix} -2 = 0,"} /> 即 <MathBlock raw={"4x^2 + y^2 -4x -2y -2 = 0."} /> 对 xxyy 各自配方: <MathBlock raw={"4x^2 -4x = 4\Bigl(x^2 - x\Bigr) =4\Bigl[(x-\tfrac12)^2-\tfrac14\Bigr],"} /> <MathBlock raw={"y^2 -2y = (y-1)^2 -1."} /> 代回原式: <MathBlock raw={"4\Bigl[(x-\tfrac12)^2-\tfrac14\Bigr]
  • (y-1)^2 -1 -2 = 0,"} /> 整理常数项: <MathBlock raw={"4(x-\tfrac12)^2 + (y-1)^2 -1 -1 -2 = 0 \iff 4(x-\tfrac12)^2 + (y-1)^2 = 4."} /> 两边同除以 4: <MathBlock raw={"\frac{(x-\tfrac12)^2}{1} + \frac{(y-1)^2}{4} = 1."} /> 这就是以 C(12,1)C(\tfrac12,1) 为中心、横轴长 22、纵轴长 44 的椭圆.

在线性代数语言里,平移 <MathBlock raw={"\begin{pmatrix} x \\ y \end{pmatrix}

\begin{pmatrix} \tfrac12 \\ 1 \end{pmatrix} + \begin{pmatrix} u \\ v \end{pmatrix}"} /> 就是把新坐标 (u,v)(u,v) 的原点移到椭圆中心, 然后方程在 (u,v)(u,v) 坐标下变为 <MathBlock raw={"4u^2 + v^2 = 4."} />

逆矩阵

在前几节中,我们将矩阵定义为线性变换的代数表达,将矩阵乘法定义为这些变换的复合. 一个自然的追问随之产生:如果矩阵 AA 将空间进行了某种变换, 是否存在另一个矩阵 BB,能够将变换后的空间还原为初始状态?

这就引出了逆矩阵的概念. 在实数算术中,非零数 aa 存在倒数 a1a^{-1}, 使得 aa1=1a \cdot a^{-1} = 1. 对于矩阵,我们寻求类似的结构,但必须时刻警惕零元素(零矩阵或零行列式)带来的奇异性.

变换的可逆性

考虑线性方程组 Ax=bAx = b. 这里的 AA 是一个算子, 将输入向量 xx 映射为输出向量 bb. 如果我们要从 bb 反推 xx, 本质上是在寻找一个逆算子 A1A^{-1}, 使得 x=A1bx = A^{-1}b.

AA 代表“逆时针旋转 9090^\circ”, 那么 A1A^{-1} 显然应当是“顺时针旋转 9090^\circ”. 若 AA 代表“放大 2 倍”, A1A^{-1} 则是“缩小 2 倍”. 然而, 如果 AA 是一个投影变换,例如将三维空间压扁到一个平面上,或者将所有点都映射到原点(零矩阵),这种变换显然丢失了信息,无法被完美复原.

逆矩阵

对于 nn 阶方阵 AA, 如果存在 nn 阶方阵 BB,使得 <MathBlock raw={"AB = BA = I_n"} /> 其中 InI_n 是单位矩阵, 则称 AA可逆的 (Invertible) 或非奇异的 (Non-singular). 矩阵 BB 称为 AA逆矩阵, 记作 A1A^{-1}.

定义中要求 AB=BAAB=BA 看似多余, 因为对于有限维方阵, 仅需 AB=IAB=I 即可推出 BA=IBA=I. 但这一性质并不平凡,它依赖于线性空间的维数理论. 在几何上,这意味着左逆(能够撤销变换的算子)必定也是右逆.

伴随矩阵与逆的构造

如何具体计算一个矩阵的逆?这需要建立矩阵元素与其行列式之间的联系. 回忆代数余子式的展开定理: <MathBlock raw={"\sum_{k=1}^n a_{ik} A_{ik} = \det(A)"} /> 其中 AikA_{ik} 是元素 aika_{ik} 对应的代数余子式. 如果我们将某以行的元素与另一行的代数余子式相乘,结果会如何? 考虑 <MathBlock raw={"\sum_{k=1}^n a_{ik} A_{jk} (i \neq j)"} /> 这等价于计算一个新矩阵的行列式,该矩阵的第 jj 行被替换成了第 ii 行的复制品. 根据行列式性质,含有两行相同的行列式值为零. 总结上述两条规律,引入 Kronecker 记号 δij\delta_{ij}: <MathBlock raw={"\sum_{k=1}^n a_{ik} A_{jk} = \delta_{ij} \det(A)"} /> 这提示我们,如果构造一个由代数余子式组成的矩阵,并将其转置,使得“行元素”与“行余子式”在乘法中能够对应相碰,便能构造出单位矩阵的倍数.

伴随矩阵

A=(aij)A=(a_{ij})nn 阶方阵, 行列式 A|A| 的各个元素的代数余子式 AijA_{ij} 所构成的矩阵的转置矩阵: <MathBlock raw={"\text{adj}(A) = \begin{pmatrix} A_{11} & A_{12} & \cdots & A_{1n} A_{21} & A_{22} & \cdots & A_{2n} \vdots & \vdots & \ddots & \vdots A_{n1} & A_{n2} & \cdots & A_{nn} \end{pmatrix}^T

\begin{pmatrix} A_{11} & A_{21} & \cdots & A_{n1} A_{12} & A_{22} & \cdots & A_{n2} \vdots & \vdots & \ddots & \vdots A_{1n} & A_{2n} & \cdots & A_{nn} \end{pmatrix}"} /> 称为矩阵 AA伴随矩阵.

利用上述的正交性关系,我们可以直接验证: <MathBlock raw={"A \cdot \text{adj}(A) = \begin{pmatrix} \det(A) & 0 & \cdots & 0 \\ 0 & \det(A) & \cdots & 0 \\ \vdots & \vdots & \ddots & \vdots \\ 0 & 0 & \cdots & \det(A) \end{pmatrix} = \det(A) I"} /> 由此导出了逆矩阵存在的充要条件及显式公式.

逆矩阵公式

方阵 AA 可逆的充要条件是 det(A)0\det(A) \neq 0. 当此条件满足时, <MathBlock raw={"A^{-1} = \frac{1}{\det(A)} \text{adj}(A)"} />

这个定理深刻地连接了代数与几何:

  • 几何上det(A)=0\det(A)=0 意味着变换将空间“压扁”了(例如体积变为 0). 被压扁的维度丢失了信息,自然无法通过逆变换复原.
  • 代数上det(A)\det(A) 出现在分母位置. 除数不能为零.

求二阶矩阵 A=(abcd)A = \begin{pmatrix} a & b \\ c & d \end{pmatrix} 的逆矩阵.

首先计算行列式 det(A)=adbc\det(A) = ad-bc. 计算代数余子式: A11=d,A12=c,A21=b,A22=aA_{11} = d, A_{12} = -c, A_{21} = -b, A_{22} = a. 构造伴随矩阵(注意位置的转置): <MathBlock raw={"\text{adj}(A) = \begin{pmatrix} d & -b \\ -c & a \end{pmatrix}"} /> 因此,若 adbc0ad-bc \neq 0, <MathBlock raw={"A^{-1} = \frac{1}{ad-bc} \begin{pmatrix} d & -b \\ -c & a \end{pmatrix}"} /> 这是二阶矩阵求逆的口诀:“主对调,副变号,除以行列式”.

克拉默法则

对于 nn 个未知数 nn 个方程的线性方程组 Ax=bAx=b, 如果系数矩阵 AA 可逆, 我们可以直接写出解的代数形式 x=A1bx = A^{-1}b. 将上一节的逆矩阵公式代入,可以得到一个仅仅依赖于行列式的显式解法.

法则陈述

克拉默法则

设线性方程组 Ax=bAx=b 的系数行列式 D=det(A)0D = \det(A) \neq 0. 则方程组有唯一解, 且第 jj 个分量 xjx_j 为: <MathBlock raw={"x_j = \frac{D_j}{D} = \frac{\det(A_j)}{\det(A)}"} /> 其中 DjD_j 是将矩阵 AA 的第 jj 列替换为常数项向量 bb 后得到的矩阵的行列式.

几何证明与直观

通常的教科书倾向于使用代数推导(利用伴随矩阵展开)来证明该法则. 这种方法虽然严谨,却掩盖了克拉默法则优美的几何本质. 在这里,我们提供一个基于“体积变换”的几何证明.

考察方程 Ax=bAx = b. 设 AA 的列向量为 α1,α2,...,αn\alpha_1, \alpha_2, ..., \alpha_n. 方程实际上是说向量 bb 是列向量的线性组合: <MathBlock raw={"x_1 \alpha_1 + x_2 \alpha_2 + \cdots + x_n \alpha_n = b"} />

我们以二维情况为例. 系数行列式 D=det(α1,α2)D = \det(\alpha_1, \alpha_2) 代表由 α1,α2\alpha_1, \alpha_2 构成的平行四边形的有向面积. 现在考虑 D1D_1, 即把第一列 α1\alpha_1 换成 bb: <MathBlock raw={"D_1 = \det(b, \alpha_2)"} /> 将 b=x1α1+x2α2b = x_1 \alpha_1 + x_2 \alpha_2 代入行列式中. 利用行列式的线性性质: <MathBlock raw={"\begin{aligned} D_1 &= \det(x_1 \alpha_1 + x_2 \alpha_2, \; \alpha_2) &= x_1 \det(\alpha_1, \alpha_2) + x_2 \det(\alpha_2, \alpha_2) \end{aligned}"} /> 根据行列式性质,含有两列相同的行列式 det(α2,α2)=0\det(\alpha_2, \alpha_2) = 0. 于是只剩下第一项: <MathBlock raw={"D_1 = x_1 \det(\alpha_1, \alpha_2) = x_1 D"} /> 由此立即得到 x1=D1Dx_1 = \frac{D_1}{D}.

这个几何推导可以推广到 nn 维. DjD_j 实际上是将 nn 维平行六面体在第 jj 个方向上的边长拉伸了 xjx_j 倍, 同时引入了其他方向的剪切(Shear). 由于行列式对剪切变换是不变的(即 det(αi,αi)=0\det(\alpha_i, \alpha_i)=0), 唯一改变体积的因素就是第 jj 个方向的伸缩系数 xjx_j.

这就是克拉默法则的本质:分量 xjx_j 是两个体积的比率.

矩阵的秩与线性相关性

在前文中,我们讨论了方阵的行列式. 当 det(A)0\det(A) \neq 0 时, 矩阵被称为非奇异的, 对应着“满秩”的情形;当 det(A)=0\det(A) = 0 时,矩阵被称为奇异的. 然而,“奇异”二字掩盖了太多的细节. 一个 3×33 \times 3 的矩阵,如果是奇异的,它究竟是将三维空间压缩成了一个二维平面,还是一条一维直线,亦或是塌缩成了一个零维的点? 仅凭行列式为零这一信息,我们无法区分这些情形. 为了精确描述矩阵所携带信息的维度,我们需要引入 (Rank) 的概念.

线性相关性

矩阵的列向量本质上是一组“生成元”,它们通过线性组合生成了像空间. 如果某些列向量可以由其他列向量线性表示,说明它们提供了冗余的信息.

线性相关与线性无关

v1,v2,...,vkv_1, v_2, ..., v_k 为一组向量. 如果存在一组不全为零的标量 c1,c2,...,ckc_1, c_2, ..., c_k,使得 <MathBlock raw={"c_1 v_1 + c_2 v_2 + \cdots + c_k v_k = \mathbf{0}"} /> 则称这组向量是线性相关的. 反之,如果上述等式仅在 c1=c2==ck=0c_1 = c_2 = \cdots = c_k = 0 时成立,则称这组向量是线性无关的.

线性相关的几何意义是“扁平化”. 两个线性相关的向量共线;三个线性相关的向量共面. 从数据的角度看,线性相关意味着“冗余”. 例如,在统计表中,如果“总分”列等于“语文”列加“数学”列,那么“总分”这一列就是线性相关的,它没有提供任何新的独立维度.

秩的定义与几何意义

对于一个 m×nm \times n 的矩阵 AA, 我们可以将其看作由 nn 个列向量组成, 也可以看作由 mm 个行向量组成.

矩阵 AA列秩定义为其线性无关的列向量的极大数量. 矩阵 AA行秩定义为其线性无关的行向量的极大数量.

这里存在一个线性代数中令人惊叹的定理——秩定理. 尽管行向量属于 Rn\mathbb{R}^n, 列向量属于 Rm\mathbb{R}^m,它们处于完全不同的空间,但它们的“有效维度”却是严格相等的.

秩定理

对于任意矩阵 AA,其行秩等于列秩. 我们将其统称为矩阵 AA, 记作 rank(A)\text{rank}(A)r(A)r(A).

秩最直观的解释是图像的维度. 若 AA 是一个 3×33 \times 3 矩阵, 它代表一个线性变换 T:R3R3T: \mathbb{R}^3 \to \mathbb{R}^3.

  • rank(A)=3\text{rank}(A) = 3: 图像充满了整个三维空间. 变换是可逆的,体积变换率(行列式)非零.
  • rank(A)=2\text{rank}(A) = 2: 整个三维空间被压缩到了一个二维平面上.
  • rank(A)=1\text{rank}(A) = 1: 整个三维空间被压缩到了一条直线上.
  • rank(A)=0\text{rank}(A) = 0: 整个空间被压缩到了原点(仅当 AA 为零矩阵).

{/* latex-label: fig:rank-geometry */} \begin{figure}[htbp]

TikZ 图 377
TikZ 图 377

_1 \mid \mathbf{a}_2 \mid \mathbf{a}_3]}{A=[a_1 | a_2 | a_3]}, 则 \texorpdfstring{\operatorname{rank}(A) = \dim\bigl(\operatorname{span}{\mathbf{a}_1, \mathbf{a}_2, \mathbf{a}_3}\bigr)$}{rank(A) = dim(span{a_1, a_2, a_3})}. 虚线向量可由其他向量线性表出.}

\end{figure} 图:矩阵秩的几何意义:设 \texorpdfstring{$A=[\mathbf{a

秩与行列式的关系可以概括为: 对于 nn 阶方阵 AA, rank(A)=n    det(A)0\text{rank}(A) = n \iff \det(A) \neq 0. 更一般地,矩阵的秩等于其最高阶非零子式(即非零子行列式)的阶数.

初等变换与高斯消元

定义了秩之后,我们面临的实际问题是:给定一个 10×1010 \times 10 的矩阵,如何计算它的秩?直接寻找“最大线性无关组”或计算所有子行列式显然是不切实际的. 我们需要一种手段,在简化矩阵形式的同时,严格保持矩阵的秩(以及对应方程组的解集)不变. 这就是初等变换.

三种基本操作

考虑求解方程组时的操作:交换两个方程的位置、将一个方程乘以非零常数、将一个方程的倍数加到另一个方程上. 这些操作不会改变方程组的解. 对应到矩阵上,就是初等行变换.

初等行变换

矩阵 AA 的三种初等行变换为:

  1. 交换: 交换第 ii 行和第 jj 行的位置. 记作 RiRjR_i \leftrightarrow R_j.
  2. 倍乘: 将第 ii 行乘以非零常数 kk. 记作 RikRiR_i \leftarrow k R_i.
  3. 倍加: 将第 jj 行的 kk 倍加到第 ii 行上. 记作 RiRi+kRjR_i \leftarrow R_i + k R_j.

同理可定义初等列变换.

\begin{proposition}[秩的不变性] 初等变换不改变矩阵的秩. 若矩阵 AA 经过初等变换得到 BB, 则称 AABB 等价, 记作 ABA \sim B. \end{proposition}

这一命题之所以成立,是因为初等变换本质上只是对原来的行向量组做了一个可逆的线性组合. 向量组张成的空间(Row Space)没有变,空间的维度自然也不会变.

矩阵乘法视角的初等变换

初等变换不仅仅是操作规则,它们本身就是矩阵. 这是一个至关重要的代数视角:对矩阵 AA 做初等行变换, 等价于在 AA 的左侧乘以一个特定的“初等矩阵”.

初等矩阵

对单位矩阵 II 施行一次初等变换所得到的矩阵,称为初等矩阵.

  • 交换矩阵 EijE_{ij}: 由 II 交换第 i,ji, j 行得到. <MathBlock raw={"I = \begin{pmatrix} 1 & 0 \\ 0 & 1 \end{pmatrix} \xrightarrow{R_1 \leftrightarrow R_2} E_{12} = \begin{pmatrix} 0 & 1 \\ 1 & 0 \end{pmatrix}"} />
  • 倍乘矩阵 Ei(k)E_{i}(k): 由 II 的第 ii 行乘 kk 得到. <MathBlock raw={"I = \begin{pmatrix} 1 & 0 \\ 0 & 1 \end{pmatrix} \xrightarrow{R_2 \times 3} E_{2}(3) = \begin{pmatrix} 1 & 0 \\ 0 & 3 \end{pmatrix}"} />
  • 倍加矩阵 Eij(k)E_{ij}(k): 由 II 的第 jj 行的 kk 倍加到第 ii 行得到. <MathBlock raw={"I = \begin{pmatrix} 1 & 0 \\ 0 & 1 \end{pmatrix} \xrightarrow{R_2 + 2R_1} E_{21}(2) = \begin{pmatrix} 1 & 0 \\ 2 & 1 \end{pmatrix}"} />

让我们验证一下倍加操作. 计算 E21(2)AE_{21}(2) \cdot A: <MathBlock raw={"\begin{pmatrix} 1 & 0 \\ 2 & 1 \end{pmatrix} \begin{pmatrix} a & b \\ c & d \end{pmatrix} = \begin{pmatrix} 1\cdot a + 0\cdot c & 1\cdot b + 0\cdot d \\ 2\cdot a + 1\cdot c & 2\cdot b + 1\cdot d \end{pmatrix} = \begin{pmatrix} a & b \\ c+2a & d+2b \end{pmatrix}"} /> 结果恰好是将 AA 的第 1 行的 2 倍加到了第 2 行.

这是一个普遍规律:

  • 行变换     \iff 左乘 初等矩阵.

  • 列变换     \iff 右乘 初等矩阵.

    这个性质将算法操作(消元)与代数结构(矩阵乘法)完美统一了起来.

阶梯形矩阵与秩的计算

通过反复使用初等行变换,我们可以将任何矩阵化简为一种标准形态,从而一眼看出其秩的大小. 这种形态称为行阶梯形 (Row Echelon Form, REF).

行阶梯形

一个矩阵处于行阶梯形,如果:

  1. 所有的零行(元素全为 0 的行)都位于矩阵的底部.
  2. 每一非零行的第一个非零元素(称为主元, Pivot)位于上一行主元的右侧.

例如: <MathBlock raw={"\begin{pmatrix} \mathbf{2} & 3 & 1 & 5 0 & \mathbf{1} & 4 & -2 0 & 0 & 0 & \mathbf{3} 0 & 0 & 0 & 0 \end{pmatrix}"} /> 是一个行阶梯形矩阵. 其中加粗的元素 2,1,3\mathbf{2}, \mathbf{1}, \mathbf{3} 为主元.

定理

行阶梯形矩阵的秩,等于其非零行的行数(也就是主元的个数).

在上例中,非零行有 3 行,因此该矩阵的秩为 3.

求秩与化简

求矩阵 A=(121240361)A = \begin{pmatrix} 1 & 2 & 1 \\ 2 & 4 & 0 \\ 3 & 6 & 1 \end{pmatrix} 的秩.

我们的目标是利用初等行变换“消去”下方的元素.

  1. 消除第一列 R1R_1 下方的元素: <MathBlock raw={"R_2 \leftarrow R_2 - 2R_1, R_3 \leftarrow R_3 - 3R_1"} /> <MathBlock raw={"\begin{pmatrix} 1 & 2 & 1 \\ 2 & 4 & 0 \\ 3 & 6 & 1 \end{pmatrix} \sim \begin{pmatrix} 1 & 2 & 1 \\ 0 & 0 & -2 \\ 0 & 0 & -2 \end{pmatrix}"} />

  2. 消除 R2R_2 下方的元素: <MathBlock raw={"R_3 \leftarrow R_3 - R_2"} /> <MathBlock raw={"\sim \begin{pmatrix} 1 & 2 & 1 \\ 0 & 0 & -2 \\ 0 & 0 & 0 \end{pmatrix}"} /> 此时矩阵已达到阶梯形. 非零行有 2 行(第一行和第二行). 因此,rank(A)=2\text{rank}(A) = 2.

这也意味着,原矩阵的第 3 行可以由前两行线性表示(实际上 R3=R1+R2R_3 = R_1 + R_2),它没有提供新的信息.

解线性方程组的理论结构

利用秩的概念,我们终于可以完整地回答本章开头提出的关于线性方程组 Ax=bAx=b 的所有疑问. 我们不再仅仅是“算”出一个解,而是能够洞察解的存在性结构.

考虑方程组 Ax=bAx=b, 其中 AAm×nm \times n 矩阵. 构造增广矩阵 (Augmented Matrix) Aˉ=(Ab)\bar{A} = (A | b).

线性方程组解的判定定理
  1. 无解     r(A)\<r(Aˉ)\iff r(A) \< r(\bar{A}). \ (意味着向量 bb 不在列向量张成的空间内, 引入 bb 增加了维度.)
  2. 有唯一解     r(A)=r(Aˉ)=n\iff r(A) = r(\bar{A}) = nnn 为未知数个数). \ (意味着列向量线性无关,且 bb 在张成空间内,坐标唯一.)
  3. 有无穷多解     r(A)=r(Aˉ)\<n\iff r(A) = r(\bar{A}) \< n. \ (意味着解存在,但列向量之间存在冗余,导致坐标表示不唯一. 自由度为 nr(A)n - r(A).)

这个定理是线性代数的核心基石. 它告诉我们:求解方程组的本质,就是在比较“系数矩阵携带的信息量”与“包含常数项后所需的总信息量”. 当秩小于未知数个数时,多出的维度转化为了解空间的自由度,解集构成了一个仿射子空间.

尽管克拉默法则在理论上极其优美,揭示了解的解析结构,但在数值计算中,对于高阶方程组(例如 n3n \> 3), 计算 n+1n+1 个行列式的计算量远大于高斯消元法. 因此,它主要用于理论推导及低阶矩阵的手算,而非大规模工程计算.