.. toctree:: ================ ランダムウォーク ================ 一定の時間ステップ毎にランダムに方向を変えながら粒子が並進運動する現象 をランダムウォーク(酔歩)と呼びます。酔っ払った人がフラフラ歩いていてど こに向かっているかわからない動きにちなんで酔歩とも呼びます 自然科学の分野では微粒子のブラウン運動や株価の動きはランダムウォークに なることが知られています。 * `ランダムウォーク理論 `_ * `ブラウン運動 `_ 1粒子だけだと、ど こまで進むか(変位)を予測できませんが、多数の粒子(:math:`N`)のランダム ウォークを観測して平均自乗変位を求めると拡散係数(:math:`D`)と次の関係 が成立します。 .. math:: \frac{1}{N}\sum_i^N r_i(t)^2 = 2dim Dt ここで :math:`dim` は次元数で2次元だと2、3次元だと3です。 .. note:: 拡散方程式から導かれる粒子分布(正規分布)から平均自乗変位を計算すれば、上式は導くことができます。 2次元のランダムウォークシミュレーション ======================================= ランダムウォークシミュレーションは、乱数を発生させて時間ステップ毎にラ ンダムな方向に多数の粒子を進めていけば実装できます。二次元でのランダム ウォークシミュレーションを行って、平均自乗変位と時間の関係から拡散係数 を求めてみます。1ステップで移動する距離は一定とし、移動方向 :math:`\theta` を乱数を使ってランダムに決定して粒子を動かします。全粒 子の時間毎の変位を求めたら時間ごとの平均自乗変位(rms; root-mean-square) を求めて直線近似し、傾きから拡散係数を求めてみます。 プログラムはforを使わずにステップ数x粒子数の乱数を一度で発生させ、各時 間ステップ毎の方向を決めて、np.cumsum()で足し上げて各時間ステップでの 位置を計算しています。1ステップの距離や時間の単位は、自分で決める必要 があります。 .. literalinclude:: randwalk_2d.py :caption: randwalk_2d.py プログラムを実行すると拡散係数と次のような図が得られます。6粒子だけの 粒子の軌跡を描いています(左)。平均自乗変位の後ろ半分のデータを直線フィッ トして拡散係数を求めています(右)。 .. code-block:: none Diffusion coefficient = 0.229 .. image:: randwalk_2d.png :width: 800px :align: center クイズ ====== Q1 -- 2次元のランダムウォークシミュレーションのプログラムを3次元のプログラム に変更する。 Q2 -- 各時間ステップでの粒子の運動方向を :math:`0, \pi/2, -\pi/2, \pi` の4 方向に限定してシミュレーションするよう変更する。