线性代数中,有那么几个神秘又神奇的东西,总是让初学它的人琢磨不透,无法理解。今天讨论线性代数中第二个既基本又神奇的东西:矩阵的乘法。
回想起我们中学的那个时代,从初中到高中,数学课的内容完完全全是初等数学,纯粹的向量思想在数学课上不占有一席之地,中学阶段只有学习物理或复数的时候才能接触一点向量的身影。即使在最应该体现向量思想威力的地方,也因为只讨论二维的简单情形而省略掉了,只剩下纯粹的从几何角度推导代数性质,比如,直线方程,不是用向量法推导直线方程的一般形式,而是用定比分点;两直线垂直的条件,不是用向量内积为零,而是通过斜率的关系,等等。在中学唯一能够从数学课本中接触到的线性代数知识就只有一点点的行列式的简介,从解二元和三元一次方程组引入的行列式,而且属于选学内容,课堂上是不讲的。我当时看了看,觉得真是多此一举,既然一次方程组的解都已经用系数的符号表示出来了,为什么还要用行列式重新表示一遍?表达的内容没变,只是换了一套看上去工整漂亮的写法,有什么意义呢?
在这样的背景下,我进入大学,接触到一门蛮不讲道理的学科–高等代数。本来高中时看到用行列式表示方程的解已经够无聊了,到大学还要把这种无聊继续深入下去。为了一个小小的方程组,不惜动用人类最高的智商来创造一个个精致的概念,又是逆序数又是行列式,又是克莱姆法则,倒是得到了一个很漂亮的结果,但它到底有多少实用和理论的价值?
后来矩阵被定义出来了,那更是个无聊的东西,方程组还是原来那个方程组,只是把系数和未知数一分离,马上就出现了一个新的概念–矩阵。难道就非得把系数单独抽取出来变成矩阵的形式才能用高斯消元法解方程?它不就是方程之间加加减减的过程吗,即便带着未知数又能有多大的妨碍呢?带着未知数就不能讨论方程组的通解了?还定义矩阵的乘积,又把方程组写成一个矩阵和一个向量的乘积,我当时觉得实在是吃饱撑的!方程组还是那个方程组,换一种写法有什么不同?我思考它的时候还是需要把它还原为方程组的样子,倒是费了二遍力。是谁第一个引入了矩阵的概念?他的原始动机到底是什么?他似乎只是为了形式上的化简,并没有引入什么新的观念。但是巧的是这个人的一个无聊发明,竟然发展出一门学科来!不光方程组可以归结为矩阵的乘积,就连二次曲线、二次曲面,也表示成矩阵乘积了,矩阵和它们的乘积系统慢慢地脱离了方程组的范围,开始向其它方向渗透了,并且充斥了数学的大部分江山。这一切是为什么?难道这一切都在矩阵发明者的预料之中?如果发明矩阵的人意识到矩阵将来必有这些重大作用,那么他是怎么想到矩阵的这些应用的?他真的如此天资聪明?如果不是这样,那他为什么要发明矩阵这个东西?难道仅仅是偶然?可是这偶然之举为什么后来又如此巧合地展开出这么多理论?这些问题至今还是想不通。
但是今天的话题只是讨论矩阵和矩阵乘积,所以刚才把话题扯远了。每当想起大一时的代数课,我都要发一些牢骚,可见当时代数给我的影响有多深远!
关于矩阵乘积,比较老旧思想的教材不介绍矩阵乘积有什么意义,为什么要引入矩阵的乘积,只是叙述无端的定义:两个矩阵 \( 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\) 的每一行的线性组合,从而证明这个不等式。但是,请问您是怎么从一大堆数的计算式子中看出这些关系的?我为什么就没看到?我不但没有看到,就算人家给我指出这种关系,我要想看清这些关系还是要费九牛二虎之力的。如果一个东西我理解起来感觉吃力,那么我会本能地考虑是否是我理解它的方式有问题,它应该还有另外一些更省力的理解途径,或者说,这个东西缺乏直观,如果我能直观地理解它,那么我就可以接受它。所以我想,还是应该有更加便捷的途径可以得到这些关系。其实这个不等式如果从映射复合的值域维数角度看应该是比较简单的,可惜的是当初除了矩阵,没有其它方式可以导出这个结果,向量空间的内容还没有学习到。
再比如,矩阵的分块乘法,为什么分块之后乘法的规则和把每一块看成数的乘法规则是一样的?
又比如,学过内积的坐标计算表达式后,学生会惊奇地发现,矩阵乘法的每个元素都是一个内积,为什么会是这样?内积和矩阵乘法之间为什么会有这么大联系?
面对这些问题,我知道很多人,包括很多老师都会告诉我,这些都是计算的结果,计算的过程书上写的明明白白,没必要去深究它背后有什么机理,只要能够确信这些结论,不用去管这些结论是如何得到的。
但是,我总是觉得,这样的推辞无异于填鸭式教育,蛮不讲理,让人生厌,甚至可能把一个曾经喜爱数学的人搞得从此厌恶这样的无理数学。因为第一,这些东西显得过于巧合了,计算无法解释这些巧合背后是否有更深层次的原因;第二,即使是计算得来的,还是无法解释这些计算的动机是什么,这些计算的结果是如何发现的?总应该有个自然点的理由能够说明为什么某人会去考察这些计算过程并得出结论的吧?总不能说一个人某一天没什么事情闲得无聊了就开始算,然后就发现了某些东西吧?他为什么就能看得那么远就知道他计算的东西最终能带给他不平凡的结果?告诉我一个东西却没有告诉我这个东西是如何发现的,那我怎么能有信心沿着前人的足迹向前探索呢?
今天分析当初的困难,多是因为没有整体思维,无法把矩阵当成一个整体来思考,见到向量可以想到那是空间中的一个箭头,但见到矩阵和矩阵乘法,完全想象不到它的整体是个什么东西,我只能想到它的每个元素就是一堆数经过一堆运算得到的结果。看到书上写的矩阵乘法,我的头脑里就出现了它的运算过程的动画:左边一横,右边一竖,左边一横,右边一竖,除此之外想象不到其他的东西了。听说某位数学家摆弄矩阵就像摆弄整数一样熟练,我当时也试图找到把矩阵当成一个整体的感觉,可是在没有空间直觉支持的情况下这种努力是见不到明显效果的。而且从前思考的都是低维空间的问题,对一维二维空间很熟悉,很少考虑高维空间的问题,对高维空间即不熟悉也不习惯,又没有外人指点矩阵代数究竟有什么几何意义,即使是在低维空间中,也没有用矩阵处理几何问题的经验,所以当时一直冷落代数。
现在觉得,为了培养高维空间对象的整体思维方式,一方面就是加强代数的几何直观,另一方面就是站在变换的角度统一抽象地处理矩阵,而不是仅仅把矩阵只当成一堆数的阵列,用线性变换的观点认识矩阵乘法,而不是把矩阵乘法当成一堆数又乘又加的运算。
基于这种原因,我们将以映射的观点重新认识矩阵与矩阵的乘法。
(待续)