In this exercise we use the random number generator from the numpy module. We first import:
import numpy as np
import matplotlib.pyplot as plt
The random walk is a time series X given recursively as
\[X_t=X_{t-1}+\xi_{t}\]In Python, an array of M such trajectories of length T can be generated by the cumulative values
alle_werte = np.cumsum( np.random.normal( mean , standard_deviation , (M,T) ) , axis=1 )
1A Create an array of 100 trajectories of length 1000. Store the array in a variable all_values
and output it with the print command.
1B Plot 10 of the trajectories together into a figure with the command plt.plot()
.
To get all values of the 100 trajectories at time t, you can specify the index as
all_values[:,t]
2A Find a function in Python that you can use to plot a histogram. Plot the histogram at time points t=0 , t=9 , t=99 , t=999
The mean square deviation is defined as
\[\mathrm{MSD}_t = \langle (X_t-X_0)^2 \rangle\]2B Plot the mean square deviation of the generated data set for all times t in a log-log plot (plt.loglog()
).
2C How does the mean squared deviation depend on time t? Use a function that fits the exponent by which the MSD scales.
def scaling( ts ):
print("SCALING > Fit scaling exponent ")
y=np.array(ts)
ly=np.log10(y[y>0])
x=np.arange(1,len(ly)+1)
lx=np.log10(x)
m,b = np.polyfit(lx, ly, 1)
print("m="+str(m))
#plt.loglog( 10**(lx),10**(m*lx+b),lw=3,label=r'$\propto$'+r' $x^{{{}}}$'.format(str(abs(m)+0.005)[:4]) ) #plot the fit
return m,b
2D Repeat task 2A and plot the histograms. Is there a factor depending on t that you can multiply to the values so that the distribution remains the same for all t?