再谈矩阵与矩阵乘法

以前写了几篇相关的文章,见
《图示矩阵分块乘法》《理解矩阵与矩阵乘积(三)》《理解矩阵与矩阵乘积(二)》《理解矩阵与矩阵乘积(一)》
如果你从网上搜“理解矩阵”或“矩阵乘积”,还可以搜到孟岩写的系列文章《理解矩阵》以及很多其他作者写的文章。尽管经过很多人的努力,试图说清楚矩阵和矩阵的乘积的最本质的意义,这个问题似乎还在困扰着很多人。

我对矩阵和矩阵乘积的意义的认识,基本上在《图示矩阵分块乘法》中已经阐述,但之所以还要写这篇文章,是因为不论是我的文章,还是网络上其他相关文章,都没有做到把这个问题彻底讲清楚,我是学数学的,和很多其他学数学的人一样习惯上以数学抽象的概念去解释另一个概念,所以讲到矩阵总是会提向量空间,会提向量,但工科的学生往往是不会接触向量空间的概念,所以这种解释虽然我们看起来很直观,对工科的学生往往就很难理解了。还有一般的教材里都会讲到的从线性映射的复合的观点去定义矩阵的乘法,但仍然解释不清乘法规则的本质,尤其解释不了矩阵乘法为什么可以分块进行。

我博士的课题是研究随机矩阵,我的导师之一有无线通讯的背景,所以我有幸接触到一个能够更加直观阐释矩阵的概念和矩阵乘法规则的通讯模型,它虽然是个具体的模型,但我认为它有可能触及到了矩阵和矩阵乘法的最本质的东西。

如图一,考虑在 A 地建有一个发射站,其中有 n 个发射塔,B 地一个接收站,有 m 个接受塔。他们之间要传递的是一组由n 个数组成的信息 (x1,x2,…,xn),这样,这组信息可以由这n个发射塔同时发出,然后m个接收塔会同时收到它们发送过来的数据。

telecom
图一:无线通讯模型,发射-接收

但因为距离等因素的影响,每个发射塔发出的信息到不同的接收塔的过程中会有不同程度的衰减,比如第一个发射塔发出的信息x1到第一个接收塔就变成了 a11x1,等等,它们对应的关系可以列成一个方阵:

接收B\ 发射A    1             2             3         ……            n
1                     a11          a12         a13                       a1n
2                     a21          a22         a23                       a2n
…                     …..           ….          ….                         ….
m                    am1         am2         am3                     ann

这个对应关系的表格其实就是我们的矩阵了。有人可能觉得这只是形式上的对应关系,这些元素只是形式上构成了一个矩阵的形状,和我们数学上的矩阵有什么关系呢?矩阵的乘法在哪里呢?其实关系大得很。考虑一下发射站每发射一条信息 (x1,x2,…,xn),那么在接收站接收到的信息会是什么样子?比如第一个接收塔接到的是所有发射塔给它发的信息,那就是 y1=a11x1+a12x2+…+a1nxn,同理第二个接收塔收到的是 y2=a21x1+a22x2+…+a2nxn,等等。
如果凭直观感觉,如果很多发射塔同时发射信息,所有的接收塔收到的都是这些信息相互混杂的结果,似乎接收端很难分辨还原出原始的信息,就像一群人同时向另一群人喊话,每个人听到的只有混在一起的噪声,根本听不清谁到底说了什么,但是从数学上分析一下会发现,只要接收塔不比发射塔少,只要这个方阵的性质足够好,接收端就可以综合所有接收到的信息并计算还原出原始信息,这就是对线性方程组的研究得出的结论。

接下来考虑,如果B只是个中转站,它也要把它接受到的所有信息原封不动地传给C,那就是下图这样:

telecom2
图二:无线通讯模型:发射-中转-接收

那么C最后接到的信息会是什么样?如果像刚才那样分析从B到C的过程,那C接到的信息就是 z1=b11y1+b12y2+…+b1mym; z2=b21y1+…+b2mym,等等。但是,我现在想把B这个中转站从图中隐去,我想直接制定一个从A到C的发射-接收转换列表,我应该怎么制定呢?怎样才能把下面这个列表填完整呢?

