矩阵与映射
1.2 矩阵和映射
暂时的定义
- 把数排列成长方形就是矩阵
- 这只是暂时的定义,本书的目标之一就是要打破这种印象
- 矩阵的加法:相同规模(行列数都相等)的矩阵对应位置相加
- 数量乘法:矩阵的每个元素同乘一个数
- 运算规则和向量完全一样:、、
矩阵与向量的乘积
- 小明买了 1 斤肉、2 斤大豆和 3 斤米,问题是总共花多少钱、一共多少卡路里
- 设两个值分别为「钱」和「热」,把两个等式综合起来写成一个式子
- 矩阵乘向量的规则:结果的第 个分量 = 矩阵第 行与向量的点积
- 形象地说, 里每一行是一个「配方」, 的每个分量是「原料用量」
为什么列向量要「放倒」
- 矩阵乘向量时,把列向量横过来放(转置)再做点积,这是约定而非必然
- 改用行向量看似直观,但乘积结果(右边)却还是列向量,反而更乱
- 矩阵和 维列向量在运算上完全等价,所以「放倒」只是个书写约定
「平直」的关系与线性映射
- 满足 以及 的映射称为线性映射
- 「乘以矩阵 的运算」就是线性映射
- 反过来也成立:任意线性映射都能改写成「乘以某矩阵」的形式
- 把标准基底 作为输入,记
- 对输入 ,输出就是
- 把这些列向量按顺序排列构成 ,于是
- 所以「矩阵就是用坐标来表示的线性映射」
重产品与原料问题
- 制造 1 个产品 1 需要原料 1、2、3 各 克
- 制造 1 个产品 2 需要原料 1、2、3 各 克
- 制造 个产品 1 和 个产品 2,原料需求量写成一个矩阵式
- 反例:制造 1 个产品需 20 克原料,但制造 1000 个产品只需 18000 克(规模效应)
- 这就构不成「平直」的关系
- 非「平直」的关系不能用「乘以某矩阵」来表达
其他常见场景
- 电路分析(LCR 电路的电流、电压)
- 信号处理(线性滤波器、傅立叶变换、小波变换)
- 控制理论(线性系统)
- 统计分析(线性模型)
矩阵就是映射
- 维向量 乘以 矩阵 ,得到 维向量
- 指定了矩阵 ,就确定了从向量到另一个向量的映射
- 「这才是矩阵最重要的机能」
矩阵乘法 = 映射的复合
先做映射 ,再做映射 ,得到的复合映射可以写成
逐分量验证: 的第 个分量
括号里的 正好是 ,与 无关
矩阵乘法就是映射复合,这个规则不是人为规定的,是复合映射唯一可能的表示形式
由此得到矩阵乘法的结合律:
# 验证矩阵乘法 = 映射复合
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]]
单位矩阵
恒等映射(什么都不变)对应的矩阵叫单位矩阵,记作
对角线是 1,其余是 0
对任何矩阵 ,都有
因为矩阵乘法是映射复合,单位矩阵就是「什么都不做」这个映射
后续的逆矩阵就是把复合映射「倒回去」
坐标变换
有两组基底时,需要「根据一组基底对应的坐标求另一组基底对应的坐标」
这正是矩阵的用法:把坐标变换本身写成一个矩阵
这个矩阵的列,是新基底的各向量在旧基底下的坐标
1.2.11 节会详细讨论
小结这一节的两个关键词
矩阵 = 线性映射:这是本书要打破「矩阵就是一堆数字排列」印象的关键
矩阵乘法 = 映射复合:这条规则反过来唯一地规定了矩阵乘法该怎么算
有了这两条,后面讲逆矩阵(把复合倒回去)、特征值(复合在某些方向上的效果)就都是自然的推论了。