Bonjour et merci pour ta réponse !
J'ai changé le nom d'une des variables et j'ai mis la ligne plot à la fin de la boucle comme tu me le conseillais, effectivement le script fonctionne déjà mieux.
En ce qui concerne la préallocation, j'ai lu la FAQ mais tout ça reste assez flou pour moi... Comment puis-je l'intégrer dans mon script ?
Pour répondre à ta question, j'ai essayé ce genre de script juste pour voir si ça fonctionnait :
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 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55
| clear all; close all;
% Marche aléatoire dans un espace à deux dimensions
npmax=5; %nombre de particules
itmax=50000; %nombre de pas
J=rand; %rand correspond à une sélection aléatoire d'une valeur dans [0,1[
x(1)=100*J; %position initiale de la particule en X
y(1)=100*J; %position initiale de la particule en Y
opt={'r' 'g' 'k' 'b' 'm'}; %couleurs des trajectoires
hold on
for n=1:npmax
for i=1:itmax;
J=rand;
if (x(i+1)>100)&&(x(i+1)<200)&&(y(i+1)>100)&&(y(i+1)<200);
if J<0.25
x(i+1)=x(i)+10;
y(i+1)=y(i);
elseif (J>0.25)&&(J<0.5)
x(i+1)=x(i)-10;
y(i+1)=y(i);
elseif (J>0.5)&&(J<0.75)
x(i+1)=x(i);
y(i+1)=y(i)+10;
else
x(i+1)=x(i);
y(i+1)=y(i)-10;
end
else
if J<0.25
x(i+1)=x(i)+1;
y(i+1)=y(i);
elseif (J>0.25)&&(J<0.5)
x(i+1)=x(i)-1;
y(i+1)=y(i);
elseif (J>0.5)&&(J<0.75)
x(i+1)=x(i);
y(i+1)=y(i)+1;
else
x(i+1)=x(i);
y(i+1)=y(i)-1;
end
end
plot(x,y,opt{n})
axis ([-500 500 -500 500])
end
end
hold off |
Lorsque je lance le programme, le message d'erreur suivant s'affiche :
??? Attempted to access x(2); index out of bounds because numel(x)=1.
Error in ==> untitled at 16
if (x(i+1)>100)&&(x(i+1)<200)&&(y(i+1)>100)&&(y(i+1)<200);
Ça serait un problème de concaténation si j'ai bien compris mais je ne sais pas comment le résoudre...
Partager