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