矩阵乘法的运算规则看似怪异、烦琐:
m行k列矩阵A和k行n列矩阵B的乘积矩阵AB是一个m行n列矩阵C,其位于第i行和第j列的元素cij是矩阵A第i行的总共k个元素和矩阵B第j列的总共k个元素的一对一依次乘积之和。
有没有想过,为什么要这样定义呢?
许多线性代数教材着眼于“算”,却鲜少对图景的整体把握。死记硬背之下,不少学生知其然而不知其所以然。本文试图从线性算子的复合,自然引出矩阵乘法规则。如果你能耐心读到最后,定会豁然开朗。
撰文|朱慧坚(玉林师范学院数学与统计学院副教授)、丁玖(美国南密西西比大学数学系教授)
所谓矩阵,就是个数为两个正整数m和n之积mn的数,像士兵列阵那样,按m行和n列排成一个上下和左右对齐的整齐长方形数组,左右两边再用一对方 (或圆) 括号括起来,表示这整体是一个数学对象。“矩阵”这一数学词汇由英国数学家西尔维斯特 (James Sylvester,1814-1897) 于1850年引进,其英文单词matrix源自拉丁语“子宫”一词,因为他认为矩阵是行列式的生成器。然而,矩阵概念的早期痕迹很早就出现在中国古代数学典籍如《九章算术》中,这是我们应该引以自豪的。在数学书里,矩阵通常用一个英文大写字母表示,然后用它对应的小写字母连带两个下标表示该矩阵中的一般或特殊元素,如A=[aij]表示一个矩阵,aij表示该矩阵位于第i行和第j列交点处的那个元素。在本文中,为了方便和具体起见,我们假定矩阵中的所有元素都是实数。
从19世纪中叶开始,矩阵理论迎来了系统发展时期。西尔维斯特和与他同时代的同胞数学家凯莱 (Arthur Cayley,1821-1895) ,以及稍晚的德国数学家弗罗贝尼乌斯 (Ferdinand Frobenius,1849-1917) ,是几大主要奠基者。例如,与实对称矩阵密切相关的实二次型理论中的“惯性定理”,就是西尔维斯特的杰作,矩阵理论中更广为人知的“凯莱-汉密尔顿定理( Cayley-Hamilton theorem) ”的重要结论是:任意一个方阵 (即行数等于列数的矩阵) 都满足它所对应的特征多项式方程,而弗罗贝尼乌斯研究了与特征多项式相关的特征值和特征向量。将给定矩阵代入特征多项式,就必须已经定义了矩阵的几个基本代数运算,包括矩阵的乘法。这些运算规则加上其他代数操作如“矩阵转置”,则由凯莱系统地加以引进。
像矩阵这样的数组好玩吗?当然好玩!它们是已有一百七十年左右历史的数学学科“矩阵理论”的主要“玩具”。矩阵理论作为一门学科,和理工科大学生必修的另一门课程微积分一样,在工程技术甚至社会科学中有无穷无尽的应用。在小学我们玩数,在中学我们主要也在玩数,当然有时也会玩一玩两行两列或三行三列的小型矩阵,以及对应的行列式。但是对于一般的m行n列矩阵,在中学玩它们还是略微早了一点 (当然少数超前学习的天才少年除外) ,只能在大学里的一门叫做“线性代数”的基础课上慢慢学、仔细学,学懂学透,最后才能把它变成解决实际问题的强大数学武器。
“不自然”的乘法规则
对于数,有两项基本代数运算,即加法和乘法,小学里翻来覆去练习的四则运算中的其他两种运算——减法和除法——实际上分别是加法和乘法的“逆运算”,而非独立的运算。数的加法可以直接推广到矩阵的加法。就像一般只能就同类物体的个数相加,只有同行数同列数的矩阵才可以相加,结果也是同样尺寸的矩阵,其中的每个元素都是相加矩阵对应位置的元素之和,这是最自然不过的矩阵加法,所有元素各就各位,公平合理。这个矩阵加法的定义特别简单,和高中解析几何中向量加法的做法一模一样,线性代数课堂上大概没有哪个学生会对此感到困惑不解。
然而,矩阵乘法的运算规则看上去似乎就不是那么“十分自然”的了,甚至不少学生第一次见到它的定义时会觉得相当繁琐,搞得迷惑不清,为了通过期末考试,只好死记硬背定义中的矩阵乘积计算公式:m行k列矩阵A和k行n列矩阵B的乘积矩阵AB是一个m行n列矩阵C,其位于第i行和第j列相交之处的元素cij是矩阵A的第i行的总共k个元素和矩阵B的第j列的总共k个元素的一对一依次乘积之和。用代数表达式写出来,就是:
cij=ai1b1j+ai2b2j+…+aikbkj,(1)
其中,表示行的下标i取从 1 到m 中的每一个自然数,表示列的下标j取从1到n中的每一个自然数。
无论是已经学过线性代数的大学毕业生还是本学期正在学的在校生,或者是以前从未接触过矩阵理论的读者,有没有想一想,为什么矩阵的乘法要有如上这番颇为复杂的定义?难道就不能像矩阵的加法那样如法炮制,将数的相乘直接推广?这个看起来最直截了当的矩阵乘法定义为 :对于行数和列数都一样的两个矩阵A和B,它们的乘积是个也有相 同行数和列数的矩阵C,其第i行和第j列的元素cij是A和B的第i行和第j列的元素之积aijbij。虽然这个看似简单的矩阵乘积确实有点用处 (例如可用于图像处理和机器学习等应用领域) ,否则它也不会被冠以法国数学家阿达马 (Jacques Hadamard,1865-1963) 和德国数学家舒尔 (Issai Schur,1875-1941) 的大名:“阿达马乘积”或“舒尔乘积”,然而它仅能在少数场所派用,几乎上不了线性代数的大学课本。为了不至于与应用最广的通常的矩阵乘积相混淆,此种有特殊用途的矩阵乘积一般以符 号⨀表 示。线性代数中还有其他以数学大人物名字命名的矩阵乘积,如“克罗内克乘积”,它的符号是⨂。克罗内克 (Leopold Kronecker,1823-1891) 是个家境富裕的德国数学家,以他名字命名的数学术语也同样“富有”,数目超过一打,最有名的是数学中常用到的“克罗内克德尔塔”, 即δij ,它的值当i=j时等于1,当i≠j时等于0。
这篇文章试图回答标题中的提问:矩阵乘法为什么是这样定义的?固然,数学中的名词定义都是人为的,有时它被定义得出乎意料以至于看似“随心所欲”,然而不合常理的定义绝不会有持久的生命力,早就被扫进了历史的垃圾箱。既然矩阵的乘法存在了至少一个半世纪,它就一定有其“任凭风吹雨打,我自岿然不动”的合理之处。我们的目标就在于论证它的合理性。
从函数到算子
为了绝大多数读者都能理解最终的回答,我们先复习中学里学过的函数概念。令人惊讶的是,这个概念在数学史上慢吞吞地进化了几百年,成就了当今最有价值的一个基本而又覆盖面极其广泛的名词。对于给定的任意两个非空集合X和Y,如果存在一个规则,记为f,使得在此规则下,对于X中的任一元素x,都有Y中的唯一一个元素y与之对应,则称f为定义在X上的一个函数,更完全的写法是f:X→Y,其定义域为X,对应于X中元素x的Y中的元素y称为函数f在x的值,记为y=f(x)。集合Y中的所有函数值的全体组成的集合称为f的值域,它是Y的一个子集。
这个定义实在是太优美了,因为它涉及到的X和Y是任意抽象集合,规则也可以是任意的,比我们生活中的“社会规则”的总和还要多,所以它能够包罗万象,用于数学的一切部门,甚至许多无关数学的地方。比如一个糖尿病患者一年内每天自测血糖,这就定义了一个“血糖值函数”,它的定义域是该年份的365天,值域是这一年内每天测得的血糖数值全体组成的某个有理数集合。现在,我们将函数的一般概念限制到更为特殊的情形,在这个情形中,集合X和Y取所谓的“欧几里得空间”。
什么是欧几里得空间?在初中我们就学过平面上的 笛卡尔xy-直角坐标系,在该坐标平面上,每一个几何点P都带上了两个坐标——分别称为P点的横坐标x和纵坐标y,通常用圆括号括起来,记成(x, y)。所有这些数对组成维数为2的欧几里得空间R2,其中两个数对的和被定义为对应坐标之和所构成的数对;而数 (也叫标量) 乘以数对的运算,就是将该数分别乘以数对坐标。在这两种自然且基本的代数运算下,R2成为一个“线性空间”,也被叫做“向量空间”,因为其中的每一个数对是一个2维向量。R2也叫2维的欧几里得空间。将平面坐标系增加一维变成空间坐标系,类似的向量加法和标量乘向量运算就定义了3维的欧几里得空间R3。这两个“低维”线性空间也是我们人类目光所能见到的几何对象,在平面解析几何和立体解析几何中扮演了关键角色。
好了,现在我们可以从中学的解析几何跨进大学的线性代数,
引进一般的n维欧几里得空间Rn,其基本思想依然如旧。这个线性空间中的所有n维向量是将n个实数排成一行(或排成一列),左右两端再用圆(或方)括号括起来形成的全部“n元组”,其中第i个数xi称为给定向量x=(x1,…,xn)的第i个分量。与R2和R3完全类似,Rn中任意两向量x=(x1,…,xn)及y=(y1,…,yn)的和向量x+y之各分量定义为x和y的对应分量之和,实数α和向量x的标量乘法结果也是向量,其分量为α和x的分量之积。
引进一般的维欧几里得空间,其基本思想依然如旧。这个线性空间中的所有维向量是将个实数排成一行 (或排成一列) ,左右两端再用圆 (或方) 括号括起来形成的全部“元组”,其中第个数称为给定向量的第个分量。与和完全类似,中任意两向量及的和向量之各分量定义为和的对应分量之和,实数和向量的标量乘法结果也是向量,其分量为和的分量之积。
有了这些预备性概念,我们回过头用函数的观点进一步讨论矩阵。 设A 是一个有m行n列的矩阵。 通过A我们给出一个规则f,它把n维欧几里得空间Rn中的每一个向量x=(x1,…,xn)变换 到m维 欧几里得空间Rm 中的一个向量y=(y1,…,ym)。 这个规则如下: 作 为“函数”f在向量x的“函数值”,向量的第个分量yi有代数表达式
yi=ai1x1+ai2x2+…+ainxn, i=1, 2,…, m。 (2)
如果把Rn和Rm中的上述行向量写法x和y由“行”转置成“列”,即分别看成有n行1列和m行1列的矩阵,则根据前文中矩阵乘法的定义,上面(2)式给出的把x映成y的函数关系可以紧凑地写成
y=Ax。 (3)
在线性代数这门学科中,这个由矩阵定义出的规则f习惯上不再叫做函数,而是称为“变换”或“算子”,也被说是“映射”,它们的英文分别是transformation, operator和mapping。其实这三个数学术语都是具有最抽象意义的函数概念在具体科目中的同义词而已。出于作者的偏爱,在本文中我们统一使用算子一词,并按照泛函分析中的约定俗成,将f改记为T,称之为将Rn映到Rm内的一个算子。算子T在向量x的值通常写成y=Tx,省去了用于一般函数值符号中的一对圆括号,非常简洁。
线性算子和矩阵表示
我们首先证明:算子T:Rn →Rm是一个“线性算子”。这是什么意思呢?它意味着T保持线性空间里的线性运算不变。这个概念实际上在初中代数里就有影子。考虑只有一个自变量x的线性函数y=f(x)=ax,其中a为一常数。那么对于任意两个数x1和x2以及任一数ξ,有
f(x1+x2)=a(x1+x2 )=ax1+ax2=f(x1)+f(x2)
f(ξx1)=a(ξx1)=ξ(ax1)=ξf(x1)。
如果把上面的初中生都知道的线性函数看成是由数a写出的一行一列矩阵[a]所定义的将1维欧几里得空间R1≡R映入R1的算子,则上面的演算清楚地说明它保持R1的线性运算不变。这样,我们有了线性算子的一般定义:如果算子T:Rn →Rm满足两个条件:
(i) 任给Rn中的两个向量x和y,都有T(x+y)=Tx+Ty;
(ii) 任给标量ξ和Rn中的向量x,都有T(ξx)=ξTx,
那么我们就称T是线性算子。
作为一个简单的练习,读者可以令A为一个有3行3列的矩阵,比如将1到9这九个数摆成三行三列,然后验证等式A(x+y)=Ax+Ay和A(ξx)=ξAx。这样我们就知道对任一m行n列矩阵A,由式子Tx=Ax定义的算子T:Rn →Rm是一个线性算子。反过来我们问:每一个线性算子T:Rn →Rm是否都确定一个有m行n列的矩阵A使得表达式Tx=Ax对Rn中的所有向量x都成立?如果能回答这个问题,那么几乎就能答出文章标题之问了。
回答上述问题的关键点是算子T的线性假设和一个细致观察:任何向量x=(x1,…,xn)都可以写成n个特殊向量 (它们构成 Rn 的所谓典范基) 的“线性组合”,且组合系数就是x的所有分量。将中文语言“翻译”成数学语言,就是
x=(x1,…,xn)=x1e1+x2e2+…+xnen , (4)
其中e1=(1,0, … ,0), e2 = (0,1,0, … 0), … ,en= (0, … 0,1)。当n=3时,e1, e2和e3分别是空间直角坐标系沿着x, y和z轴方向的单位坐标向量。
为了利用矩阵乘法的方便,我们把上面的向量x, e1,…,en都看成是列向量 (换言之,它们是m行1列的矩阵) 。令列向量v1=Te1, v2=Te2, …, vn=Ten,它们都是Rm中的向量。对于每一个j=1,…, n,将列向量vj从上到下的m个分量写为a1j, a2j, …,amj,那么,对任何属于Rn的列向量x,根据上面的分解式(4)以及T的线性假设,有
其中m行n列矩阵的第i行第j列元素是aij,也就是向量Tej的第i个分量。由此确定的矩阵A通常被叫做线性算子T在Rn的典范基{e1,…,en}和Rm的典范基{e1,…,em}下的矩阵表示,或简称为T的矩阵表示。
定义在欧几里得空间上线性算子的“矩阵表示”这个概念,可以直接延伸到将任一个有穷维线性空间X映入到另一个有穷维线性空间Y的一般线性算子T:X→Y上,在两个线性空间各自的“基底”之下,T拥有一个对应的矩阵表示。这就是为什么“矩阵理论”在研究有穷维线性空间之间线性算子理论的数学分支“线性代数”中,是个威力无穷的武器。顺便一提,如果将上一句中的“有穷维”换为“无穷维”,那就进入了更为广泛的数学领域:泛函分析。
至此,我们实际上证明了这样一个数学真理:对于固定的自然数m和n,所有的线性算子T:Rn →Rm组成的集合和所有的m行n列矩阵之集具有一一对应的关系。用更通俗的话来说,就是任给将Rn映入Rm的线性算子T都是由某个m行n列矩阵A确定的,即对Rn中所有的列向量x,恒有Tx=Ax。容易明白,不同的线性算子由不同的矩阵确定。反之,任给m行n列矩阵A,将n维列向量x映到m维列向量Ax 的算子T:Rn →Rm一定是一个线性算子。
复合线性算子
现在,我们可以比较轻松地回答本文标题提出的问题了。不过在此之前,我们还需要翻到中学的代数课本,复习在抽象函数定义后引进的复合函数概念。设X, Y以及Z为任意三个给定的非空集合。 令f:X→Y和g:Y→为给定的两个函数,则g和f的复合函数是这 样的一个函数h:X→Z,它在X中的任一元素x的值是函数g在f(x)的值,即h(x)=g(f(x))。 这时,我们将复合函数h记为g ∘ f,故有(g(∘ f)(x)=g(f(x))。 三个函数f:X→Y, g:Y→ 和h:Z→W的复合函数h ∘ g ∘ f:X→W由等式(h ∘ g ∘ f)(x)=h(g(f(x)))类似定义。 由此可见,复合函数的运算“∘”满足结合律,即(h ∘ g) ∘ f=h ∘ (g ∘ f)。
将一般的复合函数概念用于两个算子T:Rn →Rk和S:Rk →Rm,就得到S和T的复合算子S ∘ T:Rn →Rm,其在n维列向量x的值是(S ∘ T)x=S(Tx)。就像中学代数里讲到的断言“两个单调递增函数的复合函数也是单调递增的”证明极易,读者对断言“两个线性算子的复合算子也是线性算子”也应该不会感到困惑。如果有困惑,就请你抓起一支笔在白纸上写一写就证出来了,我们也就不必另费笔墨解释之。理解数学的两大法宝是:一用脑子想,二用笔纸画。
回到主题,既然线性算子都是由矩阵定义的,我们进一步推出断言:如果线性算子S:Rk →Rm是由m行k列矩阵A确定的,线性算子T:Rn →Rk是由k行n列矩阵B确定的,那么复合算子S ∘ T:Rn →Rm作为一个线性算子,也应该由一个m行n列矩阵C确定的。试问:矩阵C怎样通过矩阵A和B表达出来?我们将会知道,回答了这个问题,也就回答了文章标题提出的问题。
通过之前由线性算子获得它的对应矩阵表示所采用的办法,对于每一个j=1,…,n,我们已经知道矩阵C的第j列恰好就是列向量(S ∘T)ej=S(Tej)。因为Tej=Bej,而Bej就是矩阵B的第j列 (读者自己将B和ej乘一乘就会明白) 。这样,矩阵C的第j列就等于线性算子S在矩阵B的第j列这个向量的值。因为对Rk中的任意列向量z,都有Sz=Az,故
(S ∘T)ej=S(Tej)=A(B的第j列)。
根据矩阵和向量的乘法定义(3),上式表示,矩阵C的第j列的第i个分量cij有表达式
它恰好与公式(1)完全是一模一样的。因而线性算子T:Rn →Rk和线性算子S:Rk →Rm的复合线性算子S ∘T:Rn →Rm所对应的矩阵
C=AB,
其中A是S所对应的矩阵,B是T所对应的矩阵。由于结合律对线性算子的复合运算成立,而上面刚好证明了复合线性算子等同于对应的矩阵相乘,故矩阵的乘法运算也满足结合律,即对任何m行k列矩阵A,k行l列矩阵B,及l行n列矩阵C,等式(AB)C=A(BC)都成立。对此有疑问的读者不妨取三个两行两列的矩阵分别乘出(AB)C和A(BC)来验证一下。要知道在数学中,有意义的乘法运算基本上都满足结合律,如算术里数的乘法、线性代数里的矩阵乘法、傅里叶分析里的函数卷积等等等等,莫不如此。
在结束这篇文章之前,我们举一个简单的例子,让具体的数字计算代替前面的一般性论证,再次说明两个线性算子的复合算子的矩阵表示是各自矩阵表示的乘积,同时巩固我们获得的知识。令将R2映入自身的两个线性算子T和S分别有矩阵表示
根据本文所证,复合线性算子T ∘S:R2 →R2所对应的矩阵是
我们通过几个具 体的的2维向量(x, y)来验证上述结果。易见,向量(x, y)=(1, 0)被S映成向量(5,7),后者被T映成向量(19,43),它的转置恰好就是矩阵AB乘以将(1,0)转置后的列向量的结果:AB的第一列。同理,向量(x, y)= (0,1)被S映成向量(6,8),后者被T映成向量(22,50),它的转置恰好就是矩阵AB乘以将(0,1)转置后的列向量的结果:AB的第二列。最后,如果令向量(x, y)= (1,1),则它被S映成向量(11,15),后者被T映成向量(41,93),它的转置恰好就是矩阵AB乘以将(1,1)转置后的列向量的结果。
读者们,如果以前不甚清楚如下事实,估计现在你们已经懂得:为什么两个可以相乘的矩阵 (即第一个矩阵的列数等于第二个矩阵的行数) ,在复合函数的意义下,乘法的规则必须由公式(1)给出。
写于2024年9月25日星期三
本文转载自《返朴》微信公众号
《物理》50年精选文章