线性代数直观指南

尽管上了两门线性代数(linear algebra)课,我的知识仍停留在“矩阵(matrices),行列式(determinants),特征值(eigen)以及什么什么”。

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

  • 课程名为线性代数,但重点放在矩阵和向量(vectors)上。
  • 使用助记符来教授行/列顺序等概念,而不是解释其原因。
  • 偏爱抽象例子(二维向量!三维向量!),直到最后一周才开始涉及现实世界的话题。

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

线性代数为您的数学方程提供了迷你表格。

我们可以取一张数据表(矩阵)并从原始数据中创建更新的表。这就是用方程式书写的电子表格的力量。

这是我希望自己拥有的线性代数入门教程,以一个现实世界的股票市场例子为例。

名字的含义是什么? 

“代数(algebra)”大致意味着“关系(relationship)”。小学代数探讨的是未知数之间的关系。在不知道 x 和 y 的情况下,我们仍然可以计算出

图片.

“线性代数”大致意味着“线性关系(line-like relationships)”。让我们澄清一下。

直线是可预测的。想象一下屋顶:向前移动 3 英尺(相对于地面),您可能会上升 1 英尺(坡度:上升/移动 = 1/3)。向前移动 6 英尺,您会预期上升 2 英尺。与此相比,爬上一个圆顶:每向前移动一英尺,您都会上升不同的高度。

图片

线是很好且可预测的:

  • 如果向前 3 英尺有 1 英尺的上升,那么前进 10 倍的距离应该会有 10 倍的上升(向前 30 英尺是 10 英尺的上升)
  • 如果向前 3 英尺有 1 英尺的上升,向前 6 英尺有 2 英尺的上升,那么(3 + 6)英尺应该有(1 + 2)英尺的上升 

在数学术语中,如果对输入进行缩放等同于对输出进行缩放,并且将输入相加等同于将输出相加,那么操作 F 是线性的:

图片

在我们的例子中, 计算向前移动 x 英尺时的上升,并且属性成立:

图片

线性操作 

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

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

令人惊讶的是,常规加法也不是线性的。考虑“加三”函数

图片:

图片

我们将输入加倍,但输出没有加倍。(是的, F(x)= x +3 恰好是偏移线的方程,但它仍然不是“线性”的,因为F(10)≠10xF(1) 。很有趣。)

那么,什么类型的函数实际上是线性的?普通的按常数缩放,或类似于F(x)=ax 的函数。在我们的屋顶示例中a=1/3 。

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

图片

仍然是线性的,因为输入加倍则输出加倍:

图片

我们有“迷你算术”:将输入乘以一个常数,并将结果相加。它实际上是有用的,因为我们可以将输入分开,单独分析它们,并结合结果:

图片

如果允许非线性操作(例如x^2 ),我们将无法分解我们的工作并结合结果,因为(a+b)^2≠a^2+b^2 。这种局限于线性的操作有其优势。

组织输入和操作 大多数课程会直接向你介绍矩阵的细节。“好吧孩子们,让我们学习说话。选择主语、动词和宾语。接下来,变位动词。然后,添加介词……”

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

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

好吧。首先,我们应该如何跟踪一堆输入?列个清单怎么样:

x
y
z 

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

接下来,我们应该如何跟踪我们的操作?记住,我们只有“迷你算术”:乘以常数,最后加法。如果我们的操作 像这样:

图片

