This repository has been archived on 2021-05-17. You can view files and clone it, but cannot push or open issues or pull requests.
scientificComputing/statistics/exercises/randomwalkfirstpassagetime.py

35 lines
921 B
Python

import numpy as np
import matplotlib.pyplot as plt
# first passage time of random walker
# the average of the first passage time grows
# the more experiments you average (n)
# eventually diverges to infinity
# see https://www.math.ucdavis.edu/~tracy/courses/math135A/UsefullCourseMaterial/firstPassage.pdf last paragraph
p = 0.5
thresh = 1.0
rep = 1
rn = 10000
n = 2
meantimes = np.zeros(rep)
for i in range(rep):
times = np.zeros(n)
for k in range(n):
xx = 0.0
xxinx = 0
while True:
r = np.random.rand(rn)
x = np.zeros(len(r))
x[r < p] = 1.0
x[r >= p]= -1.0
y = xx + np.cumsum(x)
inx = np.where(y > thresh)[0]
if len(inx) > 0:
times[k] = xxinx + inx[0]
break
xx = y[-1]
xxinx += len(x)
meantimes[i] = np.mean(times)
print np.mean(meantimes)