较“软”性的科学——比如生物学和经济学中,也充斥着各种数学模型,这些模型都远比它们所要真正表示的现象简单得多,甚至以某些方式刻意地使其不够精确,但是这些模型还是有其用场、富于启发性。就以一个在经济学上有重要意义的生物学问题为例,我们来考虑预测一国未来20年的人口。我们可能会用到一种非常简单的模型,即将全国人口表示为一组数对(t,p(t)),其中t表示时间,p(t)表示时刻t的人口规模。另外我们要用到两个数b和d,来表示出生率和死亡率。所谓出生率和死亡率,即每年出生人数和死亡人数占总人口的比例。
假设我们已知2002年初的总人口是p。根据上述模型,2002年的出生人数和死亡人数将分别为bp和dp,因此2003年初的总人口将为p+bp-dp=(1+b-d)p。其他年份亦然,因此我们就能够写出公式p(n+1)=(1+b-d)p(n),意即n+1年年初的人口是n年年初人口乘以(1+b-d)。换句话说,每一年人口数量都会乘上(1+b-d)。那么20年后的人口就是乘以(1+b-d) 20 ,于是就得出了初始问题的答案。
这个模型已经比较好了,它能向我们证明,如果出生率明显高于死亡率,那么人口就会急剧增长。但即便如此,它也还是不够现实的,它作出的预测可能很不精确。比方说,模型中假设出生率和死亡率在20年中都保持不变,这并不太可信。过去的事实已经证明,出生率和死亡率经常会受到社会变迁和政治事件的影响,如医学进步、新型疾病出现、女性首次生育年龄增大、税负激励以及偶尔发生的大规模战争等等。生育率与死亡率会随时间变化还有另一个原因,就是一国国民的年龄分布可能相当失衡。比方说,15年前出现了一波婴儿潮,那么我们就有理由预期再过10年到15年出生率就会增加。
因此,通过引入其他因素来使模型复杂化,这个想法相当诱人。我们记出生率和死亡率分别为b(t)和d(t),使其可以随时间变化。我们并不想单用一个数字p(t)来表示总人口,我们可能想要知道不同年龄层各有多少人。如果同时还能尽可能多地知道各个年龄层的社会态度和行为倾向,也会对预测未来的出生率和死亡率有所帮助。获取这样的统计信息是十分昂贵且困难的,但这些信息确实能够大幅提高预测的精度。因此,没有一模种模型能够脱颖而出,声称比其他模型都好。关于社会和政治型的变迁,谁也不可能确切地说出情况会是什么样子。关于某种模型,我们所能提出的合理问题,最多只能是问某种有条件的预测,也就是说模型只能告诉我们,这样的社会或政治变迁如果发生的话会产生怎样的影响。
气体动理论由丹尼尔·伯努利在1738年提出,后来又由麦克斯韦、玻尔兹曼等人在19世纪后半叶推进。根据这种理论,气体是由运动着的分子组成的,气体的许多性质——如温度和压强,都是这些分子的统计属性。譬如,温度就对应着分子的平均速度 。
有了这样的想法之后,让我们设想一种模型来描述方盒子中的气体。这个盒子当然应该用一个立方体来表示(意即数学的而非物理的)。既然分子是非常小的,那么用立方体中的点来表示也就很自然了。这些点应当是运动的,所以我们必须确定控制它们运动的规则。此时,我们需要作出一些选择。
如果盒中只有一个分子,那么规则可以很明显:分子以恒定速度运动,撞到盒子壁面时就反弹出去。要将这种模型推广到包含N个分子的情形(N是个较大的数),最简单的办法就是假设分子都遵从这样的运动规则,分子之间绝对没有相互作用。为了启动这样的N分子模型,我们要选择分子(或者说,表示它们的那些点)的初始位置及初始速度。随机选择是一种好办法,因为我们可以预期,在任意时刻,真实气体中的分子都在空间中弥散着,运动方向也各式各样。
图3 气体的二维模型
要说清在立方体中随机取一个点并不困难,随机的运动方向也不复杂,但如何随机地选择速率就有些含混了,因为速率可以取从0到无穷大的任意值。为了避免这个困难,我们可以作一个从物理角度看似不太可信的假设,让所有分子的速度大小都相同,仅仅让初始位置和方向能够随机选取。图3就表示了这个模型的一个二维情形。
N个分子完全相互独立运动的假设毫无疑问是过度简化的。比方说,利用这个模型,我们就不可能理解,为什么当温度足够低时气体会液化:当你把模型中的各点运动速率降低,得到的还是相同的模型,无非跑得慢一些而已。不过这个模型还是能够解释真实气体的许多行为。例如,想象盒子被慢慢压缩的情形。分子仍然会继续以相同速率运动,但由于盒子变小,分子撞击壁面更加频繁,可供撞击的壁面面积也变小了。由于这两个缘故,单位面积的壁面每秒钟被撞击次数就增多了。这些撞击正是气体压强的来源,于是我们可以总结出,气体体积减小时,气体压强很可能增大——正如实际观测所证实的那样。类似的论证还可以解释,为什么气体温度升高而体积不变时,压强会增大。要推算出压强、温度与体积之间的数值关系也并不困难。
上述模型大致上就是伯努利所提出的模型。麦克斯韦的成就之一就是发现了一个优美的理论,来解决如何更逼真地选择初始速率的问题。为了理解这一点,让我们放弃分子间没有相互作用的假设。作为替代,我们假定分子会时不时地相互碰撞,就像台球一样。碰撞之后,它们就以另外的速率、向另外的方向,在遵守能量守恒和动量守恒定律的前提下随机弹开。当然,既然我们用没有体积的点来表示分子,那么就很难看出它们要如何碰撞。不过,这个麻烦在理论中恰可以作为一个非正式的论据,说明分子运动速度及方向具有某种随机性。麦克斯韦就这种随机性的本质作了两个非常合理的假定:其一,分子运动的随机性不随时间而改变;其二,这个随机性在不同方向上没有区别。大体来讲,第二条假设意味着,选取d 1 和d 2 两个方向及某个速率s,那么粒子以速率s沿着d 1 方向运动的概率和以速率s沿着d 2 方向运动的概率是相同的。不可思议的是,这样的两个假设就足以恰好决定分子运动速度的分布形式,即意味着,如果我们想要随机选取速度,就只有一种自然的方式。(它们应当服从正态分布。这种分布产生了著名的“钟形曲线”。这种曲线在各种各样的场合下经常出现,既出现在数学中也出现在实验中。)
一旦选定了速度,我们就可以再次忘掉分子间的相互作用。结果表明,这种作了一点改进的模型依然存在着原始模型中的许多瑕疵。为了进一步修正,我们只能再把分子间的相互作用考虑进来。但是结果发现,即使是非常简单的相互作用粒子模型,其行为也极其复杂,会引发极为难解,事实上多数都未能解决的数学问题。
计算机同样也可以看作由相互作用的各部分集合而成;很大程度上由于这个原因,理论计算机科学中同样有很多悬而未决的重要问题。其中有如下这样一个例子,我们可能愿意去尝试解答。假设某人选取了两个素数p和q,将它们相乘后的结果pq告诉你。你只要逐个取素数,看看它是否能够整除pq,即可以找出p和q。例如,给出91,你很快就能发现它不是2,3,5的倍数,继而发现它恰好等于7×13。
然而,当p和q非常大时——比方说都是200位的素数,那么这一试错过程会耗时极长,即使借助于强力计算机也是如此。(如果你想要体会一下这种困难,不妨尝试找出6901的两个素因子,以及280 123的。)可另一方面,似乎也不难感觉到,说不定这个问题存在着更聪明的解决办法,基于它就可以编制出一种快速运转的计算机程序。如果能找到这种好办法,我们就能破解作为大部分现代安全系统之基石的密码,包括在互联网上以及其他各处——破解这些密码的难点就在大整数的因子分解。反之,如果能够表明由pq计算出p和q的这种快速有效的方法不存在的话,我们则能够安心。不幸的是,虽然计算机总在不断地让我们惊叹它的各种能力,对于它们做不了的,我们却几乎毫无了解。
在思考这个问题之前,我们必须找到一种方法来数学化地表示计算机,并且要尽可能简单。图4所显示的就是一种极好的方法。它包含许多层节点,连结点和点之间的线段称作“边”。进入到最顶层的称作“输入”,这是一条0和1的序列,从最底层出来的叫作“输出”,是另一条0和1的序列。节点分为三种,分别称作“与门”、“或门”和“非门”。每一个门都从连结上层的边中接收到一些0和1。它再根据所接收到的数码来自己发出一些0和1,所遵循的简单规则如下:与门当接收到的输入全部为1时,输出1,否则输出0;或门当接收到的输入全部为0时,输出0,否则输出1;非门只允许一条边连结上层,它在接收到1时输出0,接收到0时输出1。
一系列门由边连接起来就称作一条电路,我上面所描述的模型正是关于计算的电路模型。使用“计算”一词是恰如其分的,因为我们可以把电路看作这样一种装置,它拥有一条0和1的序列,继而按某些预定规则将其变换为另一条序列,如果电路很大,变换规则可能会很复杂。这也正是计算机所进行的工作,只不过它们能够把这些序列翻译成我们能够理解的格式,诸如高级程序设计语言、视窗系统、图标等等。实际上,存在一种比较简单的办法(仅从理论的角度而言——在实践上操作将是个噩梦),能将任意计算机程序转换为一条按完全相同的规则变换01序列的电路。而且,计算机程序的重要特征恰在其对应电路中有着非常类似的对照物。
图4 一个简单的计算机程序
具体而言,电路中的节点数量正对应于计算机程序运转所花费的时间。因此,如果我们能够表明,按某种方式来变换01序列需要庞大的电路,那么也就说明这种变换方式所需要的计算机程序运转时间很长。我们使用电路模型而非直接分析计算机,其优势就在于,从数学的角度来看电路更简单也更自然,考虑起来更容易一些。
对电路模型进行一点小小的修改,我们就能得到大脑的一种有用的模型。这种模型不再使用01序列,而是使用0和1之间的任意值来表示强度各异的信号。所有的门,即对应于神经元或者脑细胞,也有所不同,但其行为还是很简单的。每个门从其他的门接收到一些信号,如果这些信号的总强度——对应数字的总和——足够大,门就在某个特定的强度水平上输出它自己的信号,否则不输出。这对应于神经元所作的是否“激发”的决策。
似乎很难相信这个模型能够捕捉大脑全部的复杂性,但这部分缘于我并没有提到应当有多少个门以及如何安排这些门。一个典型的人类大脑包含大约1000亿个神经元,它们以非常复杂的方式排列着;以我们当前对大脑的认识,还不可能谈及太多——至少在精微的细节方面不可能说清。不过,上述模型提供了一种有益的理论框架,供我们思考大脑可能是如何工作的,也使我们能够模拟某些类似于大脑运行的行为。