尽管上了两门线性代数课,我的知识还停留在“矩阵、行列式、特征什么什么的”。
为什么?好吧,我们来试试这种课程形式:
- 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 是线性的,如果缩放输入会缩放输出,且相加输入会相加输出:
![]()
在我们的例子中,$F(x)$ 计算向前移动 x 英尺时的上升高度,且性质成立:
![]()
![]()
线性运算
操作是基于某些输入的计算。哪些操作是线性且可预测的?看起来是乘法。
指数($F(x) = x^2$)不可预测:$10^2$ 是 100,但 $20^2$ 是 400。我们把输入翻倍,输出却翻了两番。
令人惊讶的是,普通加法也不是线性的。考虑“加三”函数 $F(x) = x + 3$:
![]()
我们把输入翻倍,但输出没有翻倍。(是的,$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$:
![]()
$G$ 仍然是线性的,因为输入翻倍,输出也继续翻倍:
![]()
我们有“迷你算术”:将输入乘以一个常数,然后把结果相加。它实际上很有用,因为我们可以把输入拆开,分别分析,再合并结果:
![]()
如果我们允许非线性运算(比如 $x^2$),就无法拆分工作并合并结果,因为 $(a+b)^2 \neq a^2 + b^2$。把自己限制在线性运算上也有它的好处。
组织输入与运算
大多数课程一上来就把矩阵的细节怼你脸上。“好了孩子们,我们来学说话。选一个主语、动词和宾语。接下来,给动词变位。然后,加上介词……”
不!语法不是重点。关键思想是什么?
- 我们有一堆要追踪的输入
- 我们要执行可预测的线性操作(我们的“迷你算术”)
- 我们生成一个结果,也许再对它做一次变换
好。首先,我们该怎么记录一堆输入?用列表怎么样:
x
y
z
不错。我们也可以写成 (x, y, z)——先记着这个想法。
接下来,我们该怎么记录运算?记住,我们只有“迷你算术”:乘以常数,最后相加。如果我们的运算 $F$ 行为如下:
![]()
我们可以把整个函数缩写为 (3, 4, 5)。我们知道要用第一个值乘第一个输入,第二个值乘第二个输入,第三个值乘第三个输入,再把结果相加。
只需要第一个输入?
![]()
我们来加点料:该怎么处理多组输入?假设我们想对 (a, b, c) 和 (x, y, z) 都运行运算 F。我们可以试试这样:
![]()
但这不行:F 期望 3 个输入,不是 6 个。我们应该把输入分成组:
1st Input 2nd Input
--------------------
a x
b y
c z
整洁多了。
那我们怎么把同一个输入跑过多个运算?给每个运算一行:
F: 3 4 5
G: 3 0 0
整齐。我们变得有条理了:输入在竖列,运算在横行。
可视化矩阵
光用文字不够。下面是我对输入、运算和输出的可视化:

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

当输入经过一个运算时,它产生一个输出项。在我们的例子中,输入 (a, b, c) 经过运算 F 输出 3a + 4b + 5c。它经过运算 G 输出 3a + 0 + 0。
吃红药丸的时间到了。矩阵就是我们图示的简写:

![]()
矩阵是一个单一变量,代表一张输入或运算的电子表格。
陷阱一:阅读顺序
我们不用 输入 => 矩阵 => 输出 的流向,而是用函数记号,比如 y = f(x) 或 f(x) = y。我们通常用大写字母(F)写矩阵,用小写字母(x)写单一输入列。因为我们有多个输入(A)和输出(B),它们也被视为矩阵:
![]()

陷阱二:编号
矩阵大小记为 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 值、计算利润
将问题可视化。想象执行每个操作:

关键是理解为什么我们是这样设置矩阵的,而不是盲目地算数字。
懂了吗?让我们引入这个场景。
假设推出了一款秘密 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 (计算):

(注:输入应为列,但按行输入更方便。转置(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)”)的使用,是线性方程组的簿记:

变为

我们可以通过在矩阵和输出中加减行来避免手部抽筋,而不是重写整个方程。随着矩阵演变为单位矩阵(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。这就是我们忽略的线性代数的影响:把电子表格带入数学方程的高效记号。
数学愉快。