MATLAB: Comment rendre ce code plus efficace pour qu’il s’exécute plus rapidement

Bonjour, je travaille actuellement sur une affectation de codage qui veut que je suive une personne qui marche pendant 2500 étapes tout en utilisant un générateur de nombres aléatoires entre 1 et 2 pour déterminer si le marcheur marche à gauche ou à droite pour chaque étape. De plus, je suis censé exécuter la simulation pendant X fois (X = [1000, 2500, 10000, 25000, 100000, 1000000]), créant ainsi 6 « ensembles ». Je suis ensuite censé enregistrer l’emplacement final du déambulateur à la fin de chaque simulation, puis générer un histogramme composé des positions de fin pour chaque ensemble. Maintenant, j’ai déjà créé mon propre code, et il génère 5 des 6 histogrammes nécessaires (qui, je suppose, sont corrects). Cependant, cela prendra souvent plus de 20 minutes pour réellement produire quoi que ce soit et même dans ce cas, il ne s’exécute pas complètement pour une raison quelconque. Voici mon code:
 
% 1 = step left
% 2 = step right
X = [1000, 2500, 10000, 25000, 100000, 1000000] ;
for k = 1:length(X)
Final = zeros(1,X(k)) ;
for j = 1:X(k)
for i = 1:2500
W = randi(2) ;
if W == 1 % Left
Final(j) = Final(j) - 1 ;
else % Right
Final(j) = Final(j) + 1 ;
end
end
end
figure
histogram(Final,50)
end
 

Meilleure réponse

  • Puisque l’ordre des étapes n’a pas d’importance, qu’en est-il de cela?
     

    X = [1000, 2500, 10000, 25000, 100000, 1000000];
    for k = 1:length(X)
    Final = zeros(1,X(k));
    for j = 1:X(k)
    W = randi(2,2500,1); % generate all 2500 steps at once
    Final(j) = sum(W==2) - sum(W==1); % 2s are forwards, 1s are backwards
    end
    figure
    histogram(Final,50)
    drawnow
    end