Here we have used “Python” but you may use whatever programming languages that can generate random numbers.
Bernoulli Random Walk
import numpy as np
import matplotlib.pyplot as plt
k = 2000 # number of samples
time_seq = np.arange(0, k)
# Sample a Bernoulli process with p=1/2
X = np.sign( np.random.uniform(-1, 1, k) )
plt.figure(0)
plt.plot(time_seq, X, 'bo')
plt.axis([0, k, -2, 2])
plt.xlabel('Time')
plt.ylabel('X[t]')
plt.grid()
plt.show(block=False)
# ===================================================================
# A random walk based on the Bernoulli process
S = np.zeros(k)
S[0] = X[0]
for itr in np.arange(1, k):
S[itr] = S[itr-1] + X[itr]
plt.figure(1)
plt.plot(time_seq, S)
#plt.axis([0, k, -2, 2])
plt.xlabel('Time')
plt.ylabel('S[t]')
plt.grid()
plt.show(block=False)
# ===================================================================
# Y[n] is a normalized version of S[n] by a factor of 1/n
Y = np.zeros(k)
for itr in np.arange(k):
Y[itr] = S[itr] / (itr+1)
plt.figure(2)
plt.plot(time_seq, Y)
#plt.axis([0, k, -2, 2])
plt.xlabel('Time')
plt.ylabel('Y[t]')
plt.grid()
plt.show(block=False)
# ===================================================================
# Z[n] is a normalized version of S[n] by a factor of 1/sqrt(n)
Z = np.zeros(k)
for itr in np.arange(k):
Z[itr] = S[itr] / np.sqrt(itr+1)
plt.figure(3)
plt.plot(time_seq, Z)
#plt.axis([0, k, -2, 2])
plt.xlabel('Time')
plt.ylabel('Z[t]')
plt.grid()
plt.show()



Central Limit Theorem
import numpy as np
import matplotlib.pyplot as plt
N = 10000 # number of independent sample paths
k = 4000 # number of samples in each sample path
time_seq = np.arange(0, k)
# ===================================================================
lst_Z_smpls = np.zeros(N)
for itr in np.arange(N):
# Sample a Bernoulli process with p=1/2
X = np.sign( np.random.uniform(-1, 1, k) )
# A random walk based on the Bernoulli process
S = np.zeros(k)
S[0] = X[0]
for jtr in np.arange(1, k):
S[jtr] = S[jtr-1] + X[jtr]
# Z[n] is a normalized version of S[n] by a factor of 1/sqrt(n)
Z = np.zeros(k)
for jtr in np.arange(k):
Z[jtr] = S[jtr] / np.sqrt(jtr+1)
lst_Z_smpls[itr] = Z[k-1]
plt.figure(0)
plt.hist(lst_Z_smpls, 100)
plt.grid()
plt.show()
