9.1.1 计算机建模

利用计算机解决现实中的问题,首先需要在计算机中将问题表示出来,这个过程称为建模(modeling),即建立描述现实问题的一个模型(model)。打个比方,用照相机拍摄自然 景物就是建模,即得到自然景物在照相机中的表示(数字图像)。不过照相机“建模”追求 的是模型必须反映自然景物的每一个细节,最好是一模一样。而用计算机为现实问题建模, 追求的是模型必须抽象出问题的关键特征,至于非关键的部分则可以忽略。如此得到的模型 比较简单,虽然不一定和现实很“像”,但足够支持解决问题。现实问题在计算机内的模型 通常都是数学模型,即利用数学公式或数学过程来描述现实问题。

下面我们写一个简单的程序,该程序的行为具有“混沌”现象的特征。所谓混沌现象, 是指在确定性系统中发生的看上去随机、不规则的运动,即用确定性理论描述的系统却表现 出不确定的行为。混沌现象的特征是不可预测性和对初始条件的极端敏感性。读者想必听说 过著名的“蝴蝶效应”:某处的一只蝴蝶扇动一下翅膀,这一扰动有可能导致很远的另一个 地方的天气出现非常大的变化。这个比喻想说的其实就是气象具有混沌行为。事实上,现实 生活和工程技术问题中,混沌现象是无处不在的。下面的程序虽然简单,却具有混沌现象不 可预测和对初始值敏感的两个特征。

【程序 9.1】chaos.py

  1. def main():
  2. x = input("Enter a number between 0 and 1: ")
  3. for i in range(10):
  4. x = 3.9 * x * (1 - x)
  5. print x
  6. main()

运行这个程序,可得如下输出:

  1. Enter a number between 0 and 1: 0.2
  2. 0.624
  3. 0.9150336
  4. 0.303213732397
  5. 0.823973143043
  6. 0.565661470088
  7. 0.958185428249
  8. 0.156257842027
  9. 0.514181182445
  10. 0.974215686851
  11. 0.0979659811419

再次运行这个程序,但换一个输入数据 0.21,可得如下输出:

  1. Enter a number between 0 and 1: 0.21
  2. 0.64701
  3. 0.89071343361
  4. 0.379637749907
  5. 0.918500422135
  6. 0.291943847024
  7. 0.806179285114
  8. 0.609391556931
  9. 0.928330600362
  10. 0.259478297495
  11. 0.749382311434

从运行结果可以发现,尽管程序的代码是确定的,但输出的 10 个结果毫无规律,好像 完全是不可预测的。此外,比较两次运行的输出结果,可以发现初始输入数据的微小变化会 使输出结果很快变得显著不同。这两点正是混沌现象的特征。本程序之所以能够显现出混沌 特征,是因为程序中使用了计算公式 kx(1-x),反复利用这个公式求值就会导致混沌。 换句话说,程序 chaos 利用数学公式 kx(1-x)为混沌现象建立了模型。

一旦用计算机程序为现实问题建立了模型,我们就可以通过运行程序并分析结果来探索 现实问题的性质。这时,模型的好坏是至关重要的,错误的程序自然会给出错误的结果,但 正确的程序也可能因为不准确的模型而产生错误的结果。