import numpy as np
import matplotlib as mpl
import pylab as pl
import random as rand

N = 100000  
w=0.
gamma = (1.+w)/2. 
nbins=100
noofsamples=5
samples=[]
meanpath=0.

#random walk
for n in range(0,noofsamples):
    visited=[]
    pos=0
    for t in range(1,N):
        step=cmp(rand.random(),gamma)
        pos+=step
        visited.append(pos)
    meanpath+=visited[len(visited)-1]
    samples.append(visited)
print "mittlerer Weg ", meanpath/noofsamples

#mittlere Position nach m Schritten
offset=100
distances=[np.subtract(samples[s][:len(samples[s])-offset],samples[s][offset:]) for s in range(0,noofsamples)]
stdevs=[np.std(distances[s]) for s in range(0,noofsamples)]
print "Standardabweichungen ", stdevs, " vergleiche mit ", np.sqrt(offset)

#Plots:
pl.figure(1)
pl.subplot(311)
plots=[pl.plot(samples[s],label="rw "+str(s)) for s in range(0,noofsamples)]
pl.legend()
pl.xlabel("t")
pl.ylabel("x(t)")

pl.subplot(312)
histos=[mpl.pyplot.hist(samples[s],bins=nbins, normed=True, label="rw "+str(s)) for s in range(0,noofsamples)]
pl.legend()
pl.xlabel("x")
pl.ylabel("P(x)")

pl.subplot(313)
pl.xlabel("r")
pl.ylabel("P(r)")
histos=[mpl.pyplot.hist(distances[s],bins=nbins, normed=True, label="rw "+str(s)) for s in range(0,noofsamples)]

#vergleiche mit normalverteilung
x=np.arange(start=np.min(distances[0]), stop=np.max(distances[0]),step=1)
mu=0
stdev=np.sqrt(offset)
pl.plot(x,np.exp(-((x-mu)/stdev)**2/2)/(stdev), label="m = " + str(offset))
pl.legend()
pl.show()