接收C\ 发射A    1             2             3         ……            n
1                       ?
2

r

根据这个表中元素的定义,第一行第一列的元素(记为c11)应该是最原始的信息中的第一个元素 x1 被发射到最终位置C的第一个接收塔的过程中的衰减系数,而从图中不难看出,这个信息元 x1 首先经过一次衰减到达B的m个中转塔,也就有了 m 个分身a11x1, a21x1,…,am1x1,然后这m个分身又分别经过第二次衰减,并集合到C的第一个接收塔那里,于是变成了 a11b11x1+a21b12x1+…+am1b1mx1,那么自然就有
c11=a11b11+a21b12+…+am1b1m。
同理,A的第 i 个发射塔发出的信息要经过 B 的所有中转塔才能最终到达C处的第 j 个接收塔,这就是乘法矩阵中的 cij 要这样定义的原因。对应下面这个矩阵乘法BA的示意图:发射数据 xi 与矩阵 A 的第i列元素相乘之后到达 B 的 m 个中转塔,得到 yk=akixi,然后中转塔的这 m 个数据又分别和矩阵 B 的第 j 行元素乘积,并在 C 的第 j 个塔那里整合起来,于是就有了 cij 的又乘又加的表达式。
telecom3

这个模型里的通信模型只是用来帮助理解和想象,现实生活中有很多模型都可以体现这样的运算关系,比如把通信站换成物流公司,把信息换成货物,矩阵的元素换成路程或运输成本,这就变成了一个物流模型;把信息换成空间中的向量,每个通信塔换成空间的基底,这就能解释空间中的线性映射,等等。

下面接着用通信模型解释矩阵的分块运算。首先理解什么是矩阵的一个子块:让我们先回到(图一)的没有中转站而只有发射和接收站的情形,然后考虑,原有的系统支持n个信息同时发射,但假设我现在要发射的信息没有那么多,只有 m(<n) 个分量,那么我可以只用其中的m 个发射塔;同时因为发射的数据减少了,也就不需要那么多接收塔了,所以我可以把其中的一些发射塔和接收塔关闭。假设剩下的塔之间传递信息的转换关系不变,那么剩下的那些塔就是原来的一个子系统。因为有些塔不工作,所以我也无需考虑跟它们相关的衰减系数,我们把原来矩阵中所有和关闭的塔相关联的行或列都去掉,剩下的矩阵就是这个子系统对应的衰减系数矩阵。

这样就好解释了为什么矩阵分块的乘法也具有同样的运算法则:还是考虑(图二)描述的发射-中转-接收模型,但我们这次以不同的眼光看:我们把发射、中转和接收塔都分别编组,把一组通信塔看成一个整体,那么一个发射组+一个中转组+一个接收组就构成了一个子系统,它们中间的衰减矩阵自然是大矩阵里的子块;而如果我们对这些子系统进行分析,它们之间的传递关系自然和把它们当成单个通信塔的情形是一模一样的:以下是我以前的文章《图示矩阵分块乘法》里贴过的图,想象每个方格里是一组通信塔,再结合那篇文章中论述的向量空间的模型,就不难理解其中的道理了。
zrclip-003n7bdf3aa5.png

最后多说几句我对线性代数中“线性”的认识。我们上面所有的分析,都是在我们所描述的系统可以分拆这个假设的基础上的,也就是上面所说,假定它的任何一个子系统的运行状态不受系统其它部分的干扰,只有这样,我们才能把输入的原始信息分成若干分量,它们通过系统传递之后再进行整合;也只有这样,我们把系统进行分拆,分别研究各个子系统之后再进行综合才是有意义的。所以,线性代数就是拆拆合合的技术,“线性”是我们进行拆拆合合的基础。

图示矩阵分块乘法

