实数和复数
我们会很想把这些关于特定方程的烦恼都丢在一边,直接声称我们已经知道实数是什么了——它们是所有可能的小数展开式组成的集合,包括正的和负的。这我们已经很熟悉了,在实际应用中大家也知道如何运用它们,因此我们觉得自己的位置是坚实的——至少在我们开始问一些很基本的问题之前。数的主要特点在于你可以加、减、乘和除。但是,举例来说,你怎样才能将两个无限不循环小数相乘呢?我们指望小数的长度有限,然后你就可以“从最右端开始”,但对于无限小数来说没有这样的东西。其实这是可以做到的,不过从理论和实际操作上讲它都很复杂。如果你解释如何加和乘都非常困难的话,这个数的系统似乎就不够令人满意。
你也许会觉得上面所提出的基本问题耐人寻味,或者你会对我们的自省感到不耐烦。毕竟,之前所有的航程都是一帆风顺的,我们似乎是在自找麻烦。但有一点是无法忽视的。数学家们认为,任何时候我们引入新的数学对象,重点是要从已知对象出发再构造它们,就像分数可以被看作一对普通整数。这样,我们能够仔细地定义新推广的系统所遵循的规则,从而了解自己所处的位置。倘若我们完全忽视基础,日后它便会出来找麻烦。例如,微积分学脱胎于对运动的研究,它发展得极快,并且获得了光辉的成就,比如预测行星的轨道。然而,像对待有限事物一样处理无限事物,有时候能赋予我们惊人的洞察力,有时候却完全没有意义。将数学系统建立在坚实的基础上,我们就能学会如何分辨真假。在实践中,数学家们经常沉迷于“形式化”(formal)的操作,这是为了能看清远方的海面上是否会浮现出崭新的定理。要是结果值得注意,我们就可以通过回溯基本概念和引用已经恰当地建立起来的结果,来严格地证明它。
这就是为什么尤利乌斯·戴德金(Julius Dedekind)要不辞辛苦形式化地构造实数系。现在,我们将他的思想称为实数轴的戴德金分割(Dedekind cuts)。不过,对于无理数存在性导致的两难问题,第一个成功提出解决方案的数学家是尼多斯的欧多克索斯(Eudoxus of Cnidus,他活跃于公元前380年)。借助于他所著的《比例论》(Theory of Proportions),阿基米德使用所谓的穷竭法(Method of Exhaustion)严格地推导出了弯曲形状的面积和体积,而这比微积分的发明早了大约1900年。
数的最后一块拼图——虚数单位
复数的算术可以在复平面(complex plane)内清楚地表示。我们将复数a+bi看作坐标平面内的点(a, b)。当我们将两个复数z = (a,b)和w = (c,d)相加时,我们只是将它们的第一和第二个元素分别相加,这给我们z+w=(a+c,b+d)。如果我们使用符号i,那么举个例子,我们就有(2+i)+(1+3i) = 3+4i。
这对应于平面上的向量和(vector addition),也就是有向线段(向量)首尾相加在一起(见图13)。在这个例子里,我们从坐标为(0, 0)的原点(origin)开始到点(2, 1)结束,画下第一个箭头。要加上(1, 3)代表的数,我们从点(2, 1)开始再画一个箭头,表示在水平方向(即实轴的方向)向右移动1个单位,以及在竖直方向(即虚轴的方向)向上移动3个单位,最终到达坐标为(3, 4)的点。用几乎同样的方法,我们可以通过实部和虚部分别相减来定义复数的减法。因此例如,(11+7i)-(2+5i) = 9+2i。这可以看作从向量(11, 7)开始,减去向量(2, 5),在点(9, 2)结束。
乘法就是另外一回事了。形式上说很容易:我们通过把括号拆开将两个复数相乘,记住i2=-1。假设乘法分配律(Distributive Law)仍然成立,这让我们能用通常的方法打开括号,那么乘法如下:
(a+bi)(c+di)=a(c+di)+bi(c+di)
=ac+adi+bci+bdi2=(ac-bd)+(ad+bc)i.
我们可以用一般化的复数,而不是具体的数值,来将复数相除的结果表示成普适的形式,它由两个数的实部和虚部构成,就像我们在复数乘法中做的一样。不过,只要理解了这一技巧,我们就不一定非要推出并记住最后的公式了。
我们如果把坐标系从普通的直角坐标转换成极坐标(polar coordinates),就会发现乘法有了一种几何解释。在这个系统中,一个点z依然由一个有序数对所确定,我们将其写作(r,θ)。数r是从原点O,在这里叫作极点(pole),到我们的点z的距离。因此r是一个非负的量,所有具有相同r值的点形成一个圆心在极点、半径为r的圆。我们用第二个坐标θ来表示z在这个圆上的位置,θ是从实轴到Oz这条线逆时针方向走过的角度。数r称为z的模(modulus,复数形式为moduli),而角度θ称作z的辐角(argument)。
假设现在我们有两个复数,z和w,它们的极坐标分别为(r1,θ1)和(r2,θ2)。我们发现,它们的积zw的极坐标有一个简单美妙的形式。组合的规则甚至可以用日常语言清晰地表述出来:积zw的模即z和w的模的乘积,而zw的辐角为z和w的辐角之和。用符号表示,zw的极坐标为(r1r2,θ1+θ2)。实数的乘法包含在这个更一般的规则里:比如,一个正实数r拥有极坐标(r,0)。如果我们乘上另一个数(s,0),结果是意料之中的(rs,0),对应于实数rs。
这个表示方式能够更充分地体现复数乘法的特点。复数单位i的极坐标是(1,90°)。通常,在这些情况下,我们并不用度数来度量角,而是用自然的数学单位弧度(radian):一个圆有2π弧度,因而转动一弧度相当于沿着中心在原点的单位圆的周长移动一个单位。一弧度大约是57.3°。假设我们现在取任意复数z=(r,θ),乘以i = (1, 90°),我们发现zi=(r,θ+90°)。也就是说,乘以i相当于绕着复平面的中心旋转一个直角。再换个说法,直角,这个最基本的几何思想,可以用一个数来表示。
的确,若是将复平面的一个给定区域内的所有点加上或乘以一个复数z,这一效果可以用几何方法来表示。想象平面内任意一个你喜欢的区域,如果给区域内的每一点都加上z,我们就只是将每个点都往同一个方向移动相同的距离,这个方向和距离是由z代表的箭头——或者我们经常说的向量——来决定的。也就是说,我们将这个区域平移(translate)到平面上的另一个位置,而它的形状、大小和姿态都保持不变,这里姿态不变是指该区域没有经过任何旋转或反射。但是,将你的区域中每个点都乘以z=(r,θ)则有两个效果,一个由r引起,另一个由θ造成。区域内每个点的模都增大r倍,因此该区域的所有尺寸也都增大了r倍(因而它的面积乘了因数r2)。当然,如果r<1,那么我们最好把这个“扩张”描述成收缩,因为新的区域会比原来的小。不过,区域将保持它的形状——例如,一个三角形会被映射为一个相似的三角形,它的各个角和以前一样大。θ的作用就像我们上面已经解释过的,是将区域沿逆时针方向绕极点转过角度θ。那么,将你的区域中所有点都乘上z的总效果是扩展区域,并绕极点旋转。新的区域将和之前的有同样的形状,但取决于r的大小,会有不同的尺寸,同时将会有一个不同的姿态,这是由旋转角θ决定的。
其他结果
复数有极多的应用,甚至是在很基础的层次上。直角坐标和极坐标的相互转换将三角函数引入了进来,这种应用方式既令人惊讶又有很多优点。例如,推导重要的三角恒等式是一道标准的学生习题,而在用了极坐标后这些等式是十分自然的结论,取任意单位模(即r=1)的复数,用直角坐标和极坐标分别计算它的某次幂,令这两种形式的答案相等,这就给出了一个三角方程。
由基本的三角学可知,极坐标为(1,θ)的点的直角坐标是(cosθ,sinθ)。如果我们现在将两个这样的复数z=cosθ+isinθ和w=cosφ+isinφ在直角坐标中相乘,可得:
zw=(cosθcosφ-sinθsinφ)+i(cosθsinφ+sinθcosφ).
同样的乘法在极坐标中给出:
对比该乘积的两个版本的实部和虚部,就可以轻松得到三角学中标准的和角公式:
或者,极坐标形式的复乘法可以由这些三角公式推导出。实际上,我们在这里未经证明就给出了极坐标形式下的乘法,它通常是将三角公式应用于直角坐标形式来推导出的。
复数和矩阵
乘以i代表绕复平面的中心转动一个直角,让我们来仔细研究一下这个事实所导致的一些结果。若z=x+iy,展开括号和对乘法重新排序,可得i(x+iy)=-y+ix,因此点(x,y)经过这个旋转变成了(-y,x),见图15。这样,乘以i可以看作在平面上对点操作。这一操作有一个特殊性质,即对于任意两点z和w,以及任意实数a,我们有i(z+w)=iz+iw,和i(aw)=a(iw)。
另外,如果我们将一个实数a乘上一个复数(x+iy),我们得a(x+iy) = ax+i(ay)。用复平面上的点来说,我们将(x, y)移动到了(ax, ay),或者用另一种方法写就是a(x, y) = (ax, ay)。
具有这两条性质的一类运算称为线性的(linear),它们在数学的所有领域都极其重要。这里,我只希望提醒你注意一个事实,那就是这样一个运算L的效果完全由它在两个点(1, 0)和(0, 1)上的行为决定。因为让我们假设L(1, 0) = (a, b)和L(0, 1) = (c, d),那么对于任何点(x, y),我们有(x, y) = x(1, 0)+y(0, 1),于是应用线性运算的性质,我们得到:
这些信息可以总结在所谓的矩阵方程(matrix equation)中:
这里我们举了矩阵相乘的一个例子,它展示了这样的运算在一般情况下如何进行。矩阵(matrix)是由数组成的矩形阵列,它代表了另一种二维的数的对象。矩阵渗透了高等数学的几乎所有领域,同时包括纯数学和应用数学。它们代表了代数学中的一个重要部分。矩阵已经被证明有用到什么程度呢?现代数学的很大一部分便是努力要将自己用矩阵的语言表达出来。两个有相同行数和列数的矩阵可以逐项相加。比如,要找到两个矩阵之和的第二行第三列的元素,我们只需要将两个矩阵中相应位置的元素相加。不过,乘法赋予了矩阵一个新的重要特点,前面这个例子已经体现出了矩阵乘法的规则——积矩阵中的每个元素都是第一个矩阵的某行与第二个矩阵中的某列进行点乘(dot product)得到的。这是说,第一个矩阵的某行元素与第二个矩阵的某列元素分别相乘后再相加。
矩阵遵循代数里通常的法则,除了乘法交换律(commutativity of multiplication)。也就是说对于两个矩阵A和B,一般来说AB=BA是不对的。然而,矩阵乘法是可结合的(associative),这意味着书写任意长度的矩阵连乘时,不需要括号也不会引起歧义。
平面上的线性变换(linear transformation)通常是指绕着原点的旋转、相对于通过原点的直线的反射、相对原点的扩大或收缩,以及所谓的剪切(shear,或者说搓,slanting)。剪切是指让点平行于一根固定的轴移动,移动的长度与每个点到固定轴的距离成正比,就类似于一本书的各页可以依次滑动那样。对于任意一连串这样的变换,其效果都可以通过将所有对应的矩阵乘在一起来体现,这会给我们一个单独的矩阵,它包含了所有这些变换依次执行之后的最终效果。就像我们已经看到的那样,得到矩阵的各行正是两个点(1, 0)和(0, 1)经过变换后得到的像。这两个点称为基向量(basis vector)。
现在,对于代表绕原点逆时针旋转直角的矩阵J,我们自然地认为它应该模仿乘以虚单位i时我们观察到的数的行为。因为点(1, 0)被转到了点(0, 1),类似地点(0, 1)移动到了(-1, 0),所以这两个新向量组成了矩阵J的行。将J平方可得一个矩阵,它的几何效果是把点绕原点转过2×90° = 180°。下面我们就通过乘法来计算这个矩阵。例如,要找出J2右下角的元素,我们取第二行和第二列的点乘,即(-1)×1+0×0 = -1+0 = -1。完整的计算如下:
矩阵I的行是(1 0)和(0 1),它是单位矩阵(identity matrix)。这么称呼是因为它就像数1一样,当乘另一个矩阵A时结果还是A。矩阵-I代表了绕原点半周,它的行为类似于-1,同时(-I)2 = I。所有这些性质的最终结果是,对于实数a和b,矩阵aI+bJ在加法和乘法的意义上很好地模仿了复数a+bi的行为,因此它给出了复数域的一个矩阵表示。对应于典型的复数a+bi的矩阵是
代表复数的矩阵是满足乘法交换律的。当然就像之前提到的,这并不能推广到所有矩阵的乘积。另一个矩阵会出问题的地方是并非所有矩阵都能“逆转”。对于大部分方阵A(一个行数和列数相等的矩阵),我们可能找到一个唯一的逆矩阵(inverse matrix)B,使得AB=BA=I。但是,逆矩阵存在与否,取决于一个单独的数。这个数与相应的方阵联系在一起,叫作它的行列式(determinant)。笼统地说,从矩阵的每行各取一个数,使它们占据不同的列,将它们相乘并赋予不同的符号,再将所有可能的这样的乘积相加,就得到了行列式。对于前文介绍的典型的2×2矩阵,行列式即为数Δ=ad-bc。行列式用处很多,它具有优良的性质。例如:Δ代表了对应的变换的面积缩放因数:一个面积为a的形状经过一个行列式为Δ的矩阵所对应的变换,会变为面积为Δa的形状(倘若Δ为负,这个形状还会经过一次反射,将原始的朝向颠倒过来)。另外,两个方阵乘积的行列式,是这些矩阵行列式的乘积。在Δ=0时,方阵A没有逆矩阵;除此情况之外,A有逆矩阵B。行列式为0在几何上对应于一个退化的(degenerate)变换,这时变换后得到的图形面积为0,比如说一条线段,甚至是一个单独的点。
对于一个复数z=a+bi的矩阵,我们注意到Δ=a2+b2,它永远不为0,除了z=0的时候。当然,以前0从来没有倒数,这在更广阔的复数的世界里也仍然适用。不过,这也确认了每个非零的复数都有一个倒数。
到这里,我们已经站在了一个广阔世界的边缘,前方是线性代数、表示论[1]以及它们在多元微积分里的应用。我们就不再往远处走了。但是,读者应该知道矩阵其实不仅仅适用于三维,还适用于n维空间,通常这是通过n×n大小的矩阵实现的。虽然这些阵列变得更大更复杂了,但是矩阵自己依然是一个二维的数值对象。
复平面以外的数
在两个重要的意义上,所有复数组成的域C是完备的(complete)。假设有一个复数的无穷数列,它的各项往越来越小的圆圈里聚集,圆圈的半径趋向于0,我们称这个数列是收敛的(convergent)。任何复数的收敛数列都趋近于一个极限复数。这对实数来说也是真的,但不适用于有理数——对于任何无理数,其相继的小数近似都代表了一个有理数的数列,这个数列趋近于一个有理数范围之外的极限。另外,C在代数意义上是完备的(或者说是封闭的),意思是可以证明,任何多项式方程p(z)=a+bz+cz2+…+zn=0都有n个(复数)解:z1, z2,…, zn,这使得p(z)自己可以彻底地因式分解为p(z)=(z-z1)(z-z2)-(z-zn)。
复数在这里和其他问题上获得了出人意料的成功,这在很大程度上消除了将数系进一步拓展到复平面以外的需求。事实上,要想构造一个范围更大的数字系统,从而在包含C同时又保留代数中所有的常规法则,这是不可能实现的。并且,只有两个推广的系统能做到保留一些代数结构,即四元数(quaternion)和八元数(octonion)。虽然它们的使用不如复数来得广泛,但是四元数在某些领域中得到了应用,比如三维计算机图形学。八元数可以看作一对四元数,它们不仅缺乏乘法的可交换性,甚至连乘法的可结合性质也丢失了。
一个四元数是形如z=a+bi+cj+dk的数,第一部分a+bi是一个普通的复数,同时两个四元数单位(quaternion unit)j和k满足j2 = k2 = -1。为了进行四元数的乘法,我们需要知道虚单位量如何相乘,这由以下规则决定:ij = k, jk = i, ki = j,不过反过来的积拥有相反的符号,比如ji = -k。其实,所有这些积都可以通过一个额外的方程:ijk = -1来推出。于是,四元数构成了一个增广了的代数系统,这个系统满足除乘法交换律以外的所有代数法则,失去交换律的原因在于上面提到的反向相乘时符号的变化。这个系统的相容性也可以通过2×2的矩阵表达来显示,不过这次我们不仅有实的元素,同时还允许出现复元素。数1再一次对应于单位矩阵I,但是单位量i, j和k则对应于矩阵:
而典型的四元数z有矩阵形式:
然而,这种将四元数表为矩阵的方法不是唯一的。其实,复数的矩阵表达也有其他等价的形式。甚至,表示四元数还可以不用复数,只不过这要以使用更大的矩阵为代价:四元数可以表为某些只含有实数的4×4矩阵。
有时我们需要进行一些运算,其结果却不能被现有的数系所容纳,对这类计算的需求催生了新类型的数和对旧系统的推广。每个文明都是从自然数开始的,涉及数的片段的计算产生了分数,涉及债务的计算引出了负数,以及正如毕达哥拉斯发现的,涉及长度的计算产生了无理数。并非所有关于数的事务都能用整数以及它们的比值来处理,虽然这一发现已经十分久远,但这个事实依然深刻又微妙。随着科学变得越来越复杂,所需要的数的系统也必须成熟起来,才能处理这些进展。科学家们一般不会异想天开地主动创造新的数系,相反,在一开始,这些新数常常是被不情愿地、犹豫不决地引进来,用以应付科研中遇到的难题。例如,虽然在19世纪就被引入,矩阵直到20世纪初才在量子力学中取得了不容置疑的地位,当时的科学家们遇到了一个形如q=AB-BA却又不为0的量。在其他可交换的数系中,q当然会是0,因此这里需要的是一种他们以前从没遇到过的数值对象:它们是矩阵。
现在,看起来似乎数学和物理的世界已经拥有足够多种类的数了。虽然还存在本书没有提到的数的类型,但是自20世纪上半叶以来,我们还不需要对数学和科学中常用的数进行大的改造。
本书中我们对数学进行了一次热气球观光之旅,伴随着以上的观察结果,我们也到该说再见的时候了。我们从地面出发,渐渐升到了空中,我希望从这个高度上,丰富多彩又神秘莫测的数的世界能够吸引读者朋友的注目。
全书完
[1] 数学中抽象代数的一支。