てきとーなブログ

てきとーに書き綴ります。なので、正しいかは責任を負えません。

ランダムウォーク

wikipediaによると、

ランダムウォークは、次に現れる位置が確率的に無作為(ランダム)に決定される運動である。

のだそう。液体中の粒子の運動で知られるブラウン運動コイントスによるすごろくみたいなのもランダム・ウォークの一種である。

100ステップのランダム・ウォークはこんな感じになる。 f:id:azoay:20150625213419p:plain

10000ステップのランダム・ウォークを100回行うとこんな感じになる。 f:id:azoay:20150625213516p:plain

ちなみにこんな感じの実装。

#!/usr/bin/env python3
# -*- coding: utf-8 -*-
import random
import matplotlib.pyplot as plt

def toss():
    # coin tass
    return 1 if random.random() <= 0.5 else -1

def walk(n=30, y0=0):
    """walk random walk
    Keyword arguments:
    n -- number of trials
    y0 -- first position of y
    """
    i = 0
    y = [y0]*n
    while i < n-1:
        y[i+1] = y[i] + toss()
        i = i + 1
    return y

if __name__ == '__main__':
    c = 10 # number of run walk()
    N = 1000000 # number of walk traials
    y0 = 0 # first position
    n = list(range(N))
    ave = [0] * N # average y
    for i in range(c):
        y = walk(N, y0)
        ave = list(map(lambda a, b: a + b, ave, y))
        plt.plot(n, y)
    plt.plot(n, [y0]*N, lw=5, color = 'g') # first position
    plt.plot(n, ave, lw=5, color = '#000000') # average position
    plt.grid()
    plt.show()