Bonjour,
D'après ce que j'ai pu lire sur le net, ce que je voudrai faire semblerait impossible, mais je me permets de poster le soucis pour bien comprendre pourquoi.
Comment faire pour assigner une valeur à un nom de variable dans une fonction?
Voila ce que j'aimerai faire, seulement la fonction "assign" n'existe pas
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 function []=abc() assign('my_var',3)
Pourtant avec eval, il existe "eval" et "evalin", alors pourquoi un "assignin" mais pas de "assign"?
Autrement dans assignin, on peut mettre 'base' ou 'caller' comme workspace, mais dans les 2 cas la variable créée n'est pas définie dans ma fonction!
Et maintenant un exemple complet de ce que je cherche à faire:
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
16
17
18 % initialisation i=1; y.nom{i}='seconde'; y.valeur(i)=30; y.actif(i)=1; i=i+1; y.nom{i}='minute'; y.valeur(i)=15; y.actif(i)=0; i=i+1; y.nom{i}='heure'; y.valeur(i)=4; y.actif(i)=1; j=1; for i=1:size(y.valeur,2) if y.actif(i)==1 x(j)=y.valeur(i); j=j+1; end end % La variable x sera ammenée à varier avec un algorithme d'optimisation temps=test(x,y);La solution "eval" c'est ce que j'ai trouvé pour le moment, seulement ça prend trop de temps, d'autant plus que je dois mettre beaucoup de chiffres à num2str pour que l'algo d'optim ne soit pas perdu quand il fait de toutes petites modifs
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 [temps]=test(x,y) j=1; for i=1:size(y.valeur,2) if y.actif(i)==1 % assignin('caller',y.nom{i},x(j)) eval([y.nom{i} '=' num2str(x(j),10) ';']) j=j+1; else % assignin('caller',y.nom{i},y.valeur(i)) eval([y.nom{i} '=' num2str(y.valeur(i),5) ';']) end end temps=seconde+minute*60+heure*3600;
Si quelqu'un a une idée complètement différente pour effectuer la même chose, je suis preneur
Merci!
Partager