线性代数学习心得(一)矩阵乘法

转载地址:https://blog.csdn.net/ACM5100/article/details/88036414
线性代数属于应用数学,应用数学的特点就是应用的目的往往是很明确的。线性代数的目的就是研究向量空间,线性变换等问题。这些问题在很多领域都被广泛应用,特别是在计算机领域。图形学、游戏开发、VR等等。总之,线性代数是计算机学者的必经之路。

此博客是我在学习MIT的线性代数课程中所学到的心得体会。虽然之前我已经对线性代数有了一些浅显的认识。但是这远远不够,对其新的认识我将会以博客的方式记录下来。

那么,我又开始了。

1、向量以及向量乘矩阵

1.1向量

啥叫向量呢?物理中,我们会定义成有方向有有大小量。但是在数学的抽象思维中,向量是可以抽象成一个高维度的点。也可以说向量是一个向量空间的元素。但是这又涉及到啥是向量空间,在这里不多说,以后会对其详细探究。总之现在,你尽可以想像一个n维向量是一个n元的有序序列,也可以是n维空间的点。如果是一个点,那么它必须要有坐标:

例如三维空间某个向量a=\begin{bmatrix} a1\\ a2\\ a3 \end{bmatrix}\begin{pmatrix} x\\ y\\ z \end{pmatrix}   (右边的括号就是指该维度的名字,我给第一个维度叫x轴,第二个叫y轴,第三个是z轴),向量中的每一个数字都是向量在该维度延伸的量

1.2矩阵

矩阵其实是一门很复杂的学问,有一个数学分支就叫《矩阵论》。可见矩阵是一个很重要,而且很有挖掘空间的问题。这里只谈一谈我对矩阵的理解。

如果只是单纯的给出一个矩阵,我会把它看成多个向量。例如一个m*k的矩阵A=

我会认为这个矩阵由m个行向量组成,或者看成由k个列向量组成。

1.3矩阵乘向量

但是如果是给出矩阵乘向量,我会认为矩阵是一个函数,也就是一个映射。

为什么我要这么看呢?就像一个函数   f(x),向函数中输入一个x就会输出一个函数值。矩阵也是如此,我向矩阵输入一个向量(也就是矩阵乘向量)那么输出的也是一个向量。这就像对向量的一个映射。但是受MIT线性代数课的影响,我又有了新的认识。例如矩阵A=\begin{bmatrix} a11 &a12 &.. &a1k \\ ..& .. & .. &.. \\ am1& am2 &.. &amk \end{bmatrix}   向量b=      \begin{bmatrix} b1 \\b2\\ .. \\ bk \end{bmatrix}

Ab=\begin{bmatrix} a11*b1+a12*b2+...a1k*bk\\ a21*b1+a22*b2+...a2k*bk\\ ..\\ am1*b1+am2*b2+...amk*bk \end{bmatrix}

扫描二维码关注公众号,回复: 5491942 查看本文章

在我过往的认知中,矩阵乘法是一个函数,而且在这个函数中向量每行的值只与矩阵对应的行有关。也就是说b1只与a1j有关,bi只与aij有关。既然是函数,就存在数据丢失的可能,原本的向量b为k维,现在的向量是m维。m<=k,如果m<k那么说明有部分维度的数据压缩了,而且这种压缩是不可逆的那么这个矩阵也是不可逆的(以后会具体叙述)。想要了解这部分的原理,可以看我的离散数学第二篇,https://blog.csdn.net/ACM5100/article/details/87353395。

不过在吉尔伯特-斯特朗的讲解下,现在我又对其有了新的认知。

矩阵是多个向量,矩阵乘向量是对矩阵中的向量进行线性组合

例如:A=\begin{bmatrix} a11 &a12 &.. &a1k \\ ..& .. & .. &.. \\ am1& am2 &.. &amk \end{bmatrix}   矩阵A由k个列向量组成,分别是\begin{bmatrix} a11\\ a21\\ ..\\ am1 \end{bmatrix} \begin{bmatrix} a12\\ a22\\ ..\\ am2 \end{bmatrix} ...... \begin{bmatrix} a1k\\ a2k\\ ..\\ amk \end{bmatrix}这k个向量。A*b是对A当中的这些向量进行线性组合,向量b=\begin{bmatrix} b1\\ b2\\ ..\\ bk \end{bmatrix}中的数就是这些组合的参数。如下:

