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 pasCode:
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:
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 modifsCode:
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!