Bonjour,
en fait, ce n'est pas une question, mais une découverte que je veux partager ici avec vous.
Dans la première boucle for, on demande à Matlab de parcourir avec la vairaible i toutes les valeurs du vecteur ligne M. Dans ce cas, on est bien d'accord que M est instancié (il occupre une vraie place dans la vraie mémoire).
La question est la suivante : dans la deuxième boucle, qui revient exactement au même, est-ce que le vecteur 1:10 est instancié ?La réponse est non. La preuve par ce peitit code :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12 M = 1:10 ; for i=M if i<10 disp(i) ; end end for i=1:10 if i<10 disp(i) ; end end
Savoir ça est-il utile ?
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 function test_infinite_loop s = warning('off', 'MATLAB:warn_truncate_for_loop_index') ; % disable warning for infinite for loops for i = 1:inf % sans la ligne ci-dessus, on auraut à la console : warning FOR loop index is too large. Truncating to 281474976710655. if i>10 break end end warning(s) ; % reset warnings to previous state j = 1:281474976710655 ; % Error using ==> colon Maximum variable size allowed by the program is exceeded. for i=j if i>10 break end end
Oui
car je peux faire des boucles for infinies à la place des boucles while infinie. L'intérêt est que je récupère "gratuitement" un compteur du nompbre de tours effectué.
Au lieu de :
Je trouve plus joli d'écrire :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 k=0 ; while true k=k+1 ; ... code qui utilise k ; end
Plus d'info ici : http://blogs.mathworks.com/loren/200...ges-and-state/
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 warning('off', 'MATLAB:warn_truncate_for_loop_index') ; for k=1:inf ... code qui utilise k ; end
Partager