Bonjour,
Voici ce qu'on me demande de faire. On considère une suite An de sous-ensembles de Z² qui croît selon la règle suivante : à l'étape n, une particule est lancée à l'origine et se déplace jusqu'à ce qu'elle sorte de An par un point X. Elle se déplace suivant une marche aléatoire simple : soit au Nord, au Sud, à l'Est ou à l'Ouest avec une probabilité 1/4.
On commence avec A1 = {(0,0)}. On note A(n+1) = An union X.
Pour être plus claire, à l'étape 1, la particule se promène dans A1 = {(0,0)}.
- Si elle sort de A1 par le point (0,1) (Nord), alors A2 = {(0,0),(0,1)}.
- Si elle sort de A1 par le point (0,-1) (Sud), alors A2 = {(0,0),(0,-1)}.
- Si elle sort de A1 par le point (1,0) (Est), alors A2 = {(0,0),(1,0)}.
- Si elle sort de A1 par le point (-1,0) (Ouest), alors A2 = {(0,0),(-1,0)}.
On cherche à représenter graphiquement An pour n grand.
Lorsque n est grand, la forme limite de An est censée être un "rond". Voici un exemple de A(1000) :
Voici mon code, j'avais cru comprendre que la particule se déplaçait uniquement sur les axes abscisses ou ordonnées...
Comme vous le voyez, les résultats sont complètement faux.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27 function y=croissZ2(n) A0=[0 0] B0=[0 0] i=1;j=1 while (i+j)<n e=2*rand()-1 f=2*rand()-1 if ((e<0) & (f<0)) A0=[[(A0(1,1)-1),0];A0]; i=i+1 elseif ((e<0) & (f>0)) A0=[A0;[(A0(i,1)+1),0]]; i=i+1 elseif ((e>0) & (f<0)) B0=[[0,(B0(1,2)-1)];B0]; j=j+1 else B0=[B0;[0,(B0(j,2)+1)]]; j=j+1 end end y=[A0;B0] plot2d(y) endfunction disp(croissZ2(1000))
Sauf qu'étant débutante, je ne vois pas du tout comment faire pour que An soit un cercle quand n est grand... Que faut-il changer dans mon code (vous allez me répondre "tout" xD) ? Je ne vois vraiment pas. Ça fait 3 jours que je bosse dessus, je serais très reconnaissante à la personne qui voudra bien m'aider... Bonne journée.
Partager