线性代数属于应用数学,应用数学的特点就是应用的目的往往是很明确的。线性代数的目的就是研究向量空间,线性变换等问题。这些问题在很多领域都被广泛应用,特别是在计算机领域。图形学、游戏开发、VR等等。总之,线性代数是计算机学者的必经之路。
此博客是我在学习MIT的线性代数课程中所学到的心得体会。虽然之前我已经对线性代数有了一些浅显的认识。但是这远远不够,对其新的认识我将会以博客的方式记录下来。
那么,我又开始了。
1、向量以及向量乘矩阵
1.1向量
啥叫向量呢?物理中,我们会定义成有方向有有大小量。但是在数学的抽象思维中,向量是可以抽象成一个高维度的点。也可以说向量是一个向量空间的元素。但是这又涉及到啥是向量空间,在这里不多说,以后会对其详细探究。总之现在,你尽可以想像一个n维向量是一个n元的有序序列,也可以是n维空间的点。如果是一个点,那么它必须要有坐标:
例如三维空间某个向量 (右边的括号就是指该维度的名字,我给第一个维度叫x轴,第二个叫y轴,第三个是z轴),向量中的每一个数字都是向量在该维度延伸的量。
1.2矩阵
矩阵其实是一门很复杂的学问,有一个数学分支就叫《矩阵论》。可见矩阵是一个很重要,而且很有挖掘空间的问题。这里只谈一谈我对矩阵的理解。
如果只是单纯的给出一个矩阵,我会把它看成多个向量。例如一个m*k的矩阵A=
我会认为这个矩阵由m个行向量组成,或者看成由k个列向量组成。
1.3矩阵乘向量
但是如果是给出矩阵乘向量,我会认为矩阵是一个函数,也就是一个映射。
为什么我要这么看呢?就像一个函数 f(x),向函数中输入一个x就会输出一个函数值。矩阵也是如此,我向矩阵输入一个向量(也就是矩阵乘向量)那么输出的也是一个向量。这就像对向量的一个映射。但是受MIT线性代数课的影响,我又有了新的认识。例如矩阵 向量
在我过往的认知中,矩阵乘法是一个函数,而且在这个函数中向量每行的值只与矩阵对应的行有关。也就是说b1只与a1j有关,bi只与aij有关。既然是函数,就存在数据丢失的可能,原本的向量b为k维,现在的向量是m维。m<=k,如果m<k那么说明有部分维度的数据压缩了,而且这种压缩是不可逆的那么这个矩阵也是不可逆的(以后会具体叙述)。想要了解这部分的原理,可以看我的离散数学第二篇,https://blog.csdn.net/ACM5100/article/details/87353395。
不过在吉尔伯特-斯特朗的讲解下,现在我又对其有了新的认知。
矩阵是多个向量,矩阵乘向量是对矩阵中的向量进行线性组合。
例如: 矩阵A由k个列向量组成,分别是这k个向量。A*b是对A当中的这些向量进行线性组合,向量中的数就是这些组合的参数。如下:
相信常数乘以向量,以及向量的加法运算不需要我多说了。
我们都知道一个规则,无论是在做矩阵乘法还是矩阵乘向量运算时,左边矩阵的列必须等于右边的行。说道这里也许你已经知道为什么了,因为右边的无论是矩阵还是向量,都是对左边矩阵中向量的组合方式。
2、矩阵乘法的理解
先来看看同济大学的《线性代数第六版》中是怎么写的。
乘积矩阵AB=C的(i,j)元Cij就是A的第i行与B的第j列的乘积。
也就是说:A是m*k的矩阵, B是k*n矩阵 那么C是m*p矩阵
对于每一项 Cij= 这种计算方式过于暴力而且不便于理解。
2.1向量的组合
上面我们已经谈到过矩阵乘向量时,向量就是对矩阵中每个向量的线性组合。那么我们在做矩阵乘以矩阵时也可以如此思考。
右边的矩阵同样是由多个向量组成,那么矩阵乘矩阵就是矩阵分别乘以多个不相干的向量。如下:
这样,我们再组合这些单独的向量,就变成了矩阵C。
谈到这里我们一直都在叙述,左边矩阵提供向量,右边矩阵提供组合方式的理解方法。其实我们反过来看也是行的同的。
我们可以认为,左边的矩阵提供组合方式,右边的矩阵提供向量。不过这个时候组合的不是列向量,而是行向量。
如下:
同样矩阵 矩阵
A*B=C 矩阵
我们可以认为,A和B由行向量,例如B的行向量就是 .......
这时我们把左矩阵,也就是A矩阵中的每个行向量作为组合的方式:
....
c的每一个行向量都可以通过右矩阵的行向量组合的方式计算。
最后总结一下,我们认为矩阵相乘是矩阵中的向量进行线性组合。其中,一个矩阵作为向量组,一个矩阵作为组合方式。
共有两种方式组合:
1、右矩阵中的列向量作为组合方式,左矩阵的列向量作为向量组。
2、右矩阵中的行向量作为向量组,左矩阵的行向量作为组合方式。
2.2列向量*行向量
列向量 行向量
相信列向量乘行向量很好理解,只是需要注意一个特点,结果C矩阵中的每个列向量的方向都是相同的,同样所有行向量也是相同方向。这点很好证明,就不赘述了。
另外还有一个我现在还没有理解清楚的结论
C=A*B C等于A的各列与B的各行的乘积。例如:
这个计算方式我还不太理解,以后我再回来补,如果有人看到我的这个博客也可以评论我教教我,ヾ(o′▽`o)ノ°°谢啦。
2.3矩阵分块
矩阵是可以分块计算的,直接给出例子吧:
注意这里的A1或是B1不是指的单个数字,而是指的一块矩阵。也就是说我把A分成4块,B分成4块。
C1=A1*B1+A2+B3
我们把矩阵分块之后,矩阵依然可以把每一个块当做元素,遵循原来矩阵计算的规则。
也就是说,C矩阵的某一块等于矩阵A的分块行乘以矩阵B的分块列。
3、结语
矩阵乘法是我们理解矩阵的基础,更是重中之重。我们必须通过矩阵乘法来窥视矩阵的抽象意义,不然线性代数的学习是根本进行不下去的。下一篇线性代数我会写关于逆矩阵的问题,以及为什么矩阵可以解方程,也许你会看到和你平时不一样的理解。