What & How & Why

这是本文档旧的修订版!


Linear Transformations and Matrices

LAFF Week 2 Notes

本章的核心概念是理解线性变换,线性组合,以及矩阵与线性变换的关系。需要清楚的是,矩阵就是线性变换的 “具象化”,其本质也是 “Function”,即完成 “mapping” 的工作。

Linear Transformations

线性变换(Linear Transformations)可谓是线性代数的基础。什么是线性变换?从数学定义上来说,线性变换需要满足如下两个条件:

For all x,yRn x,y \in \mathbb{R}^n and aRa\in \mathbb{R},A vector function L:RnRmL: \mathbb{R}^n \to \mathbb{R}^m is said to be a Linear Transformation If:

L(ax)=aL(x)(I)L(ax) = aL(x) \tag{I} L(x+y)=L(x)+L(y)(II)L(x+y) = L(x) + L(y)\tag{II}
为什么如此强调线性变换?因为如果一个函数是线性变换,那么解这个函数就会比某些非线性变换的函数容易很多。很多情况下即便函数不是线性变换,我们也会将其近似为线性变换进行处理。一个例子就是我们使用定积分计算不规则图形的面积;我们用无穷个长方形拼凑在一起来近似这个图形的面积,这就是一种将函数转换为线性变换函数,从而方便解决实际问题的手法。

Linear Combinations

线性变换还有如下一个非常重要的充要条件性质:

L(αu+βv)=αL(u)+βL(v)L( \alpha u + \beta v ) = \alpha L( u ) + \beta L( v )

证明非常简单,直接利用线性变换定义中的性质就可以了。而得到的等式右边的结果,我们称为 x,yx,y 的线性组合(Linear Combinations)。从代数上来说,线性组合是线性变换的性质得到的结果,象征了不同向量通过不同线性变换得到的结果的集合。从几何上来理解,线性组合很可能是在表现某种特定的空间(本章未提及)。

线性变换与矩阵向量乘法

我们来看看矩阵和向量的乘法,是如何描述线性变换的:

第一步:先来看看向量。假设我们需要对向量 xx 进行线性变换,根据向量的定义我们可以把向量 xx 写成: x=(x0x1xn1) x= \begin{pmatrix} x_0\\ x_1\\ \vdots\\ x_{n-1} \end{pmatrix} 如果我们用单元向量来表示以上的向量,那么有:

(x0x1xn1)=x0(100)e0+x1(010)e1++xn1(001)en1=j=0n1xjej \begin{pmatrix} x_0\\ x_1\\ \vdots\\ x_{n-1} \end{pmatrix} = x_0 \underbrace{ \begin{pmatrix} 1\\ 0\\ \vdots\\ 0 \end{pmatrix} }_{e_0} + x_1 \underbrace{ \begin{pmatrix} 0\\ 1\\ \vdots\\ 0 \end{pmatrix} }_ {e_1} + \cdots + x_{n-1} \underbrace{ \begin{pmatrix} 0\\ 0\\ \vdots\\ 1 \end{pmatrix} }_{e_{n-1}} =\sum_{j=0}^{n-1}x_je_j

第二步:假设我们有线性变换 L:RnRmL : \mathbb {R}^ n \rightarrow \mathbb {R}^ m 。那么对于 L(x)L(x) 来说,我们就可以将其写成:

L(x)=L(x0e0+x1e1++xn1en1)=L(j=0n1xjej)(2.1)L(x) = L(x_0e_0 + x_1e_1 + \cdots + x_{n-1}e_{n-1} )= L(\sum_{j=0}^{n-1}x_je_j)\tag{2.1}

根据性质:

L(αu+βv)=αL(u)+βL(v)L( \alpha u + \beta v ) = \alpha L( u ) + \beta L( v )

那么上面的式子可以写成:

L(x)=x0L(e0)+x1L(e1)++xn1L(en1)=j=0n1xjL(ej) L(x) = x_0L(e_0) + x_1L(e_1) + \cdots + x_{n-1}L(e_{n-1}) = \sum_{j=0}^{n-1}x_jL(e_j)

第三步:现在我们将变换过的单元向量记做 aja_j,即L(ej)=ajL(e_j) = a_j。综合公式 2.1,可以得到如下式子:

L(x)=x0a0+a1a1++xn1an1 L(x) = x_0a_0+a_1a_1+\cdots+x_{n-1}a_{n-1}

换句话说,L(x)L(x)就被描述成了向量 xx 与另外一个向量组 (a0,a1,,an1)({a_0,a_1,\cdots,a_{n-1}}) 的点积。

那岂不是在说,LL 所代表的线性变换,其实就可以用向量组 (a0,a1,,an1)(a_0,a_1,\cdots,a_{n-1})表示吗?


这是一个超级重要的发现!不过还没有完,我们接着看矩阵是如何与这个向量组产生关联的。

第四步:我们将向量组 (a0,a1,,an1)({a_0,a_1,\cdots,a_{n-1}}) 中每一个分量都写出来,结果能得到一个二维的数组:

<html>

