Petit sujet d`étude : étude d`une marche

publicité
Institut Galilée, MACS
Langage C : programmation avancée pour le calcul scientifique, petit sujet d’étude
Petit sujet d’étude : étude d’une marche aléatoire sur réseau
monodimensionnel, simulation du mouvement brownien en une dimension
S. Kokh 1
On se propose de simuler le mouvement d’une collection de particules contraintes à se déplacer sur un
réseau périodique 1D de manière aléatoire. Soient ∆t > 0 et ∆x > 0.
Description du réseau : on considère une suite de 2nx + 1 nœuds xk répartis sur l’intervalle réel
[xMin , xMax ] comme à la figure 1.
x0 = xMin < x1 < · · · < xnx −1 < xnx = 0 < xnx +1 < · · · < x2nx −1 < x2nx = xMax .
La répartition est régulière, de sorte que
xk = xMin + k∆x,
x0
x1
∆x =
xMax − xMin
,
2nx
xnx −1 xnx xnx +1
k = 0, . . . , 2nx .
x2nx −1 x2nx
Figure 1 – Réseau discret
Description des particules et leur mouvement : on considère une famille de nbParticles particules.
Les particules sont telles que :
— chaque particule à une masse éagle à 1/nbParticles ;
— plusieurs particules peuvent se trouver au même point de l’espace.
La position des particules est déterminée par la règle suivante :
— à l’instant t = 0 toutes les particules se trouve au nœud xnx = 0 ;
— chaque particule change de position au bout d’une durée ∆t. Elle a une probabilité 0.5 de se deplacer
de +∆x et une probabilité 0.5 de se déplacer de −∆x.
Conditions aux limites : periodicité. On simulera la présence de conditions aux limites périodiques
pour le problème en imposant qu’une particule située en x2nx (resp. x0 ) se déplaçant de +∆x (resp. −∆x)
se retrouvera au terme de son déplacement en x0 (resp. x2nx ).
Travail demandé : écrivez un programme qui simule le déplacement de la famille de particules décrite
ci-dessus. En particulier :
— on laissera chaque particule effectuer n déplacements, de sorte que n∆t < tMax ;
— au terme des déplacement de toute les particules, on calculera mk la masse totale de particule présentes
dans l’intervalle (xk − ∆x/2, xk + ∆x/2), k = 0, . . . , 2nx ;
— on affichera à sur la sortie standard pour k = 0, . . . , 2nx le couple de réels
(xk , mk ),
chaque couple étant affiché sur une ligne, et pour chaque couple, les éléments seront séparés par des
espaces. On devrait obtenir sur la sortie standard
x0
x1
m0
m1
..
.
xk
mk
..
.
1. [email protected]
1/2
Institut Galilée, MACS
Langage C : programmation avancée pour le calcul scientifique, petit sujet d’étude
— comme post-traitement, grâce à une redirection (pipe) on écrira la sortie standard dans un fichier que
l’on affichera avec gnuplot.
Pour les applications, on utilisera les valeurs suivantes
xMin = −1,
xMax = 1,
nx = 500, nbParticle = 106 ,
tMax = 2 × 10−3 , ∆t = ∆x2 .
Indications
— on pourra utiliser la fonction de la librarie standard
long int random(void)
qui retourne un entier pseudo-aléatoire entre compris entre 0 et RAND MAX (en cas de besoin d’informations supplémentaires utilisez le web ou alors man random dans un terminal).
— on comparera le résulat de la sortie standard grâce à gnuplot avec le graphe de la fonction
x 7→ √
x2
4 × 10−3
−
e 2×2×10−3 .
2π × 2 × 10−3
— on pourra utiliser la fonction de la librarie mathmétique
double floor(double x)
qui calcule la partie entière (en cas de besoin d’informations supplémentaires utilisez le web ou alors
man floor dans un terminal).
2/2
Téléchargement