在本博客文章《理解矩阵与矩阵乘积(三)》六、矩阵分块的实质中,已经提到过矩阵分块乘法是有清晰的几何意义的。写那篇文章的时候我的头脑中还浮现出一个图表,为什么矩阵乘法和分块的乘法有一样的计算规则,在图表中一目了然。但当时嫌画图太麻烦没有画出来。几个月过去了,那篇文章的浏览量也不小,但似乎那篇文章说得还不够清楚。因此这里把当时想到的图表补充进来。


图示:2×3与3×2分块矩阵的乘法

Continue reading

理解矩阵与矩阵乘积(三)

四、线性映射的复合

我们已经定义了行向量与列向量的乘法和矩阵与列向量的乘法,现在还差矩阵与矩阵的乘法没有定义。而矩阵与矩阵的乘法要与线性映射的复合联系起来。

设 \( U\)、\( V\) 和 \( W\) 分别为 r 维、n 维、m 维向量空间。\( g\) 和 \( f\) 分别是 \( U\) 到 \( V\) 和 \( V\) 到 \( W\) 的线性映射,那么易证两个线性映射的复合 \( f\circ g\) 也是线性映射。

取三个向量空间的基底,那么三个向量空间就有了坐标系统,如果知道了 \( f\) 和 \( g\) 在坐标系统下的表达式,即按前面所述,知道了它们对应的矩阵:\( f(v)=Av\),\( g(u)=Bu\),其中 \( A\) 为 \( m\times n\) 阶矩阵,\( B\) 为 \( n\times r\) 阶矩阵,那么 \( f\circ g\) 对应的矩阵是什么呢?

依据直观的推导,\( f\circ g(u)=f(Bu)=A(Bu)=ABu\),好像 \( f\circ g\) 对应的矩阵就是 \( A,B\) 两个矩阵的乘积,但是,我们目前并没有定义它们的乘积是什么,所以最后一个等号目前来讲还是没有意义的。

那么,我们就以求两个线性映射的复合映射所对应的矩阵为目的,定义两个线性映射的复合所对应的矩阵就是这两个映射对应矩阵的乘积,那么这个乘积如何来求呢?

Continue reading

理解矩阵与矩阵乘积(二)

本篇有些内容是孟岩《理解矩阵(三)》中观点的严密化与深化。

数域 \( \mathbf{F}\) 上的两个向量空间 \( U\) 到 \( V\) 的一个映射 \( \varphi\),若保持加法和数量乘法,即满足
\( \varphi(u_1+u_2)=\varphi(u_1)+\varphi(u_2)\)
\( \varphi(ku)=k\varphi(u)\)
则称 \( \varphi\) 为线性映射。

矩阵及矩阵的乘法与线性映射有十分重大的联系。为了看清这一点,我们采取以下步骤:

一、从一维空间谈起

Continue reading

理解矩阵与矩阵乘积(一)

线性代数中,有那么几个神秘又神奇的东西,总是让初学它的人琢磨不透,无法理解。今天讨论线性代数中第二个既基本又神奇的东西:矩阵的乘法。

回想起我们中学的那个时代,从初中到高中,数学课的内容完完全全是初等数学,纯粹的向量思想在数学课上不占有一席之地,中学阶段只有学习物理或复数的时候才能接触一点向量的身影。即使在最应该体现向量思想威力的地方,也因为只讨论二维的简单情形而省略掉了,只剩下纯粹的从几何角度推导代数性质,比如,直线方程,不是用向量法推导直线方程的一般形式,而是用定比分点;两直线垂直的条件,不是用向量内积为零,而是通过斜率的关系,等等。在中学唯一能够从数学课本中接触到的线性代数知识就只有一点点的行列式的简介,从解二元和三元一次方程组引入的行列式,而且属于选学内容,课堂上是不讲的。我当时看了看,觉得真是多此一举,既然一次方程组的解都已经用系数的符号表示出来了,为什么还要用行列式重新表示一遍?表达的内容没变,只是换了一套看上去工整漂亮的写法,有什么意义呢?

