跳转至

矩阵

本文介绍线性代数中一个非常重要的内容——矩阵,主要讲解矩阵的性质、运算,以及矩阵乘法的一些应用。


向量与矩阵

在线性代数中,向量可以分为列向量行向量

  • 通常研究对象是列向量,用粗体小写字母表示,如 $\mathbf{v}$。
  • 行向量通常表示方程或约束,可以用列向量的转置表示 $\mathbf{v}^\mathsf{T}$。
  • 向量可以看作特殊的矩阵:列向量是 $n \times 1$ 的矩阵,行向量是 $1 \times n$ 的矩阵。
  • 为了书写方便,有时向量上方的箭头可以省略,但理解方向时仍需注意。

引入矩阵

矩阵的引入来自于线性方程组。它体现了一种对数据和运算“打包处理”的思想。

例如,考虑线性方程组:

\[ \begin{cases} x+2y=4\\ 2x+y=6 \end{cases} \]

视角一:几何理解

  • 在平面直角坐标系中,每个方程对应一条直线。
  • 两条直线的交点就是方程组的解:

$$ (x,y)=\left(\frac{8}{3},\frac{2}{3}\right) $$

  • 每个方程相当于给解施加一个“约束”,交点是同时满足所有约束的点。

视角二:列向量表示

将方程组表示为列向量形式:

\[ \mathbf{A} = \begin{bmatrix} x \\ 2x \end{bmatrix},\quad \mathbf{B} = \begin{bmatrix} 2y \\ y \end{bmatrix},\quad \mathbf{C} = \begin{bmatrix} 4 \\ 6 \end{bmatrix} \]

方程组可写作:

\[ \mathbf{A} + \mathbf{B} = \mathbf{C} \]

进一步分解成固定向量的线性组合

\[ x\cdot \begin{bmatrix} 1 \\ 2 \end{bmatrix} + y\cdot \begin{bmatrix} 2 \\ 1 \end{bmatrix} = \begin{bmatrix} 4 \\ 6 \end{bmatrix} \]
  • 直观理解:在平面上有两条固定方向的向量

$$ \mathbf{u} = \begin{bmatrix} 1 \ 2 \end{bmatrix},\quad \mathbf{v} = \begin{bmatrix} 2 \ 1 \end{bmatrix} $$

我们要找到系数 $x$ 和 $y$,使它们的线性组合得到目标向量 $\mathbf{C}$。


视角三:矩阵表示

将系数和未知数以及答案提取成矩阵:

\[ A = \begin{bmatrix} 1 & 2 \\ 2 & 1 \end{bmatrix},\quad x = \begin{bmatrix} x \\ y \end{bmatrix},\quad b = \begin{bmatrix} 4 \\ 6 \end{bmatrix} \]

方程组可写作矩阵形式:

\[ A\cdot x = b \]
  • 矩阵乘以列向量的结果仍是列向量。
  • 这一表示方式便于处理高维线性方程组,也与向量线性组合视角一致:
\[ A x = x\cdot \mathbf{u} + y\cdot \mathbf{v} = b \]

矩阵乘向量规则

其本质上是线性组合和内积的推广

  1. 行向量视角:矩阵的每一行与列向量做内积,得到结果向量的对应元素。
  2. 列向量视角:矩阵乘以列向量可以看作矩阵的列向量按系数进行线性组合。

口诀:“左行右列”:行向量点列向量得到标量。

例如行向量视角:

\[ \begin{bmatrix} 1 & 2 \\ 2 & 1 \end{bmatrix} \begin{bmatrix} x \\ y \end{bmatrix} = \begin{bmatrix} 1\cdot x + 2\cdot y \\ 2\cdot x + 1\cdot y \end{bmatrix} = \begin{bmatrix} 4 \\ 6 \end{bmatrix} \]
  • 这一规则保证矩阵乘以列向量与原方程组解一致。

例如列向量视角:

\[ \begin{bmatrix} 1 & 2 \\ 2 & 1 \end{bmatrix} \begin{bmatrix} x \\ y \end{bmatrix}= x\cdot \begin{bmatrix} 1 \\ 2 \end{bmatrix} + y\cdot \begin{bmatrix} 2 \\ 1 \end{bmatrix} = \begin{bmatrix} 4 \\ 6 \end{bmatrix} \]
  • 这一规则保证列向量左乘矩阵与视角二一致。