我们可以将整个函数缩写为 (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。

是时候吃下红色药丸了!图表的简化就是矩阵:

图片

矩阵是单个变量,表示输入或操作的表格。

难点 1:阅读顺序

我们使用函数符号,例如 y = f(x) 或 f(x) = y,而不是输入 => 矩阵 => 输出的流程。我们通常用大写字母(F)来表示矩阵,用小写字母(x)来表示单个输入列。因为我们有几个输入(A)和输出(B),它们也被认为是矩阵:

图片

难点2:编号

矩阵的大小以行数 (Row) 和列数 (Column) 来计量,缩写为“m x n”(我知道,“r x c”更容易记住)。矩阵中的项目以相同的方式引用:a_ij 是第 i 行和第 j 列(我知道,“i”和“j”在黑板上很容易混淆)。记住上下文中的助记符是可以的,这是我用的:

  • RC,就像罗马百夫长 (Roman Centurion) 或 RC 可乐 (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+ca + b + c。“平均器”类似:(a + b + c)/3 = a/3 + b/3 + c/3。

试试这些单行矩阵:

  • 仅第一个输入:[1 0 0]\begin{bmatrix} 1 & 0 & 0 \end{bmatrix}
  • 仅第二个输入:[0 1 0]\begin{bmatrix} 0 & 1 & 0 \end{bmatrix}
  • 仅第三个输入:[0 0 1]

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

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

哇,这是“单位矩阵(identity matrix)”,它将 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(单位矩阵)。

是的,当我们决定将输入视为向量坐标时(vector coordinates),操作矩阵将变换(tranform)我们的向量。以下是一些例子:

  • 缩放(scale):使所有输入变大/变小
  • 扭曲(skew):使某些输入变大/变小
  • 翻转(flip):使输入为负
  • 旋转(rotate):基于旧坐标生成新坐标(东变为北,北变为西,等等)

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

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

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

  • 输入数据:持有苹果、谷歌和微软股票的投资组合金额
  • 操作:新闻事件后公司价值的变化
  • 输出:更新后的投资组合

额外输出:列出该事件的净利润/损失的新投资组合

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

  • 输入向量可以是 ($Apple, $Google, $Microsoft),显示每只股票的金额。(哦!这些美元值可以来自另一个矩阵,该矩阵将股票数量乘以其价格。真是高端!)
  • 4 个输出操作应该是:更新苹果价值,更新谷歌价值,更新微软价值,计算利润。

可视化问题。想象一下运行每个操作:

图片

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

介绍情景

假设一个秘密的 iDevice 发布:苹果上涨 20%,谷歌下降 5%,微软保持不变。我们想调整每只股票的价值,使用类似于单位矩阵的东西:

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

新苹果价值是原始价值增加 20%(谷歌下降 5%,微软不变)。

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

总变化 = (0.20 * 苹果) + (-0.05 * 谷歌) + (0 * 微软)

我们的最终操作矩阵:

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

理解了吗?三个输入进来,四个输出出去。前三个操作是“修改后的复制”,最后一个将变化汇总。

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

图片

注意:输入应在列中,但输入行更容易。转置操作(用 t 表示)将行转换为列。

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

发生了什么?我们用自己的电子表格进行数学运算。线性代数在 1800 年代出现,而电子表格在 1980 年代发明。我将这种差距归咎于糟糕的线性代数教育。

历史备注:求解线性方程组

早期使用数字表(还不是“矩阵”)用于线性系统的记账:

图片

变成:

图片

我们可以通过在矩阵和输出中添加/减去行来避免手工重写完整的方程。当矩阵演变成单位矩阵时,x、y 和 z 的值将在输出侧显示出来。

这种过程称为高斯-约当消元法(Gauss-Jordan elimination),节省了时间。然而,线性代数主要是关于矩阵变换,而不是解决大量的方程组(这就像用 Excel 来做购物清单)。

术语、行列式和特征向量

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

像“上三角形”、“对称”、“对角线”这样的描述是矩阵的形状,并影响它们的变换。

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

特征向量(eigenvector)特征值(eigenvalue)表示变换的“轴”。

考虑旋转一个球:每个位置都面向一个新方向,除了极点。

“特征向量”是通过矩阵时方向不变的输入(它沿着轴指向)。尽管方向不变,但大小可能会变。特征值是特征向量通过矩阵时放大或缩小的量。

将矩阵作为输入

一个有趣的想法:我们可以将操作矩阵视为输入!

想象一下食谱是一系列命令(加入2杯糖,3杯面粉……)。

如果我们想要公制版本呢?把指令当作文本,转换单位。食谱是要修改的“输入”。完成后,我们可以再次按照指示进行操作。

操作矩阵类似:修改命令。将一个操作矩阵应用于另一个操作矩阵会生成一个新的操作矩阵,该矩阵按顺序应用两种变换。

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

TN=XTN = X

意思是“创建矩阵 XX,首先根据新闻进行调整,然后根据税收进行调整”。哇!我们不需要输入投资组合,我们直接将一个矩阵应用于另一个。

线性代数的美妙之处在于可以用单个字母表示整个电子表格计算。想要多次应用相同的变换?使用 N2T^n 或 N3N^n。

我们能使用常规加法吗?

因为你礼貌地问了,所以可以。我们的“迷你算术”看起来有限制:乘法,但没有加法?是时候扩展我们的思维了。

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

现在我们的操作矩阵有了一个额外的已知值可以使用!如果我们想要 x + 1我们的操作矩阵可以写成:

[1 0 0 1]

乘法过程如下:

图片

这样,我们通过矩阵乘法实现了 x+1x + 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)。忽略第四维度,每个输入都得到了 +1。我们保留虚拟条目,以便以后进行更多的滑动。

迷你算术并不那么有限。

结束语

我忽略了一些线性代数的细微差别,但我并不太担心。为什么?

这些比喻帮助我用矩阵思考,比我“拿到满分”的课程更有效。我终于可以回答“线性代数有什么用?”的问题,就像回答“电子表格有什么用?”一样。

除非你需要一个工具来解决几乎所有现实世界的问题,否则它们没有用。问一个商人,他们愿意捐一个肾还是永远被禁止使用Excel。这就是我们忽视的线性代数的影响:有效的符号将表格引入我们的数学方程。

祝你数学学习愉快。