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
- 7 autres exercices corrigés dans ce chapitre, et 7 à chercher avec le tuteur
- Les 2 QCM du chapitre, le premier sans compte
- Le tuteur, qui guide pas à pas sans donner la réponse
Sans compte : le cours et le premier QCM. Exercices et tuteur : inscription gratuite en 30 secondes, sans carte bancaire.