总结

  • 列向量线性组合:矩阵乘列向量可看作列向量的加权叠加。
  • 行向量内积:矩阵乘列向量可看作行向量与列向量的内积运算推广。
  • 矩阵的几何意义:矩阵乘以列向量相当于对向量进行线性变换(旋转、拉伸、投影等)。

矩阵乘法不仅方便表达线性方程组,也为高维向量和线性变换的研究奠定基础。


核心概念

  • 线性组合:用若干已知向量,通过“放大/缩小/反向 + 相加”得到的新向量。
  • 线性变换:保持加法和数乘规则不变的映射,可以用矩阵表示。
  • 线性空间(向量空间):一个向量集合,要求加法和数乘都不会“跳出”集合。
  • 线性相关 / 无关:能否用其他向量拼出某个向量。

1. 线性组合

定义 给定向量 $\mathbf{u},\mathbf{v},\dots$,任意系数 $\alpha,\beta,\dots$ 的组合:

\[ \alpha \mathbf{u} + \beta \mathbf{v} + \cdots \]

称为这些向量的线性组合

例子

\[ \mathbf{u}=\begin{bmatrix}1\\2\end{bmatrix},\ \mathbf{v}=\begin{bmatrix}2\\1\end{bmatrix} \]

取系数 $2$ 和 $-1$:

\[ 2\mathbf{u}+(-1)\mathbf{v} = \begin{bmatrix}0\\3\end{bmatrix}. \]

直观理解

  • 每个向量像一条“方向箭头”;系数就是“缩放/翻转”的程度。
  • 线性组合就是在这些方向上“走一段路”,最终落在某个点上。
  • 解线性方程组,就是在问:“能不能用给定的基向量拼出目标向量?”

2. 线性变换

定义 映射 $T:V\to V$,若满足:

\[ T(\alpha x + \beta y) = \alpha T(x) + \beta T(y), \]

则称为线性变换

直观规则

  • 保持“加法结构”:$T(x+y)=T(x)+T(y)$
  • 保持“数乘结构”:$T(cx)=cT(x)$
  • 一定有 $T(0)=0$

例子

  • 缩放:$T(x,y)=(2x,2y)$ ✅
  • 投影:$P(x,y)=(x,0)$ ✅
  • 旋转:$R(x,y)=(-y,x)$ ✅
  • 平移:$T(x,y)=(x+1,y)$ ❌(因为 $T(0)\neq 0$)

意义

  • 所有线性变换都能写成矩阵乘法。
  • 它把直线/平面保持为直线/平面,而不会变成曲线。

3. 线性空间(向量空间)

定义 一个集合 $V$,如果:

  • 任意 $u,v \in V$,有 $u+v \in V$(对加法封闭)
  • 任意 $c\in\mathbb{R}, v\in V$,有 $cv \in V$(对数乘封闭)

则 $V$ 是一个线性空间

例子

  • $\mathbb{R}^2,\ \mathbb{R}^3$(平面、三维空间)
  • 所有 $n$ 维向量的集合
  • 所有次数 $\leq n$ 的多项式集合

非例子

  • 平面上“第一象限的向量”(因为数乘负数会跑出去)
  • “不经过原点的直线”(因为必须包含 $0$)

4. 线性相关与线性无关

定义

  • 如果存在某个向量能被其他向量线性组合得到 → 线性相关
  • 如果任何一个都不能由其他向量拼出 → 线性无关

例子

  • $(1,0)$ 和 $(0,1)$ → 线性无关(互相拼不出来)。
  • $(1,2)$ 和 $(2,4)$ → 线性相关(第二个是第一个的 2 倍)。

👉 总结:

  • 线性组合:拼向量的方法。
  • 线性变换:保持拼法规则的变换,矩阵就是它的工具。
  • 线性空间:一个允许随意拼而不会跑出去的集合。
  • 相关/无关:能不能用已有的拼出多余的。

矩阵基本概念与类型总结

在线性代数中,矩阵(matrix) 是一个由数、符号或表达式按照长方形排列而成的数组。