A*b=b1*\begin{bmatrix} a11\\ a21\\ ..\\ am1 \end{bmatrix} +b2*\begin{bmatrix} a12\\ a22\\ ..\\ am2 \end{bmatrix} +......+ bk*\begin{bmatrix} a1k\\ a2k \\ ..\\ amk \end{bmatrix}

相信常数乘以向量,以及向量的加法运算不需要我多说了。

我们都知道一个规则,无论是在做矩阵乘法还是矩阵乘向量运算时,左边矩阵的列必须等于右边的行。说道这里也许你已经知道为什么了,因为右边的无论是矩阵还是向量,都是对左边矩阵中向量的组合方式

2、矩阵乘法的理解

先来看看同济大学的《线性代数第六版》中是怎么写的。

乘积矩阵AB=C的(i,j)元Cij就是A的第i行与B的第j列的乘积。

也就是说:A是m*k的矩阵,A=\begin{bmatrix} a11 &a12 &.. &a1k \\ ..& .. & .. &.. \\ am1& am2 &.. &amk \end{bmatrix}    B是k*n矩阵 B=\begin{bmatrix} b11 &b12 &.. &b1n \\ ..& .. & .. &.. \\ bk1& bk2 &.. &bkn \end{bmatrix}       那么C是m*p矩阵     C=\begin{bmatrix} c11 &c12 & ... &c1n \\ ... &... &... &... \\ cm1 & cm2 & ... & cmn \end{bmatrix}

对于每一项 Cij=\sum_{x=1}^{k}aik*bkj           这种计算方式过于暴力而且不便于理解。

2.1向量的组合

上面我们已经谈到过矩阵乘向量时,向量就是对矩阵中每个向量的线性组合。那么我们在做矩阵乘以矩阵时也可以如此思考。

右边的矩阵同样是由多个向量组成,那么矩阵乘矩阵就是矩阵分别乘以多个不相干的向量。如下:

\begin{bmatrix} c11 \\ ... \\ cm1 \end{bmatrix}=A*\begin{bmatrix} b11 \\ .. \\ bk1 \end{bmatrix}          \begin{bmatrix} c12 \\ ... \\ cm2 \end{bmatrix}=A*\begin{bmatrix} b12 \\ .. \\ bk2 \end{bmatrix}       \begin{bmatrix} c1n \\ ... \\ cmn \end{bmatrix}=A*\begin{bmatrix} b1n \\ .. \\ bkn \end{bmatrix}

这样,我们再组合这些单独的向量,就变成了矩阵C。

谈到这里我们一直都在叙述,左边矩阵提供向量,右边矩阵提供组合方式的理解方法。其实我们反过来看也是行的同的。

我们可以认为,左边的矩阵提供组合方式,右边的矩阵提供向量。不过这个时候组合的不是列向量,而是行向量

如下:

同样矩阵A=\begin{bmatrix} a11 &a12 &.. &a1k \\ ..& .. & .. &.. \\ am1& am2 &.. &amk \end{bmatrix}    矩阵B=\begin{bmatrix} b11 &b12 &.. &b1n \\ ..& .. & .. &.. \\ bk1& bk2 &.. &bkn \end{bmatrix}

A*B=C    矩阵C=\begin{bmatrix} c11 &c12 & ... &c1n \\ ... &... &... &... \\ cm1 & cm2 & ... & cmn \end{bmatrix}

我们可以认为,A和B由行向量,例如B的行向量就是\begin{bmatrix} b11 &b12 &.. &b1n\end{bmatrix}      \begin{bmatrix} b21 &b22 &.. &b2n \end{bmatrix}  .......  \begin{bmatrix} bk1 &bk2 &.. &bkn\end{bmatrix}

这时我们把左矩阵,也就是A矩阵中的每个行向量作为组合的方式:

