模板:内容

线性代数(Linear Algebra)直观指南

尽管上了两门线性代数课,我的知识还停留在“矩阵、行列式、特征什么什么的”。

为什么?好吧,我们来试试这种课程形式:

  • Name the course线性代数(Linear Algebra)但重点放在称为矩阵(matrix)和向量(vector)的东西上
  • 用助记符而不是解释推理来教授行/列顺序等概念
  • 偏爱抽象例子(2维向量!3维向量!),并把真实世界的话题留到最后一星期才讲

幸存下来的是物理学家、图形程序员和其他受虐狂。我们错过了关键洞见:

线性代数(Linear Algebra)为你的数学方程提供了迷你电子表格。

我们可以拿一张数据表(一个矩阵),并基于原表创建更新后的表。这就是把电子表格写成方程的力量。

这是我想要的线性代数介绍,带一个真实的股市例子。

名字里有什么?

“代数(Algebra)”粗略地说意思是“关系”。小学代数探索未知数之间的关系。不知道 x 和 y,我们仍可以算出 $(x + y)^2 = x^2 + 2xy + y^2$。

“线性代数(Linear Algebra)”粗略地说意思是“像线一样的关系”。我们来澄清一下。

直线是可预测的。想象一个屋顶:向前移动 3 水平英尺(相对于地面),你可能会上升 1 英尺高度(斜率!上升/水平距离 = 1/3)。向前移动 6 英尺,你会预期上升 2 英尺。对比爬圆顶:每向前一水平英尺,你上升的高度都不同。

直线美好且可预测:

  • 如果向前 3 英尺有 1 英尺的上升,那么走远 10 倍应该给出 10 倍的上升(向前 30 英尺就是 10 英尺的上升)
  • 如果向前 3 英尺有 1 英尺的上升,向前 6 英尺有 2 英尺的上升,那么(3 + 6)英尺应该有(1 + 2)英尺的上升

用数学术语说,一个操作 F 是线性的,如果缩放输入会缩放输出,且相加输入会相加输出:


\begin{aligned}
F(ax) &= a \cdot F(x) \\
F(x + y) &= F(x) + F(y)
\end{aligned}

在我们的例子中,$F(x)$ 计算向前移动 x 英尺时的上升高度,且性质成立:

\displaystyle{F(10 \cdot 3) = 10 \cdot F(3) = 10}

\displaystyle{F(3+6) = F(3) + F(6) = 3}

线性运算

操作是基于某些输入的计算。哪些操作是线性且可预测的?看起来是乘法。

指数($F(x) = x^2$)不可预测:$10^2$ 是 100,但 $20^2$ 是 400。我们把输入翻倍,输出却翻了两番。

令人惊讶的是,普通加法也不是线性的。考虑“加三”函数 $F(x) = x + 3$:


\begin{aligned}
F(10) &= 13 \\
F(20) &= 23
\end{aligned}

我们把输入翻倍,但输出没有翻倍。(是的,$F(x) = x + 3$ 恰好是偏移量直线的方程,但它仍然不是“线性”的,因为 $F(10) \neq 10 \cdot F(1)$。有趣。)

那么,哪些类型的函数是实际上线性的?普通的按常数缩放,或者形如:$F(x) = ax$ 的函数。在我们的屋顶例子中,$a = 1/3$。

但生活并非无聊。我们仍然可以将多个线性函数($A(x) = ax, B(x) = bx, C(x)=cx$)组合成一个更大的函数 $G$:

\displaystyle{G(x,y,z) = A(x) + B(y) + C(z) = ax + by + cz }

$G$ 仍然是线性的,因为输入翻倍,输出也继续翻倍:

\displaystyle{G(2x, 2y, 2z) = a(2x) + b(2y) + c(2z) = 2(ax + by + cz) = 2 \cdot G(x, y, z)}

我们有“迷你算术”:将输入乘以一个常数,然后把结果相加。它实际上很有用,因为我们可以把输入拆开,分别分析,再合并结果:

\displaystyle{G(x,y,z) = G(x,0,0) + G(0,y,0) + G(0,0,z)}

如果我们允许非线性运算(比如 $x^2$),就无法拆分工作并合并结果,因为 $(a+b)^2 \neq a^2 + b^2$。把自己限制在线性运算上也有它的好处。

组织输入与运算

大多数课程一上来就把矩阵的细节怼你脸上。“好了孩子们,我们来学说话。选一个主语、动词和宾语。接下来,给动词变位。然后,加上介词……”

