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()
../../_images/812ff6d01741383545196da7783b4805cbba57a86a5aaa9ba5dd15c04810e117.png
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()
../../_images/aa44a9fbca16cfd066d7e8007712fe228b4170e31111add3ac9bdb71b7be4135.png

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