在这样的背景下,我进入大学,接触到一门蛮不讲道理的学科–高等代数。本来高中时看到用行列式表示方程的解已经够无聊了,到大学还要把这种无聊继续深入下去。为了一个小小的方程组,不惜动用人类最高的智商来创造一个个精致的概念,又是逆序数又是行列式,又是克莱姆法则,倒是得到了一个很漂亮的结果,但它到底有多少实用和理论的价值?

后来矩阵被定义出来了,那更是个无聊的东西,方程组还是原来那个方程组,只是把系数和未知数一分离,马上就出现了一个新的概念–矩阵。难道就非得把系数单独抽取出来变成矩阵的形式才能用高斯消元法解方程?它不就是方程之间加加减减的过程吗,即便带着未知数又能有多大的妨碍呢?带着未知数就不能讨论方程组的通解了?还定义矩阵的乘积,又把方程组写成一个矩阵和一个向量的乘积,我当时觉得实在是吃饱撑的!方程组还是那个方程组,换一种写法有什么不同?我思考它的时候还是需要把它还原为方程组的样子,倒是费了二遍力。是谁第一个引入了矩阵的概念?他的原始动机到底是什么?他似乎只是为了形式上的化简,并没有引入什么新的观念。但是巧的是这个人的一个无聊发明,竟然发展出一门学科来!不光方程组可以归结为矩阵的乘积,就连二次曲线、二次曲面,也表示成矩阵乘积了,矩阵和它们的乘积系统慢慢地脱离了方程组的范围,开始向其它方向渗透了,并且充斥了数学的大部分江山。这一切是为什么?难道这一切都在矩阵发明者的预料之中?如果发明矩阵的人意识到矩阵将来必有这些重大作用,那么他是怎么想到矩阵的这些应用的?他真的如此天资聪明?如果不是这样,那他为什么要发明矩阵这个东西?难道仅仅是偶然?可是这偶然之举为什么后来又如此巧合地展开出这么多理论?这些问题至今还是想不通。

但是今天的话题只是讨论矩阵和矩阵乘积,所以刚才把话题扯远了。每当想起大一时的代数课,我都要发一些牢骚,可见当时代数给我的影响有多深远!

关于矩阵乘积,比较老旧思想的教材不介绍矩阵乘积有什么意义,为什么要引入矩阵的乘积,只是叙述无端的定义:两个矩阵 \( A_{m\times n}, B_{n\times r}\) 的乘积定义为一个 \( m\times r\) 阶矩阵 C,C 的第 i 行第 j 列的元素是 A 的第 i 行和 B 的第 j 列元素分别相乘并相加的和,即 \[c_{ij}=\sum_{k=1}^n a_{ik}b_{kj}\]

稍微好一点的教材会介绍一些线性映射复合的背景:有三组未知数 \( x=(x_1,x_2,\dots,x_n)^T\)、\( y=(y_1,y_2,\dots,y_m)^T\) 和 \( z=(z_1,z_2,\dots,z_r)^T\),用 \( y_i\) 表示 \( z_i\) 的系数矩阵为 \( A\),用 \( x_i\) 表示 \( y_i\) 的系数矩阵为 \( B\),即
\( z=Ay, y=Bx\)
那么怎样用 \( x_i\) 来表示 \( z_i\)?
经过计算,\( z\) 的第 i 个分量 \( z_i\) 可以写成 \[z_i=\sum_{k=1}^m a_{ik} y_k=\sum_{k=1}^m a_{ik}\sum_{j=1}^n b_{kj} x_j=\sum_{j=1}^n(\sum_{k=1}^m a_{ik} b_{kj})x_j\]
即 \( z_i\) 表示成未知数组 \( x\) 的第 j 个分量 \( x_j\) 的系数是 \[\sum_{k=1}^m a_{ik} b_{kj}\] 因此定义两个矩阵 \( A\) 和 \( B\) 的乘积如上所述。

第一种讲述就是从第二种讲述的思想方法来的,却连定义的背景和来历什么的都没有讲,这显然是十分唐突的。况且这两种矩阵乘积定义的讲述都只是蛮力运算,如果只是为了定义出矩阵乘法的表达式,这两种讲述方式尚可接受,尤其是第二种讲法,提及了矩阵乘法就相当于两个线性变换的复合。但是接下来,要接触到矩阵乘法的更深层次的规律时,这样定义出的矩阵乘法就显得有些奇怪了。

