Appel variable dynamique sous Matlab
Résolu
Joe
-
Ereizsil -
Ereizsil -
Bonjour à tous,
Je viens de créer des variables dynamiques à la manière de Sacabouffe, en utilisant la fonction eval telle que :
for p=1:100,
eval(['A' num2str(p) ' = fonction de p']);
end;
qui me donne cent variables A1...A100
Je souhaiterais faire appel à ces variables dans une boucle for. Et c'est là que je bloque au niveau de la syntaxe... Je pensais à une expression du genre :
for j=1:q
if sprintf(A%g,j)>seuil
blablabla
end
end
Pouvez vous m'éclairer ?
Je viens de créer des variables dynamiques à la manière de Sacabouffe, en utilisant la fonction eval telle que :
for p=1:100,
eval(['A' num2str(p) ' = fonction de p']);
end;
qui me donne cent variables A1...A100
Je souhaiterais faire appel à ces variables dans une boucle for. Et c'est là que je bloque au niveau de la syntaxe... Je pensais à une expression du genre :
for j=1:q
if sprintf(A%g,j)>seuil
blablabla
end
end
Pouvez vous m'éclairer ?
A voir également:
- Appel variable dynamique sous Matlab
- Nommez une application d'appel vidéo ou de visioconférence - Guide
- Tableau croisé dynamique - Guide
- Appel privé - Guide
- Exemple tableau croisé dynamique télécharger - Télécharger - Tableur
- Liste déroulante dynamique excel - Guide
6 réponses
Salut
À la manière de Sacabouffe ? :-D
Je pense pas que ce soit ma manière ; à mon avis c'est plutôt classique. ;-)
Pour ton truc, tu procèdes tout pareil :
Ciao
À la manière de Sacabouffe ? :-D
Je pense pas que ce soit ma manière ; à mon avis c'est plutôt classique. ;-)
Pour ton truc, tu procèdes tout pareil :
for j=1:q if eval(['A' num2str(j)]) > seuil blablabla end endC'est tout !
Ciao
Je viens d'essayer, cela fonctionne comme tu le dis. Merci bien !
En fait, je me rends compte que mes variable An seront des tableaux.
A partir de là, j'ai trouvé comment récupérer une valeur dans ces tableaux.
Voici mon exemple :
n=1;
eval(['A' num2str(n) ' = [3,5,8]'])
x=eval(['A' num2str(n)])
x(2)
Cependant, y a t'il possibilité de raccourcir le code en effectuant les opérations des deux dernières lignes en une seule du type eval(['A' num2str(n)]) (2) ?
Je viens d'essayer mais j'obtiens un message d'erreur.
En tous cas, merci beaucoup pour l'aide apportée.
Bonne après midi
En fait, je me rends compte que mes variable An seront des tableaux.
A partir de là, j'ai trouvé comment récupérer une valeur dans ces tableaux.
Voici mon exemple :
n=1;
eval(['A' num2str(n) ' = [3,5,8]'])
x=eval(['A' num2str(n)])
x(2)
Cependant, y a t'il possibilité de raccourcir le code en effectuant les opérations des deux dernières lignes en une seule du type eval(['A' num2str(n)]) (2) ?
Je viens d'essayer mais j'obtiens un message d'erreur.
En tous cas, merci beaucoup pour l'aide apportée.
Bonne après midi
Pas de quoi ;-)
Pour ton autre question, y a bien ça
C'est que t'as pas besoin des An ? Juste des An(2) ?
Sinon, donne l'expression des An pour voir, ça sera peut-être plus parlant que l'exemple court que t'as donné. Parce que là, en faisant directement x=5;, ça va encore plus vite. :-D
Mais bon, j'imagine que c'est bien différent pour ton code et que tu peux pas le faire...
Bon après-midi à toi aussi
Pour ton autre question, y a bien ça
eval(['A' num2str(n) ' = [3,5,8] ; x = A' num2str(n) '(2);']);Mais ça a pas grand intérêt, c'est la même chose que ce que t'as écrit en quelque sorte.
C'est que t'as pas besoin des An ? Juste des An(2) ?
Sinon, donne l'expression des An pour voir, ça sera peut-être plus parlant que l'exemple court que t'as donné. Parce que là, en faisant directement x=5;, ça va encore plus vite. :-D
Mais bon, j'imagine que c'est bien différent pour ton code et que tu peux pas le faire...
Bon après-midi à toi aussi
En fait, dans ma boucle for de 1 à n, je vérifie une condition sur les An(2) ... et je ne sais comment écrire ça :
if (tirage<proba) && (An(2)>seuil)
blabla
end
D'où ma question concernant la possibilité de réduire les 2 dernières lignes de mon bout de code du précédent message en une seule ... et c'est là que je vois pas trop comment faire !
Si quelqu'un a la solution ou des tuyaux ,je suis preneur !
if (tirage<proba) && (An(2)>seuil)
blabla
end
D'où ma question concernant la possibilité de réduire les 2 dernières lignes de mon bout de code du précédent message en une seule ... et c'est là que je vois pas trop comment faire !
Si quelqu'un a la solution ou des tuyaux ,je suis preneur !
Ah OK ! C'est tout !
Bon bon... J'avais pas du tout compris ce que tu voulais faire du coup.
Ben y a juste à rajouter la chaîne de caractères qu'il faut dans le eval alors.
Bon après-midi à toi aussi !
Bon bon... J'avais pas du tout compris ce que tu voulais faire du coup.
Ben y a juste à rajouter la chaîne de caractères qu'il faut dans le eval alors.
if (tirage < proba) && (eval(['A' num2str(n) '(2)']) > seuil) blabla endC'est bien ça ?
Bon après-midi à toi aussi !
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
Beh y a pas de quoi ! :-D
Et pis content que t'aies apprécié ta première sur un forum. ;-)
À bientôt peut-être !
Et pis content que t'aies apprécié ta première sur un forum. ;-)
À bientôt peut-être !
Bonjour,
J'avais le même souci que Joe et ai en partie trouver ici la réponse dont j'avais besoin.
Cependant, mon problème n'est toujours pas complètement résolu, j'espère donc que vous pourrez continuer à m'aider !
Alors voilà :
J'ai crée, grâce à la fonction eval(), une série de structures (21) dont les noms sont MatJ1, MatJ2... MatJ21. Chaque structure contient une matrice que l'on atteint par MatJX.d
Mon problème est que je veux maintenant pourvoir réatteindre ces matrices et calculer les coefficients de corrélation correspondants (CoefJ1... CoefJ21).
J'ai essayé de réutiliser la fonction eval et mon code ressemble à quelque chose comme ça :
for i=1:nbrJour
Jour=GrJour.g.i(i,:);
eval ('CoefJ' Jour '= corrcoef (MatJ' Jour '.d*MatJ' Jour '.d'' )');
end
Sachant que la variable Jour est de type string
En tous cas, tel quel, ça ne fonctionne pas... Alors si quelqu'un avait une idée ou pouvait m'expliquer ce qui ne va pas... Ce serait magnifique !
J'avais le même souci que Joe et ai en partie trouver ici la réponse dont j'avais besoin.
Cependant, mon problème n'est toujours pas complètement résolu, j'espère donc que vous pourrez continuer à m'aider !
Alors voilà :
J'ai crée, grâce à la fonction eval(), une série de structures (21) dont les noms sont MatJ1, MatJ2... MatJ21. Chaque structure contient une matrice que l'on atteint par MatJX.d
Mon problème est que je veux maintenant pourvoir réatteindre ces matrices et calculer les coefficients de corrélation correspondants (CoefJ1... CoefJ21).
J'ai essayé de réutiliser la fonction eval et mon code ressemble à quelque chose comme ça :
for i=1:nbrJour
Jour=GrJour.g.i(i,:);
eval ('CoefJ' Jour '= corrcoef (MatJ' Jour '.d*MatJ' Jour '.d'' )');
end
Sachant que la variable Jour est de type string
En tous cas, tel quel, ça ne fonctionne pas... Alors si quelqu'un avait une idée ou pouvait m'expliquer ce qui ne va pas... Ce serait magnifique !