不!语法不是重点。关键思想是什么?

  • 我们有一堆要追踪的输入
  • 我们要执行可预测的线性操作(我们的“迷你算术”)
  • 我们生成一个结果,也许再对它做一次变换

好。首先,我们该怎么记录一堆输入?用列表怎么样:

x
y
z

不错。我们也可以写成 (x, y, z)——先记着这个想法。

接下来,我们该怎么记录运算?记住,我们只有“迷你算术”:乘以常数,最后相加。如果我们的运算 $F$ 行为如下:

\displaystyle{F(x, y, z) = 3x + 4y + 5z}

我们可以把整个函数缩写为 (3, 4, 5)。我们知道要用第一个值乘第一个输入,第二个值乘第二个输入,第三个值乘第三个输入,再把结果相加。

只需要第一个输入?

\displaystyle{G(x, y, z) = 3x + 0y + 0z = (3, 0, 0)}

我们来加点料:该怎么处理多组输入?假设我们想对 (a, b, c) 和 (x, y, z) 都运行运算 F。我们可以试试这样:

\displaystyle{F(a, b, c, x, y, z) = ?}

但这不行:F 期望 3 个输入,不是 6 个。我们应该把输入分成组:

1st Input  2nd Input
--------------------
a          x
b          y
c          z

整洁多了。

那我们怎么把同一个输入跑过多个运算?给每个运算一行:

F: 3 4 5
G: 3 0 0

整齐。我们变得有条理了:输入在竖列,运算在横行。

可视化矩阵

光用文字不够。下面是我对输入、运算和输出的可视化:

linear algebra reference

想象把每个输入“倒”进每个运算里:

linear algebra pour in

当输入经过一个运算时,它产生一个输出项。在我们的例子中,输入 (a, b, c) 经过运算 F 输出 3a + 4b + 5c。它经过运算 G 输出 3a + 0 + 0。

吃红药丸的时间到了。矩阵就是我们图示的简写:

\text{I}\text{nputs} = A = \begin{bmatrix} \text{i}\text{nput1}&\text{i}\text{nput2}\end{bmatrix} = \begin{bmatrix}a & x\\b & y\\c & z\end{bmatrix}

\text{Operations} = M = \begin{bmatrix}\text{operation1}\\ \text{operation2}\end{bmatrix} = \begin{bmatrix}3 & 4 & 5\\3 & 0 & 0\end{bmatrix}

矩阵是一个单一变量,代表一张输入或运算的电子表格。

陷阱一:阅读顺序

我们不用 输入 => 矩阵 => 输出 的流向,而是用函数记号,比如 y = f(x) 或 f(x) = y。我们通常用大写字母(F)写矩阵,用小写字母(x)写单一输入列。因为我们有多个输入(A)和输出(B),它们也被视为矩阵:

\displaystyle{MA = B}


\begin{bmatrix}3 & 4 & 5\\3 & 0 & 0\end{bmatrix} \begin{bmatrix}a & x\\b & y\\c & z\end{bmatrix}
= \begin{bmatrix}3a + 4b + 5c & 3x + 4y + 5z\\ 3a & 3x\end{bmatrix}

陷阱二:编号

矩阵大小记为 RxC:先行数,再列数,缩写为“m x n”(我懂,写成“r x c”更好记)。矩阵中的项也用同样方式引用:aij是第 i 行第 j 列(我懂,“i”和“j”在黑板上容易搞混)。助记符没问题结合上下文,下面是我用的:

  • RC,就像 Roman Centurion 或 RC Cola
  • 使用“L”形。沿着 L 向下数,再横向数

为什么 RC 顺序合理?我们的运算矩阵是 2×3,输入矩阵是 3×2。写在一起:

[Operation Matrix] [Input Matrix]
[operation count x operation size] [input size x input count]
[m x n] [p x q] = [m x q]
[2 x 3] [3 x 2] = [2 x 2]

注意矩阵在“运算大小”和“输入大小”(n = p)处相接。它们必须匹配!如果我们的输入有 3 个分量,我们的运算就应该期望 3 个项目。事实上,我们可以仅仅在 n = p 时相乘矩阵。

输出矩阵对每个输入有 m 个操作行,共有 q 个输入,得到一个“m x q”矩阵。

更复杂的运算

我们来熟悉一下操作。假设有 3 个输入,我们可以快速写出几个单操作矩阵:

  • 加法器:[1 1 1]
  • 平均器:[1/3 1/3 1/3]

“加法器”就是 a + b + c。“平均器”类似:(a + b + c)/3 = a/3 + b/3 + c/3。

试试这些单行代码:

  • 仅第一个输入:[1 0 0]
  • 仅第二个输入:[0 1 0]
  • 仅第三个输入:[0 0 1]