一个 $m \times n$ 矩阵(读作 $m$ 行 $n$ 列矩阵)是一个有 $m$ 行、$n$ 列的数表:

\[ A = \begin{bmatrix} 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{bmatrix} \]

其中:

  • 每个元素 $a_{ij}$ 称为矩阵的 元素(element),表示在第 $i$ 行第 $j$ 列。
  • 矩阵 $A$ 的大小(或维度)是 $m \times n$。
  • 若 $m=n$,称 $A$ 为 方阵
  • 主对角线:方阵中从左上到右下的元素,即 $A_{i,i}$。
  • 单位矩阵 $I$:方阵,主对角线元素为 $1$,其余元素为 $0$。
  • 同型矩阵:行数和列数都相同的矩阵称为同型矩阵。
  • 常用矩阵类型

    • 对称矩阵
      • 条件:$A_{i,j} = A_{j,i}$,即关于主对角线对称。
    • 对角矩阵
      • 条件:主对角线之外的元素全为 $0$。
      • 记法:$\text{diag}{\lambda_1, \cdots, \lambda_n}$。
      • 特殊情况:
        • 所有对角线元素为 $1\rightarrow$ 单位矩阵 $I$
    • 三角矩阵
      • 上三角矩阵:主对角线下方元素为 $0$。
      • 下三角矩阵:主对角线上方元素为 $0$。
      • 性质:
        • 两个上(下)三角矩阵的乘积仍是上(下)三角矩阵。
        • 对角线元素均非 $0\rightarrow$ 可逆,逆矩阵仍是上(下)三角矩阵。
    • 单位三角矩阵
      • 条件:三角矩阵对角线全为 $1$。
      • 性质:
        • 两个单位上(下)三角矩阵的乘积仍为单位上(下)三角矩阵。
        • 单位上(下)三角矩阵可逆,逆矩阵仍为单位上(下)三角矩阵。
  • 应用场景

    • 一般矩阵:用于研究方程组、向量组、矩阵的秩。
    • 方阵:用于研究特征值、特征向量、二次型等问题。

矩阵运算总结

1. 矩阵的线性运算

  • 内容:加法、减法、数乘
  • 规则
    • 只有同型矩阵可以相加减。
    • 运算逐元素进行。
    • 数乘:矩阵的每个元素都乘以这个数。

例子

\[ A = \begin{bmatrix} 1 & 2 \\ 3 & 4 \end{bmatrix}, \quad B = \begin{bmatrix} 5 & 6 \\ 7 & 8 \end{bmatrix} \]
  • 加法
\[ A + B = \begin{bmatrix} 1+5 & 2+6 \\ 3+7 & 4+8 \end{bmatrix} = \begin{bmatrix} 6 & 8 \\ 10 & 12 \end{bmatrix} \]
  • 减法
\[ A - B = \begin{bmatrix} 1-5 & 2-6 \\ 3-7 & 4-8 \end{bmatrix} = \begin{bmatrix} -4 & -4 \\ -4 & -4 \end{bmatrix} \]
  • 数乘(例如乘以 $2$):
\[ 2A = \begin{bmatrix} 2\cdot 1 & 2\cdot 2 \\ 2\cdot 3 & 2\cdot 4 \end{bmatrix} = \begin{bmatrix} 2 & 4 \\ 6 & 8 \end{bmatrix} \]

2. 矩阵转置

  • 定义:将矩阵的行与列互换,记作 $A^T$。
  • 性质
    • 对称矩阵 $A = A^T$。

例子

\[ A = \begin{bmatrix} 1 & 2 & 3 \\ 4 & 5 & 6 \end{bmatrix} \quad \Rightarrow \quad A^T = \begin{bmatrix} 1 & 4 \\ 2 & 5 \\ 3 & 6 \end{bmatrix} \]

3. 矩阵乘法

我们已经知道,对于矩阵 $A$ 和列向量 $x$,矩阵乘以向量的运算可以理解为两种等价方式:

  • 行向量内积视角:每一行与 $x$ 做内积,得到结果向量的对应元素。
\[ A x = \begin{bmatrix} \text{row}_1(A) \cdot x \\ \text{row}_2(A) \cdot x \\ \vdots \end{bmatrix} \]
  • 列向量线性组合视角:每一列向量按 $x$ 的系数加权叠加,得到结果列向量。