<img src=“/_media/math/math_note/laff/matrix_vec.svg” width=“300”>

</html>

根据之前的信息,我们知道,这个二维数组就是用于描述线性变换 LL 的。我们把这个二维数组称为矩阵,这是一种用于存储线性变换的,非常方便的手段。我们将矩阵记做 AA,因此之前提到的对于向量 xx 的线性变换,则可记做:

L(x)=AxL(x) = Ax


这在运算形式上,就是我们之前提到的矩阵与向量的乘法了。那这个需要怎么算呢?很简单。我们知道矩阵 AA 实际上是向量组 (a0,a1,,an1)({a_0,a_1,\cdots,a_{n-1}}) 中的向量展开所有分量的样子。因此矩阵 AA 与 向量 xx 的乘法,则是一个两步的复合计算:

  1. xx 与向量组(a0,a1,,an1)({a_0,a_1,\cdots,a_{n-1}}) 的点积
  2. xx 中的每个分量与(a0,a1,,an1)({a_0,a_1,\cdots,a_{n-1}}) 中对应向量进行 vector scaling 运算。

矩阵中的每一列,都代表着对原向量指定分量的变换规则。

完整的过程可以参考如下步骤:

Ax=L(x)=(a0a1an1)(χ0χ1χn1)=χ0a0+χ1a1++χn1an1=χ0(α0,0α1,0αm1,0)+χ1(α0,1α1,1αm1,1)++χn1(α0,n1α1,n1αm1,n1)=(χ0α0,0+χ1α0,1++χn1α0,n1χ0α1,0+χ1α1,1++χn1α1,n1χ0αm1,0+χ1αm1,1++χn1αm1,n1)=(α0,0α0,1α0,n1α1,0α1,1α1,n1αm1,0αm1,1αm1,n1)(χ0χ1χn1). \begin{array}{r c l} A x & = & L( x ) \\ & =& \left( \begin{array}{c | c | c | c} a_0 & a_1 & \cdots & a_{n-1} \end{array} \right) \left( \begin{array}{c} \chi _0 \\ \chi _1 \\ \vdots \\ \chi _{n-1} \\ \end{array} \right) \\ & =& \chi _0 a_0 + \chi _1 a_1 + \cdots + \chi _{n-1} a_{n-1} \\ & = & \chi _0 \left( \begin{array}{c c c c } \alpha _{0,0} \\ \alpha _{1,0} \\ \vdots \\ \alpha _{m-1,0} \end{array} \right) + \chi _1 \left( \begin{array}{c c c c } \alpha _{0,1} \\ \alpha _{1,1} \\ \vdots \\ \alpha _{m-1,1} \end{array} \right) + \cdots + \chi _{n-1} \left( \begin{array}{c c c c } \alpha _{0,n-1} \\ \alpha _{1,n-1} \\ \vdots \\ \alpha _{m-1,n-1} \end{array} \right) \\ & = & \left( \begin{array}{c c c c } \chi _{0} \alpha _{0,0} + \chi _{1} \alpha _{0,1} + \cdots + \chi _{n-1} \alpha _{0,n-1} \\ \chi _{0} \alpha _{1,0} + \chi _{1} \alpha _{1,1} + \cdots + \chi _{n-1} \alpha _{1,n-1} \\ \vdots \\ \chi _{0} \alpha _{m-1,0} + \chi _{1} \alpha _{m-1,1} + \cdots + \chi _{n-1} \alpha _{m-1,n-1} \end{array} \right) \\ & = & \left( \begin{array}{c c c c } \alpha _{0,0} & \alpha _{0,1} & \cdots & \alpha _{0,n-1} \\ \alpha _{1,0} & \alpha _{1,1} & \cdots & \alpha _{1,n-1} \\ \vdots & \vdots & & \vdots \\ \alpha _{m-1,0} & \alpha _{m-1,1} & \cdots & \alpha _{m-1,n-1} \\ \end{array} \right) \left( \begin{array}{c} \chi _0 \\ \chi _1 \\ \vdots \\ \chi _{n-1} \\ \end{array} \right) . \end{array}

线性变换的验证方法

  • 通过线性变换的性质验证
  • f(0)0f(0) \neq 0,则 ff 不是线性变换。

通过当前向量与变换后向量求矩阵

通过之前的知识我们了解到,矩阵描述了线性变换。因为有 L(ej)=ajL(e_j) = a_j,因此代表矩阵的向量组中每一个子向量,实际上是可以通过单元向量来求得的。也就是说,只要知道了单元向量 eje_j 在变换后的结果是多少,我们就能立马知道 eje_j 对应的 aja_j 是什么,也就是矩阵在原向量的这个分量上进行了什么样的变换;之后将所有的变换组成一个二维数组,就是我们希望求得的矩阵。而方便的是,我们甚至不需要知道具体的线性变换是什么,就能求的矩阵。

求矩阵就是求单元向量被变换了多少。
To find the matrix, you evaluate how the different unit basis vectors are transformed.

其他重要的知识点

  • 数学归纳法
  • 平移和旋转是两种不同的线性变换
  • 迭代算法的正确性认证

参考资料