TP – Marche aléatoire Table des mati`eres 1 Outils python

PC & PC* 2014–2015 – Informatique pour tous TP – Marche al´
eatoire
TP – Marche al´
eatoire
Table des mati`eres
1 Outils python 1
2 Marche au hasard 1D non biais´ee 4
2.1 ´
Etude du mouvement d’une particule . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4
2.2 ´
Etude avec plusieurs particules . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4
3 Marche au hasard 1D avec biais 5
4 Diffusion de particules sur un segment ferm´e 5
1 Outils python
Rappelons quelques notions de python qui seront utiles pour faire le TP.
Importer une biblioth`eque
Ce qui fait le grand int´erˆet du langage de programmation python est sa communaut´e d’utilisateurs qui est tr`es nom-
breuse et tr`es active. Ainsi de nombreux compl´ements au langage ont ´et´e d´evelopp´es et mis `a disposition au fur et `a
mesure du temps. Ceux–ci prennent la forme de biblioth`eque. Ce sont des programmes faits par d’autres que l’on peut
incorporer `a son code grˆace `a la commande import. Les biblioth`eques sont tr`es largement document´ees sur internet, il ne
faut pas h´esiter `a consulter la documentation.
La commande import peut ˆetre utilis´ee de plusieurs fa¸cons : si on veut importer la biblioth`eque math par exemple,
import math. Pour utiliser les fonctions de la biblioth`eque, comme arctan par exemple, il faut taper math.arctan
import math as mt. Cette fois–ci la fonction arctan s’obtiendra par mt.arctan
from math import *. Ici plus besoin de syntaxe sp´eciale, les fonctions de la biblioth`eque sont directement accessible
dans le programme. Ainsi la fonction arctan est directement accessible.
Q1. Importer par une des trois m´ethodes la biblioth`eque math et calculer ln(arctan(3) + e1).
Q2. Importer la biblioth`eque random et afficher la documentation du module sur internet.
Trouver comment tirer au sort un nombre compris entre 2 et 98 inclus.
Trouver comment tirer «au hasard »un r´eel dans le segment [0,1].
En d´eduire une mani`ere de simuler un jeu de pile ou face biais´e avec probabilit´e p= 0.3 d’apparition de «face ».
Les fonctions
Pour pouvoir programmer de mani`ere efficace, il est tr`es fortement conseill´e d’avoir une approche modulaire. : plutˆot que
faire un gros programme d’un seul tenant, il vaut mieux d´ecouper son programme en plusieurs petits programmes effec-
tuant des tˆaches simples et pr´ecises. De cette mani`ere, on peut tester plus facilement chacun des petits sous–programmes
et ce qui aide beaucoup `a d´etecter les erreurs. Par ailleurs, cette approche permet d’´eviter d’´ecrire plusieurs fois les mˆemes
lignes de code : une fois le programme ´ecrit dans une fonction, on peut utiliser la fonction sans la r´e´ecrire. Ceci facilite
grandement la maintenance du code ainsi que son optimisation ´eventuelle : peu importe comment est programm´ee la
fonction, si elle fait le travail qui lui est demand´e.
Une fonction en python se comporte de la mani`ere suivante :
elle mange un certain nombre d’arguments, ´eventuellement aucun.
´
Etant donn´es ces arguments, elle effectue une ou plusieurs tˆaches. Ce sont les instructions mises dans le corps de
la fonction.
Elle renvoie ´eventuellement une ou plusieurs valeurs.
Plus pr´ecis´ement, une fonction se d´efinit ainsi, attention l’indentation est obligatoire :
def nom_de_fonction(arg1, arg2) :
commande_1
commande_2
...
return r´esultat
La derni`ere ligne (return r´esultat) n’est n´ecessaire que si on souhaite que la fonction renvoie un r´esultat. Pour pr´eciser
les choses, voyons un exemple :
Lyc´
ee Louis Thuillier 111 septembre 2014
PC & PC* 2014–2015 – Informatique pour tous TP – Marche al´
eatoire
def exemple(p,q):
res = p//q # l’op´eration // est la division enti`ere
return res
La fonction exemple, calcule le quotient de la division euclidienne de ppar qet renvoie le r´esultat. Ainsi pour obtenir le
quotient de la division euclidienne de 344 par 7 il suffit de taper exemple(344,7). On peut, si on le souhaite, renvoyer
plusieurs valeurs :
def exemple2(p,q):
quotient = p//q # l’op´eration // est la division enti`ere
reste = p % q
return quotient, reste
La fonction exemple2 renvoie le couple quotient reste. Ainsi les commandes :
q,r = exemple2(344,7)
print(q*7+r)
enregistre le quotient et le reste de la division euclidienne de 344 par 7 dans les variables qet ret imprime q*7+r ce qui
doit donner 344.
Il est possible de donner des valeurs par d´efauts aux derniers arguments. . .on pourra alors omettre ces arguments lors de
l’appel de la fonction. Ainsi avec
def exemple3(p,q=1):
quotient = p//q # l’op´eration // est la division enti`ere
reste = p % q
return quotient, reste
si on lance exemple3(344) sans pr´eciser le second argument q, alors qprendra par d´efaut la valeur 1 et la fonction
renverra donc le couple (344,0).
Il est `a noter que les variables d´efinies dans le corps de la fonction ne sont valables que dans la fonction. Ainsi, dans
l’exemple pr´ec´edent, les variables quotient et reste n’existent pas en dehors de la fonction, elles n’auront une existence
que lors de l’ex´ecution de celle–ci. Il en est de mˆeme pour les arguments : ce n’est pas parce que les arguments pet qont
des valeurs en dehors de la fonction qu’elles seront prises en compte lors de l’ex´ecution de la fonction.
Par contre, si des variables sont d´efinies en dehors du corps de la fonction et utilis´ees dans la fonction sans qu’elles y
soient d´efinies, alors la fonction utilisera les valeurs des variables. Il faut ´eviter au maximum de programmer de la sorte.
Q3.´
Ecrire une fonction al´eatoire bernouilli(p) renvoyant 0 avec une probabilit´e pet 1 avec une probabilit´e 1 p.
Q4. Modifier la fonction pr´ec´edente pour que lorsqu’on ne pr´ecise par p, celui–ci prenne la valeur 1
2.
Les boucles
Comme dans tous les langages de programmation, il y a deux types de boucles en python : les boucles for et while.
Commen¸cons par le plus simple, la boucle for.
Par exemple :
for k in range(20):
print(k)
va donner successivement `a kles valeurs 0, 1, . . ., 19 et ex´ecuter le corps de la boucle pour chacune de ces valeurs de k
(ici afficher k). On peut boucler sur une plage d’entier, par exemple les lignes :
for k in range(5,20):
print(k)
vont faire prendre `a kles valeurs 5, 6, . . ., 19. On peut aussi parcourir directement une liste :
L = ["c’est", " chouette", " python", 3]
for mot in L:
print(mot)
La boucle while s’utilise quand on veut r´ep´eter une chose tant qu’ une condition n’est pas satisfaite. Attention, avant de
se lancer dans l’´elaboration d’une boucle while, il faut s’assurer que la condition va ˆetre satisfaite au bout d’un temps
fini ! Sinon, la boucle ne s’arrˆetera pas tant que l’ordinateur est allum´e, on dit qu’on a une boucle infinie. Prenons par
exemple le calcul du pgcd `a l’aide de l’algorithme d’Euclide : on effectue des divisions euclidiennes du plus grand par le
plus petit tant que le reste n’est pas nul. Le dernier reste non nul est le pgcd :
Lyc´
ee Louis Thuillier 211 septembre 2014
PC & PC* 2014–2015 – Informatique pour tous TP – Marche al´
eatoire
p=3564
r=122
while r != 0 :
p,r = r, p % r # p % r renvoie p modulo r, c’est `a dire le reste de la division euclidienne de p par r
La boucle s’arrˆete quand rdevient nul. On voit que lors de l’ex´ecution, pprend la valeur du reste pr´ec´edent. Ainsi, `a la
fin de l’ex´ecution de cette boucle, le pgcd est donn´e par p.
Les listes
Les listes sont intensivement utilis´ees en python, elles permettent de stocker des collections d’objets. Python propose
plusieurs fonctions pour manipuler les listes :
L = ["mot", 3, 1.4, "pi"]
print(L) # imprimer la liste
L.append("autre") # ajout d’un ´el´ement `a la fin d’une liste
L.remove("pi") # retire la premi`ere occurence de "pi" dans la liste
len(L) # longueur de la liste
L.count(1.4) # compte le nombre d’occurence de 1.4 dans la liste
print(L[1]) # les indices commencent `a 0 !!!!!
L[1] = L[1]+3 # on peut modifier les ´el´ements d’une liste
P = ["une", "autre", "liste"]
L + P # concat`ene les listes L et P
Il existe encore d’autres fonctions que vous pouvez consulter dans la documentation en ligne de python.
En ce qui concerne la copie de tableau, il s’agit d’ˆetre pr´ecautionneux. Dans le listing pr´ec´edent, la commande L = ["mot",
3, 1.4, "pi"] ne donne pas `a Lla valeur du tableau, juste l’adresse m´emoire o`u celui–ci est stock´e dans l’ordinateur.
Ainsi la commande autre = L affecte `a la variable autre la mˆeme adresse m´emoire, donc si on modifie la liste point´ee
par autre. . .cela modifie aussi la liste point´ee par L: c’est la mˆeme adresse m´emoire !
Pour copier une liste, il faut la recopier. On peut utiliser la commande :
autre = L[:]
Il est possible de cr´eer des listes avec une boucle for, par exemple la commande
L = [ k**2 for k in range(10) ]
donne la liste des carr´es des 20 premiers entiers (`a partir de 0).
Tracer des courbes
Il y a plusieurs moyens pour tracer des courbes en python. Nous n’en pr´esenterons qu’une, l’utilisation de la biblioth`eque
pyplot du module matplotlib. Pour l’importer il faut par exemple taper :
import matplotlib.pyplot as plt
La biblioth`eque contient beaucoup de fonctions, nous n’en pr´esenterons que quelques-unes, notamment la fonction plot.
´
Etant donn´e une suite de points P1,P2, . . ., PN, la commande plot permet de tracer la ligne bris´ee [P1, P2, . . . , PN] :
x = [1.2, 4, 5, 8] # liste des abscisses
y = [3, -1, -3, -2] # liste des ordonn´ees
plt.plot(x,y) # Cr´ee le graphique... mais ne l’affiche pas !!
plt.show() # affiche le graphique
On peut pr´eciser la couleur, par exemple plot(x,y,’r’) tracera en rouge (’b’ en bleu, ’g’ en vert etc. . .). Si on souhaite
ne tracer que les points sans les relier, il suffit de remplacer par plot(x,y,’o’). On peut combiner ces derni`eres options,
par exemple :
x = [ 0.01*k for k in range(200) ]
y = [ t**2 for t in x]
plt.plot(x,y,’ro’)
tracera en rouge et uniquement les points Pkde la parabole y=x2d’abscisse 0.01kavec kJ0,199K.
Nous aurons aussi besoin de fixer l’intervalle de l’axe des abscisses et des ordonn´ees. Pour cela, on peut utiliser les
commandes xlim et ylim :
Lyc´
ee Louis Thuillier 311 septembre 2014
PC & PC* 2014–2015 – Informatique pour tous TP – Marche al´
eatoire
plt.xlim( -20, 10)
plt.ylim( -2, 30)
plt.plot([1,2],[2,3])
plt.show()
Ces commandes fixe l’intervalle en xet yet trace la ligne reliant P1(1,2) et P2(2,3).
Q5.´
Ecrire une fonction polygone(N) tra¸cant un polygone r´egulier de taille N.
Pour les fonctions trigonom´etriques, on utilisera la biblioth`eque math.
Q6. Tracer sur un mˆeme graphique le graphe de la fonction sin et arctan sur [2,2].
Rappel : Mod`ele de la marche au hasard unidimensionnelle
On consid`ere des particules qui diffusent `a une dimension dans un milieu (direction (Ox)). Pour ´etudier cette diffusion,
on consid`ere que les particules font toutes des «sauts de puce », soit vers la droite, soit vers la gauche, de la mˆeme
longueur `(distance quadratique moyenne) `a la mˆeme vitesse v(vitesse quadratique moyenne), chaque saut durant
τ=`
v.
En raison du grand nombre de particules et d’´etapes `a ´etudier, l’´etude de la marche au hasard, mˆeme unidimensionnelle,
est difficile `a ´etudier sans ordinateur et se prˆete particuli`erement `a une ´etude informatique.
Pour simplifier la mod´elisation informatique, on adimensionnera toutes ces grandeurs en prenant `= 1 et τ= 1 (les
positions et les instants sont num´erot´es au lieu d’ˆetre mesur´es).
2 Marche au hasard 1D non biais´ee
2.1 ´
Etude du mouvement d’une particule
On consid`ere une particule qui part de x= 0 `a t= 0. On notera nle num´ero du saut, un le d´eplacement de la particule
durant le saut num´ero net xnla position de la particule apr`es le saut num´ero n.`
A chaque ´etape, elle se d´eplace de 1
vers la gauche ou de 1 vers la droite avec la mˆeme probabilit´e. Ainsi unvaut +1 ou 1 avec une probabilit´e 1/2.
Q7. Quelle est la valeur minimale de xn? Sa valeur maximale ?
Q8.´
Ecrire une fonction un_saut(x) qui modifie la position de la particule pendant 1 saut et qui renvoie x.
Q9.´
Ecrire une fonction position(n) qui donne la position de la particule apr`es nsauts.
D´eterminer cette position pour 10 particules pour 10 sauts. Comparer les r´esultats.
La pr´evision de Q1 est-elle v´erifi´ee ?
Q10. On va maintenant tracer l’´evolution de la position d’une particule dans le temps.
´
Ecrire une fonction graphe1(n) qui trace xnen fonction de n.
Utiliser cette fonction pour n= 50. Si vous tracez plusieurs fois ce mˆeme graphe, vous vous apercevez que le r´esultat
est `a chaque fois diff´erent.
2.2 ´
Etude avec plusieurs particules
La diffusion de particules ne se con¸coit pas pour une particule unique, mais pour une collection importante de particules.
On notera ple nombre de particules utilis´ees.
Q11.´
Ecrire un programme graphe2(p,n) qui permette de tracer les trajectoires de pparticules pendant n´etapes.
Tracer alors la trajectoire de 10 particules pour n = 50.
Le probl`eme est que ¸ca devient tr`es vite fouillis. On va donc envisager une autre fa¸con de repr´esenter la diffusion des
particules : on va tracer la epartition des pparticules en fonction de l’instant n.
Q12.´
Etant donn´e un tableau Xdonnant la position des particules apr`es n´evolutions, ´ecrire une fonction Repartition(X,n)
renvoyant une liste Rde taille 2n+ 1 telle que pour kJ0,2nK;R[k] donne le nombre de particules `a la position
n+k.
En d´eduire une fonction trace(X,n) tra¸cant la r´epartition des particules.
Tracer la r´epartition pour p = 500 et n = 50.
Q13.`
A quoi ressemble cette r´epartition ?
La tracer `a nouveau pour p= 50 et p = 5000. Commenter.
Sur quelle valeur de p va-t-on travailler parmi les 3 propos´ees ?
Q14. On a vu dans le cours qu’on pouvait d´eterminer des distances caract´eristiques de la r´epartition : la distance moyenne
parcourue et la distance quadratique moyenne.
Que doit valoir la distance moyenne ?
Il est possible de calculer la moyenne d’un tableau de nombre `a l’aide de la commande mean de la biblioth`eque
numpy. Ainsi les commandes :
Lyc´
ee Louis Thuillier 411 septembre 2014
PC & PC* 2014–2015 – Informatique pour tous TP – Marche al´
eatoire
T = [1,3,5,4,7]
np.mean(T)
renverra la moyenne des valeurs de Tc’est `a dire 4. V´erifier le r´esultat th´eorique pr´ec´edent.
´
Ecrire une fonction d_quad(X) qui calcule la distance quadratique moyenne.
Q15. Dans le cours, nous avons vu la relation entre la distance quadratique moyenne et le coefficient de diffusion :
x2
n=D×to`u ∆test le temps ´ecoul´e.
Ici, ¸ca reviendrait `a d quad2=n.
Tracer (d_quad)**2 en fonction de npour le v´erifier.
Q16. On veut maintenant comparer la r´epartition des particules avec la gaussienne th´eorique attendue, de la forme :
N(x, n) = 2p
2πn ex2
2n
o`u N(x, n) est le nombre de particules en xau temps n.
Le faire pour diff´erentes valeurs de pet n.
3 Marche au hasard 1D avec biais
On consid`ere maintenant que la probabilit´e d’aller vers la gauche n’est pas la mˆeme que celle d’aller vers la droite
(celle d’aller vers la droite sera not´ee a, avec 0 <a<1).
Q17.´
Ecrire une fonction position_avec_biais(n,a) qui donne la position de la particule apr`es nsauts.
Pour les exemples, on prendra a= 0.60.
Q18. Reprendre les fonctions pr´ec´edentes pour tracer la r´epartition des particules `a diff´erents instants n et pour diff´erents
nombres p de particules, d´eterminer la distance moyenne et la distance quadratique moyenne (on pourra les tracer
en fonction de npour passez grand).
Que peut-on dire ?
R´ecrire l’´equation de la gaussienne en tenant compte de cette remarque et la tracer sur le mˆeme graphe que la
r´epartition.
V´erifier avec une autre valeur de a.
4 Diffusion de particules sur un segment ferm´e
On consid`ere un segment form´e de ccases, contenant des particules.
Q19. Il s’agit tout d’abord de r´epartir les pparticules sur les ccases avec une probabilit´e croissant lin´eairement (aucune
particule en 0, le maximum en c).
Cr´eer une fonction S_initialisation(N) qui g´en`ere un ensemble de Nparticules r´ealisant cette r´epartition.
Les conditions d’´evolution des particules dans le segment sont les mˆemes que pr´ec´edemment (pas de biais) et sur bords
on convient :
les particules des extr´emit´es ont 1 chance sur 2 de rester o`u elles sont
1 chance sur 2 de se d´eplacer.
Q20.´
Ecrire une fonction S_evolution(n) qui r´ealise n´etapes.
Q21. On peut maintenant r´eutiliser la fonction trace pour tracer les r´epartitions initiale et finale, ou l’adapter pour tracer
les 2 d’un coup.
Commenter les graphes obtenus.
Lyc´
ee Louis Thuillier 511 septembre 2014
1 / 5 100%
La catégorie de ce document est-elle correcte?
Merci pour votre participation!

Faire une suggestion

Avez-vous trouvé des erreurs dans linterface ou les textes ? Ou savez-vous comment améliorer linterface utilisateur de StudyLib ? Nhésitez pas à envoyer vos suggestions. Cest très important pour nous !