如果我们将它们合并成一个矩阵:

[1 0 0]
[0 1 0]
[0 0 1]

哇——这是“单位矩阵”,它将 3 个输入原样复制到 3 个输出。那这个呢?

[1 0 0]
[0 0 1]
[0 1 0]

他重排了输入:(x, y, z) 变成 (x, z, y)。

那这个呢?

[2 0 0]
[0 2 0]
[0 0 2]

他是个输入翻倍器。如果愿意的话,我们可以把他重写为2*I(单位矩阵)。

是的,当我们将输入视为向量坐标时,操作矩阵会变换我们的向量。这里有一个几个例子:

  • 缩放:使所有输入变大/变小
  • 倾斜:使某些输入变大/变小
  • 翻转:使输入变为负数
  • 旋转:基于旧坐标生成新坐标(东变为北,北变为西,等等)

这些是乘法的几何解释,以及如何扭曲向量空间。只需记住向量是示例要修改的数据。

非向量示例:股票投资组合

让我们在真实世界中练习线性代数:

  • 输入数据:持有 Apple、Google 和 Microsoft 股票的美元股票投资组合
  • 操作:新闻事件后公司价值的变化
  • 输出:更新后的投资组合

还有一个额外输出:新建一个投资组合,列出该事件的净利润/亏损。

通常我们会在电子表格中跟踪这些。让我们学会用线性代数思考:

  • 输入向量可以是 (\$Apple, \$Google, \$Microsoft),表示每只股票中的美元数。(哦!这些美元值可能来自另一个将股份数量乘以价格的矩阵。真巧妙!)

  • 4 个输出操作应该是:更新 Apple 值、更新 Google 值、更新 Microsoft 值、计算利润

将问题可视化。想象执行每个操作:

linear algebra stock example

关键是理解为什么我们是这样设置矩阵的,而不是盲目地算数字。

懂了吗?让我们引入这个场景。

假设推出了一款秘密 iDevice:Apple 上涨 20%,Google 下跌 5%,Microsoft 保持不变。我们想调整每只股票的值,使用类似单位矩阵的矩阵:

New Apple     [1.2  0      0]
New Google    [0    0.95   0]
New Microsoft [0    0      1]

新的 Apple 值是原始值增加 20%(Google = 下降 5%,Microsoft = 无变化)。

哦等等!我们需要总利润:

总变化 = (.20 * Apple) + (-.05 * Google) + (0 * Microsoft)

我们最终的操作矩阵:

New Apple       [1.2  0      0]
New Google      [0    0.95   0]
New Microsoft   [0    0      1]
Total Profit    [.20  -.05   0]

明白了吗?三个输入进入,四个输出离开。前三个操作是“修改后的复制”,最后一个将变化汇总。

现在让我们输入 Alice \$1000, \$1000, \$1000) 和 Bob \$500, \$2000, \$500) 的投资组合。我们可以手动计算,或使用 Wolfram Alpha (计算):

matrix stock computation

(注:输入应为列,但按行输入更方便。转置(Transpose)操作,用 t(tau)表示,可将行转换为列。)

最终数字:Alice 在 AAPL 中持有 $1200,在 GOOG 中持有 $950,在 MSFT 中持有 $1000,净利润为 $150。Bob 在 AAPL 中持有 $600,在 GOOG 中持有 $1900,在 MSFT 中持有 $500,净利润为 $0。

发生了什么?我们在用自己的电子表格做数学。线性代数(Linear algebra)出现于 19 世纪,而电子表格(Spreadsheet)发明于 20 世纪 80 年代。我将这一差距归咎于糟糕的线性代数教育。

历史注记:求解联立方程

一个早期的对数字表(尚不是“矩阵(Matrix)”)的使用,是线性方程组的簿记:


\begin{aligned}
x + 2y + 3z &= 3 \\
2x + 3y + 1z &= -10 \\
5x + -y + 2z &= 14
\end{aligned}

变为


\begin{bmatrix}1 & 2 & 3\\2 & 3 & 1\\5 & -1 & 2\end{bmatrix} \begin{bmatrix}x \\y \\ z \end{bmatrix}
= \begin{bmatrix}3 \\ -10 \\ 14 \end{bmatrix}

我们可以通过在矩阵和输出中加减行来避免手部抽筋,而不是重写整个方程。随着矩阵演变为单位矩阵(Identity matrix),x、y 和 z 的值会在输出侧显现。

这个过程称为高斯-若尔当消元法(Gauss-Jordan elimination),节省了时间。然而,线性代数主要是关于矩阵变换(Matrix transformation),而非求解大型方程组(这就好比用 Excel 来管理你的购物清单)。

