Random walk simulations#
import numpy as np
import ipywidgets as widgets
from ipywidgets import interact, interactive
import matplotlib.pyplot as plt
class RandomWalker1D:
def __init__(self, steps=1000, seed=None):
self.steps = steps
self.positions = None
def walk(self):
moves = np.random.choice([-1, 1], size=self.steps) # Move left (-1) or right (+1)
self.positions = np.cumsum(moves)
self.positions = np.insert(self.positions, 0, 0) # Start at origin
def plot(self):
if self.positions is None:
raise ValueError("Run walk() first to generate a trajectory.")
plt.plot(self.positions)
plt.xlabel("Step")
plt.ylabel("Position")
plt.title("1D Random Walk")
plt.show()
walker = RandomWalker1D(steps=10000, seed=42)
walker.walk()
walker.plot()

class RandomWalker2D:
def __init__(self, steps=1000, seed=None):
self.steps = steps
self.positions = None
def walk(self):
moves = np.array([[1, 0], [-1, 0], [0, 1], [0, -1]]) # Four possible directions
choices = np.random.choice(4, size=self.steps) # Random indices for moves
self.positions = np.cumsum(moves[choices], axis=0)
self.positions = np.vstack(([0, 0], self.positions)) # Start at origin
def plot(self):
if self.positions is None:
raise ValueError("Run walk() first to generate a trajectory.")
plt.plot(self.positions[:, 0], self.positions[:, 1], marker='o', markersize=2, linestyle='-')
plt.xlabel("X Position")
plt.ylabel("Y Position")
plt.title("2D Random Walk")
plt.show()
walker = RandomWalker2D(steps=100, seed=42)
walker.walk()
walker.plot()

Challange Project#
Extend the previous code to do 3D random walk simulator
Can you write general code that can do nD random walk simulations?
Add function for computing mean square displacement from the origin