比如,证明两个矩阵乘积的秩定理 \( \mathrm{rank}\,(AB)\le\mathrm{min}\{\mathrm{rank}\,A,\mathrm{rank}\,B\}\),乘积 \( AB\) 的每一列都是 \( A\) 的每一列的线性组合,每一行都是 \( B\) 的每一行的线性组合,从而证明这个不等式。但是,请问您是怎么从一大堆数的计算式子中看出这些关系的?我为什么就没看到?我不但没有看到,就算人家给我指出这种关系,我要想看清这些关系还是要费九牛二虎之力的。如果一个东西我理解起来感觉吃力,那么我会本能地考虑是否是我理解它的方式有问题,它应该还有另外一些更省力的理解途径,或者说,这个东西缺乏直观,如果我能直观地理解它,那么我就可以接受它。所以我想,还是应该有更加便捷的途径可以得到这些关系。其实这个不等式如果从映射复合的值域维数角度看应该是比较简单的,可惜的是当初除了矩阵,没有其它方式可以导出这个结果,向量空间的内容还没有学习到。

再比如,矩阵的分块乘法,为什么分块之后乘法的规则和把每一块看成数的乘法规则是一样的?

又比如,学过内积的坐标计算表达式后,学生会惊奇地发现,矩阵乘法的每个元素都是一个内积,为什么会是这样?内积和矩阵乘法之间为什么会有这么大联系?

面对这些问题,我知道很多人,包括很多老师都会告诉我,这些都是计算的结果,计算的过程书上写的明明白白,没必要去深究它背后有什么机理,只要能够确信这些结论,不用去管这些结论是如何得到的。

但是,我总是觉得,这样的推辞无异于填鸭式教育,蛮不讲理,让人生厌,甚至可能把一个曾经喜爱数学的人搞得从此厌恶这样的无理数学。因为第一,这些东西显得过于巧合了,计算无法解释这些巧合背后是否有更深层次的原因;第二,即使是计算得来的,还是无法解释这些计算的动机是什么,这些计算的结果是如何发现的?总应该有个自然点的理由能够说明为什么某人会去考察这些计算过程并得出结论的吧?总不能说一个人某一天没什么事情闲得无聊了就开始算,然后就发现了某些东西吧?他为什么就能看得那么远就知道他计算的东西最终能带给他不平凡的结果?告诉我一个东西却没有告诉我这个东西是如何发现的,那我怎么能有信心沿着前人的足迹向前探索呢?

今天分析当初的困难,多是因为没有整体思维,无法把矩阵当成一个整体来思考,见到向量可以想到那是空间中的一个箭头,但见到矩阵和矩阵乘法,完全想象不到它的整体是个什么东西,我只能想到它的每个元素就是一堆数经过一堆运算得到的结果。看到书上写的矩阵乘法,我的头脑里就出现了它的运算过程的动画:左边一横,右边一竖,左边一横,右边一竖,除此之外想象不到其他的东西了。听说某位数学家摆弄矩阵就像摆弄整数一样熟练,我当时也试图找到把矩阵当成一个整体的感觉,可是在没有空间直觉支持的情况下这种努力是见不到明显效果的。而且从前思考的都是低维空间的问题,对一维二维空间很熟悉,很少考虑高维空间的问题,对高维空间即不熟悉也不习惯,又没有外人指点矩阵代数究竟有什么几何意义,即使是在低维空间中,也没有用矩阵处理几何问题的经验,所以当时一直冷落代数。

现在觉得,为了培养高维空间对象的整体思维方式,一方面就是加强代数的几何直观,另一方面就是站在变换的角度统一抽象地处理矩阵,而不是仅仅把矩阵只当成一堆数的阵列,用线性变换的观点认识矩阵乘法,而不是把矩阵乘法当成一堆数又乘又加的运算。

基于这种原因,我们将以映射的观点重新认识矩阵与矩阵的乘法。

(待续)