Supposons que je souhaite créer 10 variables qui ressembleraient à ceci:
x1 = 1;
x2 = 2;
x3 = 3;
x4 = 4;
.
.
xi = i;
Il s'agit d'une version simplifiée de ce que j'ai l'intention de faire. Fondamentalement, je veux simplement enregistrer les lignes de code en créant ces variables de manière automatisée. Y a-t-il la possibilité de construire un nom de variable dans Matlab? Le modèle dans mon exemple serait ["x", num2str(i)]
. Mais je ne peux pas trouver un moyen de créer une variable avec ce nom.
Vous pouvez le faire avec eval mais vous devriez vraiment pas
eval(['x', num2str(i), ' = ', num2str(i)]); %//Not recommended
Utilisez plutôt un tableau de cellules:
x{i} = i
Je conseille également fortement d'utiliser un tableau de cellules ou une structure pour de tels cas. Je pense que cela vous donnera même une amélioration des performances.
Si vous en avez vraiment besoin, Dan vous a expliqué comment le faire. Mais je voudrais également souligner la fonction genvarname
. Il s'assurera que votre chaîne est un nom de variable valide.
EDIT: genvarname fait partie du noyau matlab et non de la boîte à outils des statistiques
for k=1:10
assignin('base', ['x' num2str(k)], k)
end
Bien qu'il soit attendu depuis longtemps, je voulais juste ajouter une autre réponse.
la fonction genvarname est exactement pour ces cas
et si vous l'utilisez avec un tableau de structure tmp, vous n'avez pas besoin de la cmd eval
l'exemple 4 de ce lien est de savoir comment le faire http://www.mathworks.co.uk/help/matlab/ref/genvarname.html
for k = 1:5
t = clock;
pause(uint8(Rand * 10));
v = genvarname('time_elapsed', who);
eval([v ' = etime(clock,t)'])
end
bonne chance
eyal
Si quelqu'un d'autre est intéressé, la syntaxe correcte de la réponse de Dan serait:
eval(['x', num2str(i), ' = ', num2str(i)]);
Ma question contenait déjà la mauvaise syntaxe, c'est donc ma faute.
J'avais besoin de quelque chose comme ça, car vous ne pouvez pas référencer des structures (ou des tableaux de cellules, je suppose) à partir de l'espace de travail dans les blocs Simulink si vous voulez pouvoir les modifier pendant la simulation.
Quoi qu'il en soit, pour moi, cela a fonctionné le mieux
assignin('base',['string' 'parts'],values);