拡散のシミュレーション(2)

非常に多数の粒子を同時に動かすと、その分布はなめらかな形になる。つまり、分布の形は一個一個の粒子が具体的にどのように動いたかとは関係なく決まるようである。 そこで、初めから非常に多数の粒子があるものとして、別のモデルを考えてみよう。
マスが直線状に並んだものを考え、各マスの中に粒子がはいるものとする。マスにいる粒子の量を数ではなく濃度で表わすことにする。1時間ステップ後に、各マスにいる粒子のうち一定の割合の粒子が左隣のマスへ移り、同じだけの量が右隣にも移るものとする。これだけの規則で時間を進めていくシミュレーションが次のプログラムである。このシミュレーションでは乱数は使われていない。
#include<stdio.h>
#define MAXSTEP 1000
main(){
 int i,j,step;
 double n[MAXSTEP*2+1],newn[MAXSTEP*2+1];
 double r;

 scanf("%d%lf",&step,&r);

 for(i=0; i<MAXSTEP*2+1; ++i) n[i] = 0;
 n[MAXSTEP] = 1;

 for(j=0;j<step; ++j){
  for(i=1; i<MAXSTEP*2; ++i) newn[i] = n[i]*(1-r) + n[i-1]*r/2 + n[i+1]*r/2 ;
  for(i=0; i<MAXSTEP*2+1; ++i) n[i] = newn[i];
 }

 for(i=0; i<MAXSTEP*2+1; ++i) printf("%f\n",n[i]);
}
短いプログラムだが、意味はわかるだろうか。
このシミュレーションの結果を前の乱数を使ったシミュレーションの結果と比較してみるべきである。
次へ