TD: Marche au hasard

Transcription

TD: Marche au hasard
TD: Marche au hasard
1 Position du problème
On se propose de simuler la marche au hasard d’une particule dans un espace à une ou plusieurs dimensions.
Ce phénomène correspond en physique au mouvement Brownien; il s’applique au mouvement d’un électron dans
un fil métalique, à l’adsorption d’une particule sur une surface, à la diffusion d’un parfum dans un volume,. . .
On suppose que la particule M part de l’origine O et, qu’à chaque pas, elle se déplace d’une petite quantité par
−−−−→
rapport à sa position précédente. On veut trouver, au bout de N pas, la position finale OM(N ) de la particule
et sa distance d(N ) à l’origine. On refait le calcul K fois. On souhaite vérifier que, si toutes les directions sont
√
équiprobables, la moyenne des d(N ) est nulle et que l’écart-type dépend de N .
1.1 Déplacement sur une droite
On suppose que la particule se déplace, à chaque itération, de ∆x sur un axe (Ox).
1. À chaque pas, la particule effectue un déplacement entier ∆x = ±1. (On a donc: h(∆x)2 i = 1).
a. Se fixer une valeur de N (par exemple N = 100).
b. Calculer OM(N ) au bout de N pas (OM(N ) ∈ Z); incrémenter un compteur c(N ) [OM(N ) ] pour
comptabiliser le nombre de fois où la position OM(N ) a été atteinte.
√
c. Réitérer K fois l’opération b. (K de l’ordre de N ).
d. Tracer un graphique indiquant, pour chaque position x ∈ Z, le nombre de fois c(N ) (x) où cette position
a été atteinte lors des K essais.
e. Calculer la moyenne et l’écart-type de c(N ) (x).
f. Reprendre tout le calcul pour différentes valeurs de N et tracer l’écart-type de c(N ) (x) en fonction de
√
N.
√
√
2. À chaque pas, la particule effectue un déplacement dans R tel que ∆x ∈ [− 3, + 3].
R +xmax 2
).
(On a donc: h(∆x)2 i = 1 car h(∆x)2 i = −xmax
x .dp avec dp = 2.xdx
max
a. Se fixer une valeur de N .
b. Calculer OM(N ) au bout de N pas (OM(N ) ∈ R).
c. Réitérer K fois le calcul et calculer σ 2 : la moyenne de (OM(N ) )2 (i.e. la variance de la distance à
l’origine).
d. Reprendre tout le calcul√pour différentes valeurs de N et tracer σ (i.e. l’écart-type de la distance à
l’origine) en fonction de N .
1.2 Déplacement dans un plan
On suppose que la particule se déplace, à chaque itération, de (∆x, ∆y) dans un plan (Oxy).
En théorie, on a: d2(N ) = (∆x1 + ∆x2 + . . . + ∆xN )2 + (∆y1 + ∆y2 + . . . + ∆yN )2 .
D’où: d2(N ) = ∆x21 + ∆x22 + . . . + ∆x2N + 2.∆x1 .∆x2 + 2.∆x1 .∆x3 + . . . + 2.∆x2 .∆x3 + . . . + (x → y).
Pour un déplacement équiprobable dans toute les directions, les termes croisés s’annulent en moyenne; il reste:
2
d2(N ) ' ∆x21 + ∆x22 + . . . + ∆x2N + ∆y12 + ∆y22 + . . . + ∆yN
= N.(h∆x2 i + h∆y 2 i) = N.hd2 i.
√
Finalement: d(N ) ' N .drms .
1. À chaque pas, la particule effectue un déplacement entier vers le haut (∆y = +1), le bas (∆y = −1), la
droite (∆x = +1) ou la gauche (∆x = −1). Cela revient à choisir une direction parmi 4 avec la probabilité
1/4 et à avoir: h(∆x)2 i = h(∆y)2 i = 1/2.
a. Se fixer une valeur de N .
−−−−→
b. Tracer l’évolution de OM(N ) en fonction de N .
c. Réitérer K fois le calcul et calculer σ 2 : la moyenne de (OM(N ) )2 .
√
d. Reprendre tout le calcul pour différentes valeurs de N et tracer σ en fonction de N .
p
p
p
p
2. À chaque pas, la particule effectue un déplacement ∆x ∈ [− 3/2, + 3/2] et ∆y ∈ [− 3/2, + 3/2].
(Ainsi: h(∆x)2 i = h(∆y)2 i = 1/2). Reprendre les mêmes questions.
1
ISEN-Brest. Kany.
TD: Marche au hasard
2 Code avec Mathematica
Marche aléatoire
In[1]:= SeedRandom[]; Racine6=N[Sqrt[6]]; Racine12=N[Sqrt[12]];
La variable Racine6 évite de recalculer (2 Sqrt[3/2]) à chaque fois
La variable Racine12 évite de recalculer (2 Sqrt[3]) à chaque fois
In[4]:= CalculPasEntier1D:=(If[Random[]<0.5,x--,x++]);
CalculPasReel1D:=(x+=(Random[]-.5)*Racine12);
CalculPasEntier2D:=(tmp=Random[];
If[tmp<0.25,x--,If[tmp<0.5,x++,If[tmp<0.75,y--,y++]]]);
CalculPasReel2D:=(x+=(Random[]-.5)*Racine6; y+=(Random[]-.5)*Racine6)
In[8]:= EcartType[K ,NN ,TypePas ]:=( Moyenne=0; For[k=1,k<=K,k++;x=0;y=0;
For[i=1,i<=NN,i++; Switch[TypePas, 1,CalculPasEntier1D, 2,CalculPasReel1D,
3,CalculPasEntier2D, 4,CalculPasReel2D]]; Moyenne+=N[x^2+y^2]]; Moyenne/=K;
Return[Sqrt[Moyenne]])
In[9]:= TracerEcartType[RacineNmax ,RacineNstep ,TypePas ]:=( ListePoints={};
For[RacineN=1,RacineN<=RacineNmax,
ListePoints=Prepend[ListePoints,{RacineN,EcartType[RacineN,RacineN^2,TypePas]}];
Print[RacineN];RacineN+=RacineNstep;];
Graph1=ListPlot[ListePoints,PlotRange->{0,RacineNmax}]; Graph2=Plot[x,{x,0,RacineNmax}];
Show[Graph1,Graph2])
1D. pas entier
In[10]:= TracerMarche1D[K ,NN ]:=( c=Table[0,{2 NN+1}]; For[k=1,k<=K,k++;
x=0;For[i=1,i<=NN,i++;CalculPasEntier1D[NN]]; c[[NN+x+1]]++;];
Print["Tirages:",N[Sum[c[[NN+x+1]],{x,-NN,NN}]]];
Print["Moyenne:",N[Sum[x c[[NN+x+1]],{x,-NN,NN}]/K]];
Print["Ecart-type:",N[Sqrt[Sum[x^2 c[[NN+x+1]],{x,-NN,NN}]/K]]];
res=Table[{x,c[[NN+x+1]]},{x,-NN,NN}]; ListPlot[res];)
In[11]:= TracerMarche1D[1000,100]
Tirages:1000.
Moyenne:-0.108 Ecart-type:10.0562
In[12]:= TracerEcartType[101,10,1]
Out[12]= -Graphics-
2
ISEN-Brest. Kany.
TD: Marche au hasard
1D. pas réel
In[13]:= TracerEcartType[50,5,2]
Out[13]= -Graphics-
2D. pas entier
In[14]:= TracerMarche2D[NN ,PasEntier ]:=( x=0;y=0;Maximum=0;chemin={};
For[i=1,i<=NN,i++; If[PasEntier,CalculPasEntier2D,CalculPasReel2D];
If[Abs[x]>Maximum,Maximum=Abs[x]];If[Abs[y]>Maximum,Maximum=Abs[y]];
chemin=Join[{{x,y}},chemin];]; Graph=ListPlot[chemin,PlotJoined->True];
DepartArrivee=Graphics[{Disk[{0,0},Maximum/30],Disk[{x,y},Maximum/30]}];
Show[{Graph,DepartArrivee},PlotRange->{{-Maximum,Maximum},{-Maximum,Maximum}},
AspectRatio->1]; Print["Distance à l’origine:",N[Sqrt[x^2+y^2]]])
In[15]:= TracerMarche2D[200,True]
Distance à l’origine:11.6619
3
ISEN-Brest. Kany.
TD: Marche au hasard
In[16]:= TracerEcartType[50,5,3]
Out[16]= -Graphics-
2D. pas réel
In[17]:= TracerMarche2D[200,False]
Distance à l’origine:13.5001
In[18]:= TracerEcartType[50,5,4]
Out[18]= -Graphics-
3 Code avec Python
# -*- coding: utf-8 -*import math
from mpl toolkits.axes grid.axislines import SubplotZero
import numpy as np
from pylab import *
import matplotlib.pyplot as plt
4
ISEN-Brest. Kany.
TD: Marche au hasard
TracerMarche1D(1000, 100)
100
80
60
40
20
0100
50
0
50
100
TracerEcartType(101,1,1)
120
100
Ecart-type
80
60
40
20
00
20
40
60
80
(Nbre de pas)^(1/2)
100
120
TracerEcartType(50,1,2)
50
Ecart-type
40
30
20
10
00
10
20
30
(Nbre de pas)^(1/2)
40
50
TracerMarche2D(200, True)
5
ISEN-Brest. Kany.
TD: Marche au hasard
5
10
15
20
Graphe Marche 2D
10
5
0
0
15
5
10
15
20
10
15
20
20
15
10
5
20
TracerEcartType(50, 5, 3)
50
Ecart-type
40
30
20
10
00
10
20
30
(Nbre de pas)^(1/2)
40
50
TracerMarche2D(200,False)
5
10
15
20
Graphe Marche 2D
10
5
0
0
15
5
20
15
10
5
20
TracerEcartType(50, 5, 4)
6
ISEN-Brest. Kany.
TD: Marche au hasard
50
Ecart-type
40
30
20
10
00
10
20
30
(Nbre de pas)^(1/2)
40
50
7