\begin{bmatrix} c11 &c12 &.. &c1n\end{bmatrix}=a11*\begin{bmatrix} b11 &b12 &.. &b1n\end{bmatrix}+a12*\begin{bmatrix} b21 &b22 &.. &b2n \end{bmatrix}+.....+a1k*\begin{bmatrix} bk1 &bk2 &.. &bkn\end{bmatrix}

\begin{bmatrix} c21 &c22 &.. &c2n\end{bmatrix}=a21*\begin{bmatrix} b11 &b12 &.. &b1n\end{bmatrix}+a22*\begin{bmatrix} b21 &b22 &.. &b2n \end{bmatrix}+.....+a2k*\begin{bmatrix} bk1 &bk2 &.. &bkn\end{bmatrix}

....

\begin{bmatrix} cm1 &cm2 &.. &cmn\end{bmatrix}=am1*\begin{bmatrix} b11 &b12 &.. &b1n\end{bmatrix}+am2*\begin{bmatrix} b21 &b22 &.. &b2n \end{bmatrix}+.....+amk*\begin{bmatrix} bk1 &bk2 &.. &bkn\end{bmatrix}

c的每一个行向量都可以通过右矩阵的行向量组合的方式计算

最后总结一下,我们认为矩阵相乘是矩阵中的向量进项线性组合。其中,一个矩阵作为向量组,一个矩阵作为组合方式。

共有两种方式组合:

1、右矩阵中的列向量作为组合方式,左矩阵的列向量作为向量组。

2、右矩阵中的行向量作为向量组,左矩阵的行向量作为组合方式。

2.2列向量*行向量

列向量A=\begin{bmatrix} a1\\ a2\\ a3 \end{bmatrix}     行向量B=\begin{bmatrix} b1 &b2 \end{bmatrix}         C=A*B=\begin{bmatrix} a1*b1 &a1*b2 \\ a2*b1& a2*b2\\ a3*b1 &a3*b2 \end{bmatrix}

相信列向量乘行向量很好理解,只是需要注意一个特点,结果C矩阵中的每个列向量的方向都是相同的,同样所有行向量也是相同方向。这点很好证明,就不赘述了。

另外还有一个我现在还没有理解清楚的结论

C=A*B    C等于A的各列与B的各行的乘积。例如:

A=\begin{bmatrix} a11 &a12 \\ a21&a22 \\ a31& a32 \end{bmatrix}      B=\begin{bmatrix} b11 &b12 \\ b21 & b22 \end{bmatrix}      A*B=\begin{bmatrix} a11\\ a21\\ a31 \end{bmatrix}* \begin{bmatrix} b11 &b12 \end{bmatrix}+\begin{bmatrix} a12\\ a22\\ a32 \end{bmatrix}*\begin{bmatrix} b21 & b22 \end{bmatrix}

这个计算方式我还不太理解,以后我再回来补,如果有人看到我的这个博客也可以评论我教教我,ヾ(o′▽`o)ノ°°谢啦。

2.3矩阵分块

矩阵是可以分块计算的,直接给出例子吧:

A=\begin{bmatrix} A1 &A2 \\ A3&A4 \end{bmatrix}      B=\begin{bmatrix} B1 & B2\\ B3& B4 \end{bmatrix}              注意这里的A1或是B1不是指的单个数字,而是指的一块矩阵。也就是说我把A分成4块,B分成4块。

C=A*B=\begin{bmatrix} C1 &C2 \\ C3& C4 \end{bmatrix}         C1=A1*B1+A2+B3  

我们把矩阵分块之后,矩阵依然可以把每一个块当做元素,遵循原来矩阵计算的规则

也就是说,C矩阵的某一块等于矩阵A的分块行乘以矩阵B的分块列

3、结语

矩阵乘法是我们理解矩阵的基础,更是重中之重。我们必须通过矩阵乘法来窥视矩阵的抽象意义,不然线性代数的学习是根本进行不下去的。下一篇线性代数我会写关于逆矩阵的问题,以及为什么矩阵可以解方程,也许你会看到和你平时不一样的理解。

猜你喜欢

转载自blog.csdn.net/glw0223/article/details/88363046