Adloun

Python (école d'ingénieur) · Chapitre 8 · Exercice

Simulation de marche aléatoire

Calcul scientifique avec NumPy

Énoncé

Simuler une marche aléatoire 1D de pas, avec un pas de ou équiprobable.

  • Générer une marche aléatoire de 1000 pas.
  • Calculer la position moyenne après pas pour 1000 réalisations indépendantes.
  • Vérifier que l'écart-type de la position finale est proportionnel à .

Corrigé

import numpy as np

def marche_aleatoire(N, n_simulations=1):
    """
    Simule une marche aléatoire 1D.
    
    Paramètres:
    N : nombre de pas
    n_simulations : nombre de simulations indépendantes
    
    Retourne:
    positions : tableau (n_simulations, N+1) des positions
    """
    # Pas aléatoires : +1 ou -1
    pas = np.random.choice([-1, 1], size=(n_simulations, N))
    
    # Positions cumulées
    positions = np.zeros((n_simulations, N + 1))
    positions[:, 1:] = np.cumsum(pas, axis=1)
    
    return positions

# Paramètres
np.random.seed(42)
N = 1000
n_sim = 1000

# Simulation
positions = marche_aleatoire(N, n_sim)

# Positions finales
positions_finales = positions[:, -1]

# Statistiques
print(f"Marche aléatoire de {N} pas, {n_sim} simulations")
print(f"Position finale moyenne : {np.mean(positions_finales):.4f}")
print(f"Écart-type position finale : {np.std(positions_finales):.4f}")
print(f"sqrt(N) = {np.sqrt(N):.4f}")
print(f"Rapport sigma/sqrt(N) : {np.std(positions_finales) / np.sqrt(N):.4f} (devrait être ~1)")

# Vérification pour différentes valeurs de N
N_vals = [100, 400, 900, 1600, 2500]
rapports = []

print("\nVérification sigma proportionnel à sqrt(N) :")
print(f"{'N':6} {'sqrt(N)':8} {'sigma':12} {'sigma/sqrt(N)':10}")
print("-" * 40)

for val_n in N_vals:
    pos = marche_aleatoire(val_n, n_sim)
    sigma = np.std(pos[:, -1])
    rapports.append(sigma / np.sqrt(val_n))
    print(f"{val_n:6} {np.sqrt(val_n):8.2f} {sigma:12.4f} {sigma/np.sqrt(val_n):10.4f}")

print(f"\nRatio moyen sigma/sqrt(N) : {np.mean(rapports):.4f} (devrait être ~1)")

L'exécution de ce script affiche :

Marche aléatoire de 1000 pas, 1000 simulations
Position finale moyenne : -1.3320
Écart-type position finale : 31.5784
sqrt(N) = 31.6228
Rapport sigma/sqrt(N) : 0.9986 (devrait être ~1)

Vérification sigma proportionnel à sqrt(N) :
N      sqrt(N)  sigma        sigma/sqrt(N)
----------------------------------------
   100    10.00       9.9375     0.9938
   400    20.00      19.8899     0.9945
   900    30.00      29.6147     0.9872
  1600    40.00      40.0541     1.0014
  2500    50.00      49.7759     0.9955

Ratio moyen sigma/sqrt(N) : 0.9945 (devrait être ~1)

100 % gratuit

La suite du chapitre est sur Adloun

Exercice suivant et tuteur

Sans compte : le cours et le premier QCM. Exercices et tuteur : inscription gratuite en 30 secondes, sans carte bancaire.

Le cours du chapitre · Tous les exercices du chapitre

Exercice suivant et tuteur →