笔记2-《程序员的数学3:线性代数》矩阵与映射  

目录
  1. 矩阵与映射
  2. 矩阵乘法 = 映射的复合
  3. 单位矩阵
  4. 坐标变换
  5. 小结这一节的两个关键词

矩阵与映射

  • 1.2 矩阵和映射

    • 暂时的定义

      • 把数排列成长方形就是矩阵
      • 这只是暂时的定义,本书的目标之一就是要打破这种印象
      • 矩阵的加法:相同规模(行列数都相等)的矩阵对应位置相加
      • 数量乘法:矩阵的每个元素同乘一个数
      • 运算规则和向量完全一样:−A=(−1)A-A = (-1)A、A−B=A+(−B)A - B = A + (-B)、2A+3B=(2A)+(3B)2A + 3B = (2A) + (3B)
    • 矩阵与向量的乘积

      • 小明买了 1 斤肉、2 斤大豆和 3 斤米,问题是总共花多少钱、一共多少卡路里
      • 设两个值分别为「钱」和「热」,把两个等式综合起来写成一个式子
      • 矩阵乘向量的规则:结果的第 ii 个分量 = 矩阵第 ii 行与向量的点积
      • 形象地说,AxA\mathbf{x} 里每一行是一个「配方」,x\mathbf{x} 的每个分量是「原料用量」
    • 为什么列向量要「放倒」

      • 矩阵乘向量时,把列向量横过来放(转置)再做点积,这是约定而非必然
      • 改用行向量看似直观,但乘积结果(右边)却还是列向量,反而更乱
      • n×1n \times 1 矩阵和 nn 维列向量在运算上完全等价,所以「放倒」只是个书写约定
  • 「平直」的关系与线性映射

    • 满足 f(a+b)=f(a)+f(b)f(\mathbf{a} + \mathbf{b}) = f(\mathbf{a}) + f(\mathbf{b}) 以及 f(ca)=cf(a)f(c\mathbf{a}) = cf(\mathbf{a}) 的映射称为线性映射
    • 「乘以矩阵 AA 的运算」就是线性映射
    • 反过来也成立:任意线性映射都能改写成「乘以某矩阵」的形式
      • 把标准基底 ei=(1,0,…,0)T\mathbf{e}_i = (1, 0, \dots, 0)^T 作为输入,记 ai=f(ei)\mathbf{a}_i = f(\mathbf{e}_i)
      • 对输入 x=(x1,…,xn)T\mathbf{x} = (x_1, \dots, x_n)^T,输出就是 f(x)=x1a1+⋯+xnanf(\mathbf{x}) = x_1 \mathbf{a}_1 + \dots + x_n \mathbf{a}_n
      • 把这些列向量按顺序排列构成 A=(a1,…,an)A = (\mathbf{a}_1, \dots, \mathbf{a}_n),于是 f(x)=Axf(\mathbf{x}) = A\mathbf{x}
    • 所以「矩阵就是用坐标来表示的线性映射」
  • 重产品与原料问题

    • 制造 1 个产品 1 需要原料 1、2、3 各 a11,a21,a31a_{11}, a_{21}, a_{31} 克
    • 制造 1 个产品 2 需要原料 1、2、3 各 a12,a22,a32a_{12}, a_{22}, a_{32} 克
    • 制造 x1x_1 个产品 1 和 x2x_2 个产品 2,原料需求量写成一个矩阵式
    • 反例:制造 1 个产品需 20 克原料,但制造 1000 个产品只需 18000 克(规模效应)
      • 这就构不成「平直」的关系
      • 非「平直」的关系不能用「乘以某矩阵」来表达
  • 其他常见场景

    • 电路分析(LCR 电路的电流、电压)
    • 信号处理(线性滤波器、傅立叶变换、小波变换)
    • 控制理论(线性系统)
    • 统计分析(线性模型)
  • 矩阵就是映射

    • nn 维向量 x\mathbf{x} 乘以 m×nm \times n 矩阵 AA,得到 mm 维向量 y=Ax\mathbf{y} = A\mathbf{x}
    • 指定了矩阵 AA,就确定了从向量到另一个向量的映射
    • 「这才是矩阵最重要的机能」

矩阵乘法 = 映射的复合

  • 先做映射 BB,再做映射 AA,得到的复合映射可以写成 ABAB

  • 逐分量验证:(AB)x(AB)\mathbf{x} 的第 ii 个分量

    =∑kaik(Bx)k=∑k∑jaikbkjxj=∑j(∑kaikbkj)xj= \sum_{k} a_{ik} (B\mathbf{x})_k = \sum_{k} \sum_{j} a_{ik} b_{kj} x_j = \sum_{j} \left(\sum_{k} a_{ik} b_{kj}\right) x_j

  • 括号里的 ∑kaikbkj\sum_{k} a_{ik} b_{kj} 正好是 (AB)ij(AB)_{ij},与 A(AB)A(AB) 无关

  • 矩阵乘法就是映射复合,这个规则不是人为规定的,是复合映射唯一可能的表示形式

  • 由此得到矩阵乘法的结合律:(AB)C=A(BC)(AB)C = A(BC)

    # 验证矩阵乘法 = 映射复合
    a = [[1, 2], [3, 4]]
    b = [[5, 6], [7, 8]]
    c = [[2, 0], [1, 1]]

    mul = lambda do |x, y|
    n = x.size
    n.times.map do |i|
    n.times.map do |j|
    n.times.sum { |k| x[i][k] * y[k][j] }
    end
    end
    end

    ab = mul.call(a, b)
    puts "AB = #{ab}" # AB = [[19, 22], [43, 50]]
    puts "(AB)C = #{mul.call(ab, c)}" # (AB)C = [[60, 22], [136, 50]]
    puts "A(BC) = #{mul.call(a, mul.call(b, c))}" # A(BC) = [[60, 22], [136, 50]]

单位矩阵

  • 恒等映射(什么都不变)对应的矩阵叫单位矩阵,记作 II

  • 对角线是 1,其余是 0

    I=(100010001)I = \begin{pmatrix} 1 & 0 & 0 \\ 0 & 1 & 0 \\ 0 & 0 & 1 \end{pmatrix}

  • 对任何矩阵 AA,都有 AI=IA=AAI = IA = A

  • 因为矩阵乘法是映射复合,单位矩阵就是「什么都不做」这个映射

  • 后续的逆矩阵就是把复合映射「倒回去」

坐标变换

  • 有两组基底时,需要「根据一组基底对应的坐标求另一组基底对应的坐标」

  • 这正是矩阵的用法:把坐标变换本身写成一个矩阵

  • 这个矩阵的列,是新基底的各向量在旧基底下的坐标

  • 1.2.11 节会详细讨论

小结这一节的两个关键词

  • 矩阵 = 线性映射:这是本书要打破「矩阵就是一堆数字排列」印象的关键

  • 矩阵乘法 = 映射复合:这条规则反过来唯一地规定了矩阵乘法该怎么算

有了这两条,后面讲逆矩阵(把复合倒回去)、特征值(复合在某些方向上的效果)就都是自然的推论了。

123.8k