将只停留在数值运算和公式的线性代数推进到可视化几何直观(Visual Geometric Intuition)的理解领悟上,本文为https://www.3blue1brown.com/的学习笔记。
线性代数中最基础,最根源的组成部分就是向量。
一般来说有三种看待向量的观点,看似不同却有所关联,分别为在物理学,数学,计算机上的观点。
从数学来说,它的本质就是通用和抽象,所以,数学家希望概括这两种观点
从几何方面思考向量,当遇到向量时,首先考虑一个箭头以及器落在某个坐标系中,比如x-y平面,并且箭头起点为原点,这里和物理学角度的不同,向量可以在空间中如何位置落脚(起点),但是在线性代数中向量(通常以坐标系中的原点为起点)
可以通过向量坐标来理解,一对向量坐标由一对数构成,这对数指导你如何从原点(向量起点)触发到达它的尖端(向量终点)
第一个数告诉你沿着x轴走多远,正数代表向右移动,负数代表向左移动
第二数告诉你在次之后沿着平行y轴的方向多远,正数代表向上移动,负数代表向下移动
为了把向量和点区分开,通常把向量竖着写,然后用方括号括起来
可以看成是在空间中的平移平行
也可以看出数轴上加法的一种扩展
总共走了四步
可以看成,向量长度的数乘(倍数),这种拉伸和压缩,有时还会改变向量方式(正负)的现象,也叫向量的缩放scaling
倍数,也称为标量scalars
数字在向量中的主要作用就是缩放变量
向量加法和向量数乘
线性代数给物理学家和计算机图形程序员提供了一种语言,让它们通过计算机能够通过数字来描述和操控几何。
本部分继续加深一个概念,为何向量加法与向量乘法是那么重要,并从始至终贯穿整个线性代数
i
与j
是xy
坐标系的“基向量(1,1)
”
也就是说当你把坐标看作标量时,基向量实际上就是这些标量缩放的对象
我们完成可以选择不同的基向量,获得一个合理的新坐标系
通过改变所选择的标量,你可以获得所有的二维向量。
这样一对新的基向量,同样允许我们一对数和二维向量之间自由转化,当时这种变换关系和之前的
i
冒和j
冒得变换关系完全不同
每当我们使用数字描述变量时,他都依赖于我们真在使用的基
两个数乘向量的和称为这两个向量的线性组合
空间中不共线的两个不为零向量都可以表示空间中的任意一个向量,写成符号语言就是:[Math Processing Error]
至于为什么被称为“线性”,有一种几何直观:如果你固定其中一个标量,让另一个标量自由变化,所产生的向量终点会描出一条直线
将所有可以表示为给定向量线性组合的向量的集合称为给定向量张成的空间
对于大部分二维向量而言,它们的张成空间是所有的二维向量的集合。
但当它们共线时,它们张成的空间就是终点落在一条直线上的向量集合
两个向量张成的空间实际是在问,仅通过向量加法与向量数乘这两种基础运算,你能获得的所有可能向量集合是什么
当你考虑一个向量时就把它看作一个箭头,当你考虑多个向量时,就把它们看作点。
在用上面的观点去考虑之前的情况
对于三维向量,它的张成的空间的概念就变得很有趣了
两个三维向量的张成的空间
这两个向量的张成的空间便是它们所有的线性组合,也就是缩放在相加之后所有可能得到的向量(上图绿色)
逐渐改变两个线性组合中的两个标量,把缩放后的向量相加,然后跟着最终的向量的终点走,这个终点会画出三维空间中某个过原点的平面,这个平面就是这两个三维向量的张成的空间
或者说所有落在这个平面上的向量的集合是这两个向量的张成的空间。
如果在加上第三个三维向量,那么它们的张成的空间是怎么样的呢?
三个向量线性组合的定义根之前定义的方法基本一致
选择三个标量,对三个向量分别进行缩放,然后把结果相加的到(绿色向量)
这三个向量的所有组合构成了它们张成的空间
如果第三个向量恰好落在前两个向量张成的空间的平面上,那么它们的张成的空间并没有发生改变,你还被困在这平面上。
换句话说,在线性组合中引入第三个向量并没有让你‘走的更远’
但是如果你随机选一个向量,它几乎不可‘能落在前两个向量所张成的平面中,在这种情况下,由于第三个向量指向不同的方向,我们就能得到所有得三维向量。
对于第三个向量已经落在前两个向量得张成的空间中或者两个向量恰好共线的情况,我们使用一些术语来描述它们,即一组向量中至少有一个是多余的,没有对张成的空间做出贡献。
你有多个向量,并且可以移除其中一个而不减小张成的空间,当这种情况发送时,我们称它们是“线性相关的”
另一种表示方式是其中一个向量可以表示为其他向量的线性组合,因为这个向量已经落在其他向量的张成的空间上了
如果使用的向量都对张成的空间做出贡献,那么就可以称他们为线性无关的
向量空间一组基的严格定义:
向量空间的一组基是张成该空间的一个线性无关向量集
变换本质是“函数”的一种花哨的说法,它介绍内容,并输出对应的结果。
变换和函数又有所不同,因为使用变换是在以特定的方式来可视化这一输入——输出的关系
一种理解“向量函数”的方法是使用运动
例如一个变换接收一个向量并输出一个向量,我们可以想象这个输入向量移动到输出向量的位置
线性代数限制在一种特殊类型的变换上,称为“线性变换”,这种变换更容易理解
直观的说,如果变换具有以下两条性质,我们便可以称他说线性的
- 直线在变换后仍然为直线,不能有所弯曲
- 原点必须保持固定
例如:
非线性变换:
直线弯曲了,不是线性变换
这也不是线性变换,因为它的原点发送变化了
这也叫仿射变换
线性变换:
保持网格平行且等距分布的变换
根据原点旋转
如何实现你给计算机一个向量坐标,它返回给你变换后的坐标?
答案是你只需要记住两个基向量
i帽
和j帽
变换后的位置
换句话说,向量v
是i帽
与j帽
的一个特定线性组合,那么变换后的向量v
也是变换后的i帽
和j帽
的线性组合,这意味着你可以通过变换后的i帽
和j帽
推出变换后的向量v
小结:
- 只要记录了变换后的i帽和j帽,我们就可以推断出任意向量在变换后的位置
- 一个二维线性变换仅由四个数字完全确定(变换后i帽和j帽的两个坐标)
通常我们把上面的坐标包装在2x2
的格子中,称它为2x2
矩阵
你可以把它的列理解为两个特殊的向量,即变换后的
i帽
和j帽
如果你有一个描述线性变换的2x2矩阵
,以及一个给定向量,想了解线性变换对这两个向量的作用,你只需要 取出向量坐标,分别于矩阵的特定列相乘,然后相加即可(这与缩放基向量在在相加的思想一致)
等同于矩阵乘法
下面使用直观的几何来理解
把矩阵列看作是变换后的基向量,把矩阵乘法看作它们的线性组合
例如将整个空间逆时针旋转90度,那么i帽便落在坐标(0,1)上,j帽落在坐标(-1,0)上,
如果想计算出任意向量在逆时针旋转90度后的位置,只需要把他和上面矩阵相乘即可
一个有趣的变换,在这个变换里i帽保持不变,使用矩阵第一列为(1,0),j帽移动到了坐标(1,1)上,所以矩阵第二列为(1,1)
注意:
如果变换后的i帽和变换后的j帽是线性相关的,意味着一个向量是另一个向量的倍数,那么这个线性变换,将各二维空间挤压到一个二维它们所在的一条直线上(也就是两个相关向量所张成的一维空间)
总之,线性变换是操作空间的一种手段,它保持网格线平行等距分布,并且保持原点不动。
严格意义上来讲,线性变换是将向量作为输入和输出的一类函数
这些变换只需要变换后的基向量便可以描述清楚,以这些坐标位列所构成的矩阵为我们提供了一种描述线性变换的语言
而矩阵向量的乘法就是计算线性变换作用于给定向量的一种途径
每当你看到一个矩阵时,你都可以把他解读为,对空间的一种特定变换(重重重点)
据我的经验,如果丢掉矩阵的话,那些涉及矩阵的证明可以缩短一半 ——埃米尔·阿廷
It is my experience that proofs involving matrices can be shortened by 50% if one throws the matrices out -Emil Artin
例如先进行旋转变换在进行剪切变换,则可见将这个变换称为,两个独立变换的复合变换
和其他线性变换一样,我们也可以通过追踪i帽和j帽,并用矩阵完全描述这个复合变换。
两个矩阵相乘的几何意义便浮现出来了
需要注意的是,上面的矩阵相乘需要从右往左读,首先应用右边矩阵所描述的变换,然后再应用左矩阵所描述的变换
通过先确定i帽来计算矩阵的乘法
例如矩阵相乘时可以交换位置吗,通过几何意义推导,比如上面的例子,如果先剪切再旋转,很明显它们的结果是不同的。
再例如通过矩阵乘法的几何理解去推到矩阵乘法的结合率(AB)C=A(BC)可以直观的发现它们是对的,而代替了数字推导的繁杂过程。
例如以三维向量为输入并以三维向量为输出(三维空间变换)
我们可以想象它在移动三维空间中的所有点(或网格)保持网格平行且等距分布,并保持原点不动
和二维线性变换一样,三维线性变换由基向量的去向完全决定(i帽,j帽,k帽),将变换后三个基向量的坐标记录在一个3x3的矩阵中。 这样就可以使用9个数字就可以描述三维向量的线性变换了。
对三维空间内扩展的话,你会发现,显示生活中的每一种形态改变都能用一个3*3
的矩阵来表示这个变换,这在机器人,自动化操作领域是非常重要的,因为你可以把现实生活很难描述的动作通过一个矩阵来表示,是一个连接数字和现实的重要桥梁和工具
计算的目的不在于数字本身,而在于洞察其背后的意义 ——理查德·汉明
The purpose of computation is insight, not numbers - Richard Hamming
我们注意到,有一些变换在结果上拉伸了整个网格,有一些则是压缩了,那如何度量这种压缩和拉伸呢?或者换一种更容易思考的表达,某一块面积的缩放比例是多少等
其实,根据我们之前讲的基向量,我们只需要知道i帽
和 j帽
组成的面积为1的正方形面积缩放了多少就代表所有的情况。因为线性变换有一个性质:网格线保持平行且等距分布
所以,这个特殊的缩放比例,即线性变换对面积产生改变的比例,就是行列式
比如说一个线性变换的行列式为6,那么就算是它将一个区域的面积增加为原来的6倍
特别的,我们可以发现,如果一个矩阵的行列式为0,意味着它把这个空间降维了(例如原本二维的变为了一维的线了),并且矩阵的列线性相关(倍数相关),
行列式是可以为负值的,正负表达的是方向,行列式的绝对值仍然表示区域面积的缩放比例,类似于纸的翻面,这个变换就相当于将纸翻到了另一面,我们称这样的变换改变了空间的定向。
j帽
起始状态在i帽
的左侧,如果经过变换,变为在右侧,就添加负号。三维情况下,右手定位为正
当i帽接近于j帽时,空间也就逐渐的被压缩,这意味着当i帽与j帽重合时,行列式为0。
依然是变换前后的缩放比例,不过这次它的是体积的缩放比例。
正方体转变为了平行六面体
。
这个正方体的体积开始为1,而行列式表示这个正方体的缩放比例
行列式为0,意味着整个空间被压缩为0体积的东西,也就是一个平面,一条直线,或者说是一个点。
三个三维向量行列式为负值时又代表着什么呢?
有一种方法来描述三维空间中的定义,那就是“右手定则”
如果行列式为正则可以使用右手定则,如为负,那么需要使用左手
为了连接行列式的计算公式和几何直观,我们假设b
c
为0,那么,a表示 i帽
在x轴
缩放比例,d表示 j帽
在y轴
缩放比例,ad
表示拉伸倍数,同理来说,bc
表示的就是压缩倍数,两者的和就是缩放比例。
提出正确的问题比回答它更难 ——格奥尔格·康托尔
To ask the right question is harder than to answer it - Georg Cantor
通过线性变换的视角来重新看逆矩阵,列空间,秩,零空间
它能用来描绘对空间的操控,这对计算机图形学学习很重要。
它被广泛应用的主要原因是它能帮助我们求解特定的方程组
矩阵A代表一个线性变换,所以求解A X ⃗ \vec{X} X = V ⃗ \vec{V} V 意味着去寻找一个向量 X ⃗ \vec{X} X,使得变换后与 V ⃗ \vec{V} V 重合
既然使用了 A
这个矩阵变换,那么之前讲解的概念:行列式应用在这里就很有意思了。根据之前提到的,行列式直观来说就是矩阵变换操作面积的缩放比例。我们可以思考,det(A)=0
意味着缩放比例为0
,即降维了。很大可能找不到解,唯一的可能性,比如平面压缩成直线,这个直线恰好落在 V ⃗ \vec{V} V 上才有解。这也是为什么计算行列式的值可以判断方程是否有解的几何直观
接下来思考如何求 X ⃗ \vec{X} X。应用逆向思考,从 V ⃗ \vec{V} V 出发,进行某一个矩阵变换,恰好得到 X ⃗ \vec{X} X 。而这个反过来的矩阵变换,就称为 A 矩阵的逆矩阵,写成公式是:
所谓逆,就是反过来的意思。根据基向量代表整个空间,已经变换过的 i帽
和ȷ帽
如何通过一个矩阵变换,变回 i帽
和 j帽
,这个矩阵就是逆矩阵 ,写作 A − 1 A^{-1} A−1,直观理解如下图
逆矩阵乘原矩阵等于恒等变换,写作 A A − 1 = I AA^{-1}=I AA−1=I 。$I $矩阵表示基向量,对角线元素为1,其余为0(矩阵说对角线,默认为左上方到右下方)
要想求解方程,你只需要将A逆与向量v相乘即可 A − 1 A X ⃗ = A − 1 V ⃗ A^{-1}A\vec{X}=A^{-1}\vec{V} A−1AX=A−1V ——> X ⃗ = A − 1 V ⃗ \vec{X}=A^{-1}\vec{V} X=A−1V
注意在降维的变换中没有逆变换(它们都对应行列式为0的情况)
秩代表变换后空间的维数
比如说,对于2x2的矩阵那么它的秩最大为2,当秩数小于向量的维数,那么可以说它在变换后被压缩了
如果变换后的向量在一条直线上,那么我们称这个变换为的秩为1,如果变换后的向量在一个平面上,那么我们称这个变换为秩为2
不管是一条直线,一个平面还是三维空间等,所有可能的变换结果的集合被称为”列空间“
矩阵的列告诉你基向量变换后的位置,这些变换后的基向量张成的空间就是所有可能的变换结果
列空间就是矩阵的列所张成的空间
所以更精确秩的定义就是列空间的维数
当秩达到最大时,意味着秩与列数相等(也称为满秩)
零向量一定包含在列空间中,因为线性变化必须保持原点位置不变,对于一个满秩变换来说,唯一能在变换后落在原点的就是零向量本身。对于非满秩变换,在变换后可能会有一些里点落在原点中
变换后落在原点的向量的集合就称为矩阵的”零空间“或”核“
对于线性方程组来说,当向量v恰好为零向量时,零空间给出的就是这个向量方程的所有可能的解
每个方程组都有一个线性变换与之联系,当逆变换存在时,你就能使用这个逆变换求解方程组,否则,列空间的概念让我们清楚什么时候存在解
零空间的概念有助于我们理解所有的解的集合是什么样的
在这个小测试里,我让你们求一个
2*3
矩阵的行列式。让我感到非常可笑的是,你们当中竟然有人尝试去做 ——佚名On this quiz, I asked you to find the determinant of a 2*3 matrix. Some of you, to my great amusement, actually tried to do this - no name listed
当你看到一个3x2
矩阵的时候,你就明白它的几何意义是将二维空间(原始空间有两个基向量)映射到三维空间上,因为矩阵有两列表明输入空间有两个基向量,有三行表示每个基向量在变换后都用三个独立的坐标来描述
同样的,当你看到一个2x3
的矩阵时,你觉得它代表上面?
矩阵有3列表明原始空间有三个基向量,也就是说原始空间是三维的,有两行表示这三个基向量在变换后都仅用两个坐标来描述,所以也就代表了从三维空间到二维空间的变换
从上面的示例,我们可以得到一个结论:n*m
的几何意义是将**m维空间(输入空间)映射到n维空间(输出空间)**上
由上面的理解及大学课程的学习,可以知道并不是任意两个非方阵都可以进行矩阵乘法,必须满足一些条件,例如,M1M2
(非方阵)计算中,假设 M2
为2×3
的矩阵(映射在三维空间中的二维),那么 M1
的列必须等于 M2
的行,否则这个乘法是没法计算的。
直观解释是:矩阵的行是这个变换的输出空间维数,而列是变换的输入空间维数。矩阵乘法从右向左读,第一个变换的 M2 的输出向量的维度3必须和第二个变换 M1 的输入向量( M1 的列)维度相等,才可以计算。
这里有一个很好玩的概念,非方阵的行列式呢?都不是一个维度的变换,如同归零者和咱们谈判一样,你和我谈缩放比例?不存在的
要深入的理解点积所发挥的作用,就需要从线性变换的角度去理解
点积的数学计算过程
这个计算的几何解释(投影为垂直投影)
- 当向量w和向量v的方向相反时,它们的点积的值为负的
- 当向量w和向量v的方向大致相同时,它们的点积为正的
- 当向量w和向量v相互垂直时,意味着一个向量在另一个向量的投影为零向量,它们的点积为零
点积与顺序无关,也就是,谁投影到谁上都是相同的
首先假设 向量v 和 向量w 长度相同,利用对称轴,两个向量互相的投影相等;
接下来如果你缩放其中一个到原来的两倍,对称性被破坏,但是缩放比例没变,最终乘法的结果也没变,一动图胜千言
直观的乘法与加法的组合运算:点积为何和投影长度的乘积有关?
假如一个线性变换[1,-2]
(1x2
从二维转到一维的变换),用来计算一个向量v
在变换后的向量
建立多维空间到一维空间的线性变换(描述为1×n
的矩阵,列代表对应的基向量压缩到一维空间的位置),即函数(自变量对应多维空间,f(x) 最后的输出为一维空间,也就是数轴上的点,一个确定的数)的概念。一动图胜千言
你会发现,
n×1
表示的是坐标和1×n
表示的多维到一维的变换(矩阵)之间有某种联系,即将向量转化为数的线性变换和这个向量本身有着某种关系
接下来,我们想象一个情景,这个被压缩成的一条线(数轴)放置在一个坐标系(二维空间)中,且空间所有向量都经过一个变换被压缩到这个数轴上。记这个数轴的单位向量为 u
再然后,我们需要考虑的问题变为,坐标系中的 i帽
与 j帽
是如何被压缩到这条直线上的呢(基向量表征整个空间的变换)?即求一个1×2
的矩阵内的值,第一列表示 i帽
变换后的位置(在这条数轴上),第二列表示 j帽
变换后的位置。
可以直接给出结论,这个变换的数值恰好就是向量u
在这个坐标系中的坐标 (ux
,uy
) ,推倒方法使用到了对称性,一动图胜千言
动图中的白色虚线就是对称轴,目的就是确定变换后 i帽
与 j帽
的位置,即描述变换的矩阵(列表示坐标,行表示变换)。
小结一下:我们有一个从二维空间到数轴的线性变换,它并不是由向量数值或点运算定义得到的。而是将通过空间投影到给定数轴上来定义得到的,但是因为这个变换是线性的,所以它必然 可以使用某个1x2的矩阵来描述,又因为1x2矩阵与二维向量相乘的计算过程和转置矩阵并求点积的计算过程相同,所以这个投影变换必然会与某个二维向量相关。
启发:你在任何时候看到一个线性变换,它的输出空间为一维数轴,无论它是怎么定义的
对偶性贯穿数学始终,在多个方面都有所体现
在数学中,对偶性定义为:两种数学事物之间自然而又出乎意料的对应关系。刚刚推导的内容是数学上“对偶性”的一个实例,即无论何时你看到一个二维到一维的变换,空间中会存在为一个向量 v与之相关
真正的叉积是在通过两个三维向量生成一个新的三维向量
叉积的结果不是一个数,而是一个向量,这个向量的长度为,叉乘向量的平行四边形的面积,这个向量与这个平行边形(所在的面)垂直(右手定则)
其中i,j,k
三个基向量后的数字就是对应向量叉积的坐标值
注:这里将向量写作矩阵的列,而教科书中大多数将向量写作矩阵的行,而这两种结果没有差异,因为装置不改变行列式的值。这里选择按列处理向量更为直观。
在开始前,先再次加深一次对偶性的概念:每当你看到一个**(多维)空间到数轴的线性变换时,它都与那个空间中的唯一一个向量对应**。即应用线性变换到某个向量和与这个向量点乘等价
恰好,叉积的运算过程给出了对偶性的一个绝佳的实例:根据 向量v 和 向量w 定义一个从三维空间到数轴的特定线性变换,找到这个变换的对偶向量,这个对偶向量就是 向量v 和 向量w 的叉积
首先,我们知道三维情况的,求一个3×3
矩阵的行列式,就是求这三个向量张成的平行六面体的体积,然后,把第一列(向量)换成一个自变量,后两列(两向量)记为 向量v 和 向量w ,那么我们就有
正真的三维向量接收两个向量并输出一个向量,而不是接收三个向量并输出一个数(这里注意不要搞混了)
向量v和向量w,向量变。那么我们就有一个从三维空间到数轴的函数了,你数如入一个三维向量(x,y,z)然后通过矩阵的行列式的到一个数。
这个函数是线性的
https://www.3blue1brown.com/
https://www.bilibili.com/video/av6731067/?p=4
https://www.bilibili.com/video/BV1ib411t7YR?spm_id_from=333.337.search-card.all.click