head

  1.8 附录:利用蒙特卡罗方法进行积分
  很难相信可用蒙特卡罗方法求出积分,毕竟我们不想靠打赌的方式猜出积分值。虽然常常愿意用其他方法求单重和双重积分,[7]但当积分重数很大时,蒙特卡罗方法将是最好的。
  例如我们想计算一个含有12个电子的原子的磁性。为了计算这个性质,对每个电子在3个坐标上需要积分某函数,这将导致3×12=36维的积分。如果对每个积分采用64个点,这大约需要对6436≈1065个被积函数进行运算。就算计算机快到每秒可完成被积函数的1百万次运算,这也需要1059秒才能完成积分,而这个时间远大于宇宙的年龄(~1017秒)。这时我们就要用蒙特卡罗法进行积分,以使我们能在活着的时候看到积分的答案。[4]
  
   1)基本原理
   用蒙特卡罗方法进行积分的原理很简单,我们可以通过以下一个有趣的问题来了解。设想一个农夫发现自己的一个池塘长满了藻类,于是打算撒农药来清除藻类。但当读完药物使用说明书后,发现需要知道池塘的面积才能确定撒多少药以使药的浓度正好。聪明的农夫看着自己那个不规则形状的池塘突然想到了这样的办法:
   ① 如图11所示,在池塘周围画一个规则的矩形框,将矩形内地面上的小石块收集起来作上标记。
   ② 量出矩形框的长和宽,如果家里没有那么长的尺子,可以用跨出的步长这类自然长度来测量,于是就得到了矩形区域的面积Sbox。
   ③ 沿着矩形框走上几圈,每走一步向框内均匀随意的投出一些石块。
   ④ 记录下听到石块落入水中时溅起水花的声音次数Npond,并数出落在区域内地面上的石块数Nbox。
   ⑤ 如果确实是均匀随机的扔出石块,那么池塘的面积就可以按下面的比例关系确定:               
   以上农夫的投石测量也许是一个假想的故事,因为人们无法真正随机的扔出石块,但是,这种方法正是蒙特卡罗积分的核心思想,因为在前面已经看到我们的计算机是能过随机的“投掷”出石块的。

   2)一个简单的例子
   下面我们通过Matlab编写一个“投石测量”的具体程序,计算二维积分并据此决定π值。
   ① 假设以坐标原点为中心有一圆形池塘,且正好被一长度为2的正方形所包围。
   ② 在[-1,1]内产生随机数序列{ri},让(xi,yi)=( ri, ri+1)。
   ③ 如果xi2+ yi2<1,使Npond=Npond+1,否则使Nbox=Nbox+1。
   ④ 利用(7)式计算圆面积并据此求出π值。

bottom