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é ?
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
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
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
Savoir ça est-il utile ?
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 :
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
Je trouve plus joli d'écrire :
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
Plus d'info ici : http://blogs.mathworks.com/loren/200...ges-and-state/