import numpy as np from numpy import * import matplotlib matplotlib.use('TkAgg') from matplotlib import pyplot as plt from matplotlib import animation lfsr = 1000 def lfsr11(): # 11 bit lfsr global lfsr order = 11 taps = [0,10] #subtract 1 bit = (((lfsr >> (taps[0])) ^ (lfsr >> (taps[1]))) & 1) lfsr = (lfsr>>1) | (bit << order-1) # print(bin(x)) # print(x) number = int(lfsr) return lfsr def lfsr_bit(): # -1 or 1 # print(lfsr) num = lfsr11() if num > pow(2,11-1): return 1 else: return -1 def init(): global steps, movers, x, y, xx, yy y = array(arange(movers)) xx = ndarray(shape=(movers,steps)) yy = ndarray(shape=(movers,steps)) for i in range(0,steps): for j in range(0,movers): y[j] = 0 steps = 1000 movers = 10 init() for i in range(0,steps): for j in range(0,movers): dy = lfsr_bit() y[j] += dy yy[j][i] = y[j] xx[j][i] = i plt.figure() for j in range(movers): plt.plot(xx[j],yy[j]) var = [] means = [] for i in range(steps): variance = 0 for j in range(movers): variance += pow(yy[j][i] - mean(yy[:,i]),2) var.append(variance/movers) means.append(mean(yy[:,i])) # print(var) stdevs = [sqrt(x) * 1.5 for x in var] plt.errorbar(range(steps),means,stdevs) plt.title('Brownian Motion') plt.show()