术语、行列式与特征相关概念

词语有技术类别来描述其用法(名词、动词、形容词)。矩阵也可以类似地细分。

像“上三角(upper-triangular)”、“对称(symmetric)”、“对角(diagonal)”这样的描述是指矩阵的形状,并影响其变换。

这个行列式是输出变换的“大小”。如果输入是单位向量(Unit vector)(表示面积为 1 或体积为 1),行列式(Determinant)就是变换后面积或体积的大小。行列式为 0 意味着矩阵是“破坏性的”,且无法逆转(类似于乘以零:信息丢失了)。

这个 特征向量特征值表示变换的“轴(Axes)”。

想象旋转一个地球仪:每个位置都朝向新方向,除了两极。

“特征向量(Eigenvector)”是运行通过矩阵时方向不发生变化的输入(它沿“轴”指向)。并且尽管方向不变,大小可能会变。特征值(Eigenvalue)是特征向量通过矩阵时被放大或缩小的量。

(我这里的直觉较弱,想进一步探索。这里有一个漂亮的图示视频.)

作为输入的矩阵

一个有趣的想法:我们可以将运算矩阵(Operations matrix)视为输入!

将配方视为命令列表(加入2杯糖、3杯面粉……).

如果我们想要公制版本怎么办?拿取指令,将其当作文本处理,并转换单位。配方是要修改的“输入”。完成后,我们可以再次按照指令操作。

运算矩阵与此类似:用于修改的指令。将一个运算矩阵应用到另一个上,会得到一个应用两者变换的新运算矩阵,按顺序进行。

如果 N 是“根据新闻调整投资组合”,T 是“根据税收调整投资组合”,那么同时应用两者:

TN = X

意思是“创建矩阵 X,它先根据新闻调整,再根据税收调整”。哇!我们不需要输入的投资组合,直接将一个矩阵应用到另一个上。

线性代数的美妙之处在于用单个字母表示整个电子表格计算。想多次应用同一变换?使用 $N^2$ 或 $N^3$。

我们能用普通加法吗?

是的,因为你礼貌地请求了。我们的“迷你算术”似乎有局限:只有乘法,没有加法?是时候扩展我们的思维了。

想象在我们的输入中添加一个虚拟条目 1:(x, y, z) 变为 (x, y, z, 1)。

现在我们的运算矩阵多了一个已知的数值可供使用!如果我们想要x + 1我们可以写成:

[1 0 0 1]

并且x + y - 3将会是:

[1 1 0 -3]

好耶!

想要极客式的解释吗?我们假装输入存在于高一个维度中,并在那个维度放一个“1”。我们倾斜那个更高的维度,它看起来像是一个滑动在当前维度中的一个。例如:取输入 (x, y, z, 1) 并让它经过:

[1 0 0 1]
[0 1 0 1]
[0 0 1 1]
[0 0 0 1]

结果是 (x + 1, y + 1, z + 1, 1)。忽略第 4 维,每个输入都得到了 +1。我们保留这个哑元项,以后还可以做更多平移。

迷你算术毕竟没那么局限。

继续前进

我忽略了一些线性代数(linear algebra)的微妙之处,而我并不太在意。为什么?

这些隐喻正在帮助我思考理解矩阵(matrices),胜过我那些“拿 A”的课。我终于能用“电子表格有什么用?”来回应“线性代数有什么用?”了。

它们没用,除非你想要一个能用来攻击几乎每一个现实问题的工具。问问商人,他们是愿意捐一个肾,还是永远被禁止使用 Excel。这就是我们忽略的线性代数的影响:把电子表格带入数学方程的高效记号。

数学愉快。

本系列其他文章

  1. 虚数(Imaginary Numbers)的直观可视化指南
  2. 复数的直观算术
  3. 理解复数乘法为何成立
  4. 角度、度数与弧度(Radians)的直观指南
  5. 欧拉公式(Euler's Formula)的直观理解
  6. 傅里叶变换(Fourier Transform)的交互式指南
  7. 卷积(Convolution)的直观指南
  8. 正弦波(Sine Waves)的直观理解
  9. 线性代数(Linear Algebra)直观指南
  10. 程序员对矩阵乘法(Matrix Multiplication)的直觉
  11. 虚数乘法 vs. 虚数指数
  12. 双曲函数(Hyperbolic Functions)的直观指南

加入 45 万月度读者

喜欢这篇文章?还有更多内容能帮你建立持久、直观的数学理解。加入通讯以获取额外内容和最新更新。
社交分享