跳转至

# 矩阵类型

特殊的矩阵结构能够解锁计算捷径和数学保证。本文涵盖单位矩阵、对角矩阵、对称矩阵、三角矩阵、正交矩阵、正定矩阵、稀疏矩阵和随机矩阵，这些类型出现在协方差估计、图算法、正则化和马尔可夫链中。

- 并非所有矩阵都一样。不同的结构赋予矩阵特殊的性质，使它们计算更快、更易于推理，或两者兼得。以下是你最常遇到的类型。

- 方阵的行数和列数相同（\(n \times n\)）。大多数有趣的性质（行列式、特征值、逆）只适用于方阵。

- 单位矩阵 \(I\) 是一个对角线为 1、其余为 0 的方阵。它是"什么都不做"的变换：\(AI = IA = A\) 对任何兼容的矩阵 \(A\)。

\[ I = \begin{bmatrix} 1 & 0 & 0 \\ 0 & 1 & 0 \\ 0 & 0 & 1 \end{bmatrix} \]

- 零矩阵 \(O\) 的所有元素都为零。它将每个向量映射到零向量，破坏所有信息。

- 对角矩阵除主对角线外全为零。将向量乘以对角矩阵只是独立地缩放每个分量，非常高效。

\[ D = \begin{bmatrix} 3 & 0 \\ 0 & 7 \end{bmatrix} \]

- 对称矩阵等于其转置：\(A = A^T\)，意味着 \(A_{ij} = A_{ji}\)。对称矩阵有一个特殊性质：它们的特征向量总是相互垂直。协方差矩阵总是对称的。

\[ S = \begin{bmatrix} 3 & -1 \\ -1 & 6 \end{bmatrix} \]

- 三角矩阵在对角线的一侧全为零。下三角在上方全为零，上三角在下方全为零。它们对于通过前向或回代高效求解方程组至关重要。

\[ L = \begin{bmatrix} 2 & 0 & 0 \\ 1 & 3 & 0 \\ -1 & 2 & 4 \end{bmatrix} \qquad U = \begin{bmatrix} 5 & -1 & 2 \\ 0 & 1 & 3 \\ 0 & 0 & -2 \end{bmatrix} \]

- 三角矩阵的行列式就是其对角线元素的乘积。

- 正交矩阵具有转置等于逆的性质：\(Q^TQ = QQ^T = I\)。

- 这意味着你只需转置就能"撤销"变换，计算成本很低。其列是标准正交的（单位长度且相互垂直）。

- 稀疏矩阵的大多数元素为零，而稠密矩阵的大多数元素非零。

- 在实践中，许多现实世界的矩阵是极其稀疏的。

- 一个拥有百万用户的社交网络可以表示为一个 \(10^6 \times 10^6\) 的矩阵，但每个人只连接到少数其他人，所以几乎所有元素都是零。

- 置换矩阵是通过重排单位矩阵的行得到的。乘以它会打乱向量的元素。每行每列恰好有一个 1，其余为 0。

- 例如，下面的矩阵将元素 3 移到位置 1，元素 1 移到位置 2，元素 2 移到位置 3：

\[ P = \begin{bmatrix} 0 & 0 & 1 \\ 1 & 0 & 0 \\ 0 & 1 & 0 \end{bmatrix} \]

- 托普利茨矩阵沿每条对角线（左上到右下）具有相同的值。注意每条对角线是如何恒定的：

\[ T = \begin{bmatrix} a & b & c \\ d & a & b \\ e & d & a \end{bmatrix} \]

- 这种结构出现在信号处理和卷积中，因为将固定滤波器滑过信号等价于乘以托普利茨矩阵。

- 循环矩阵是一种特殊的托普利茨矩阵，其中每一行是上一行的循环移位。当一行到达末尾时，它会绕回：

\[ C = \begin{bmatrix} 1 & 3 & 2 \\ 2 & 1 & 3 \\ 3 & 2 & 1 \end{bmatrix} \]

- 循环矩阵与离散傅里叶变换（DFT）密切相关，并且是循环卷积如何工作的核心。

- 埃尔米特矩阵是对称矩阵在复数域中的等价形式：\(A = A^\ast\)（其中 \(A^\ast\) 是共轭转置）。

- 对于实值矩阵，埃尔米特矩阵和对称矩阵是一回事。你会在量子计算和信号处理中遇到它们。

- 酉矩阵是正交矩阵在复数域中的等价形式：\(U^\ast U = UU^\ast = I\)。正如正交矩阵在实空间中保持长度，酉矩阵在复空间中保持长度。

- 幂等矩阵满足 \(A^2 = A\)。应用变换两次等同于应用一次，这使得它成为一个投影。一旦你投影了，再次投影不会改变任何东西。

- 幂零矩阵满足对某个幂次 \(k\) 有 \(A^k = O\)（零矩阵）。应用变换足够多次后，所有东西都坍缩为零。例如：

\[ \begin{bmatrix} 0 & 1 \\ 0 & 0 \end{bmatrix}^2 = \begin{bmatrix} 0 & 0 \\ 0 & 0 \end{bmatrix} \]

- 布尔矩阵（或二元矩阵）只包含 0 和 1。它表示是/否关系。例如，在一个有 3 个节点的图中，邻接矩阵记录哪些节点相连：

\[ B = \begin{bmatrix} 0 & 1 & 1 \\ 1 & 0 & 0 \\ 1 & 0 & 0 \end{bmatrix} \]

- 这里，节点 1 连接到节点 2 和 3，但节点 2 和 3 之间没有连接。

- 范德蒙矩阵由一组值的连续幂次构成。给定值 \(x_1, x_2, x_3\)：

\[ V = \begin{bmatrix} 1 & x_1 & x_1^2 \\ 1 & x_2 & x_2^2 \\ 1 & x_3 & x_3^2 \end{bmatrix} \]

- 这种结构出现在多项式插值中：找到通过给定点集的唯一多项式。

- 海森堡矩阵是"几乎"三角的，在第一次次对角线以下全为零：

\[ H = \begin{bmatrix} 4 & 2 & 1 \\ 3 & 5 & -1 \\ 0 & 1 & 6 \end{bmatrix} \]

- 它是有效计算特征值的有用中间形式。先将矩阵化为海森堡形式可以使迭代算法收敛更快。

## 编程练习（使用 CoLab 或 notebook）

1. 创建一个正交矩阵（旋转矩阵），乘以其转置，验证得到单位矩阵。尝试不同的角度。

       import jax.numpy as jnp

       theta = jnp.pi / 4
       Q = jnp.array([[jnp.cos(theta), -jnp.sin(theta)],
                      [jnp.sin(theta),  jnp.cos(theta)]])

       print(f"Q @ Q.T:\n{Q @ Q.T}")
       print(f"Determinant: {jnp.linalg.det(Q):.2f}")

2. 创建一个对称矩阵并验证它等于其转置。然后计算其特征值并检查特征向量是否垂直。

       import jax.numpy as jnp

       S = jnp.array([[4.0, 2.0],
                      [2.0, 3.0]])

       print(f"Symmetric: {jnp.allclose(S, S.T)}")

       eigenvalues, eigenvectors = jnp.linalg.eigh(S)
       print(f"Eigenvalues: {eigenvalues}")
       print(f"Dot product of eigenvectors: {jnp.dot(eigenvectors[:, 0], eigenvectors[:, 1]):.6f}")