\[ A x = x_1 \mathbf{a}_1 + x_2 \mathbf{a}_2 + \dots + x_n \mathbf{a}_n \]

这两种视角帮助我们直观理解矩阵如何作用于向量。


假设我们有多个列向量 $x_1, x_2, \dots, x_p$,每个向量都要通过同一个矩阵 $A$ 变换:

\[ b_1 = A x_1,\quad b_2 = A x_2, \quad \dots \quad b_p = A x_p \]
  • 直接操作每个向量很繁琐。
  • 我们可以把所有列向量组合成一个矩阵:
\[ X = [x_1, x_2, \dots, x_p] \]
  • 这样一次性变换可以写作: $$ B = [b_1, b_2, \dots, b_p] = A X $$

  • 直观理解:矩阵乘矩阵,其实就是矩阵乘以右边矩阵的每一列向量,得到新的列向量组成的矩阵。


  • 定义
    • $A$ 为 $P \times M$ 矩阵,$B$ 为 $M \times Q$ 矩阵,则 $C = A\cdot B$ 是 $P \times Q$ 矩阵。
    • 公式:
\[ C_{i,j} = \sum_{k=1}^{M} A_{i,k} B_{k,j} \]
  • 口诀:左行右列
  • 性质
    • 满足结合律 $(AB)C = A(BC)$。
    • 不满足一般交换律 $AB \neq BA$。
    • 利用结合律,矩阵乘法可以利用 快速幂 的思想来优化。

在比赛中,由于线性递推式可以表示成矩阵乘法的形式,也通常用矩阵快速幂来求线性递推数列的某一项。

例子

\[ A = \begin{bmatrix} 1 & 2 \\ 3 & 4 \end{bmatrix}, \quad B = \begin{bmatrix} 5 & 6 \\ 7 & 8 \end{bmatrix} \]
\[ AB = \begin{bmatrix} 1\cdot5 + 2\cdot7 & 1\cdot6 + 2\cdot8 \\ 3\cdot5 + 4\cdot7 & 3\cdot6 + 4\cdot8 \end{bmatrix} = \begin{bmatrix} 19 & 22 \\ 43 & 50 \end{bmatrix} \]

结合律的证明

证明: 为了简单起见,证明 $A(Bx)=(AB)x$ 即可,其中 $x$ 为列向量。

假设 $A,B,x$ 的规模分别为 $n\times m$,$m\times p$,$p\times 1$。写出 $Bx$:

\[ Bx = \begin{bmatrix} | & | & & | \\ b_1 & b_2 & \cdots & b_p \\ | & | & & | \end{bmatrix} \begin{bmatrix} x_1 \\ x_2 \\ \vdots \\ x_p \end{bmatrix} = x_1 b_1 + x_2 b_2 + \cdots + x_p b_p \]

所以 $Bx$ 是 列向量的线性组合。再作用 $A$

\[ A(Bx) = A(x_1 b_1 + \cdots + x_p b_p) = x_1 (A b_1) + \cdots + x_p (A b_p)=\begin{bmatrix} | & | & & | \\ Ab_1 & Ab_2 & \cdots &A b_p \\ | & | & & | \end{bmatrix}\begin{bmatrix} x_1 \\ x_2 \\ \vdots \\ x_p \end{bmatrix} \]

最后就等于 $(AB)x$。


代码实现

一般来说可以用一个二维数组来模拟矩阵,搭配重载运算符来模拟矩阵乘法等运算。

struct matrix
{
    int mat[N][N];
    matrix()  // 构造函数
    {
        memset(mat, 0, sizeof(mat));
    }
};
matrix operator * (const matrix &a, const matrix &b)  // 矩阵乘法
{
    matrix c;
    for (int k = 0; k < N; k++)
    {
        for (int i = 0; i < N; i++)
        {
            for (int j = 0; j < N; j++)
            {
                c.mat[i][j] += a.mat[i][k] * b.mat[k][j];
            }
        }
    }
    return c;
}

代码中将上限都改为了 $N$,相当于矩阵都视为了 $N\times N$ 的方阵。实际做题自己调整。