Eval et nom de variable sur Matlab

Résolu/Fermé
Use_Soap Messages postés 3 Date d'inscription dimanche 15 mars 2009 Statut Membre Dernière intervention 17 mars 2009 - 15 mars 2009 à 21:17
Sacabouffe Messages postés 9427 Date d'inscription dimanche 19 août 2007 Statut Membre Dernière intervention 29 mai 2009 - 15 mars 2009 à 23:21
Bonjour,

Après avoir trouvé un post qui m'a été d'une grande aide, j'aurai besoin d'un peu plus d'aide pour mettre en oeuvre ma boucle

Voici ce que j'ai fait :

x =9
for u=0:x;

for i=1:6;
for j=1:6;
eval(['K' num2str(u+1) ' = zeros(33,33)'];
eval(['K' num2str(u+1) ' (3*u+i,3*u+j) = K' num2str(u+1) ' (3*u+i,3*u+j) + 'k' num2str(u+1)' (i,j)'])
end;
end;

end;

En gros j'ai 10 petites matrices de taille 6x6 ( k1 jusqu'à k10), et je veux les mettre au bon endroit dans 10 plus grandes matrices de taille 33x33 ( K1 jusqu'à K10 )

Je crois que le principe est bon, les matrices vont au bon endroit par contre, je n'arrive pas gérer le eval pour appeler les bonnes matrices et nommes les autres

Voilà, merci par avance pour votre aide
Et désolé d'être aussi bref mais comme à chaque fois, je m'y prends au dernier moment :D

3 réponses

Sacabouffe Messages postés 9427 Date d'inscription dimanche 19 août 2007 Statut Membre Dernière intervention 29 mai 2009 1 832
15 mars 2009 à 22:57
Salut

Il est totalement inutile de poster ton message en plusieurs exemplaires, t'auras pas une réponse plus vite, bien au contraire.

Y a moult erreurs dans les lignes que t'as écrites.
1) Il manque une parenthèse dans le premier eval.
2) Il manque une espace et il y a une apostrophe en trop dans le deuxième eval (définition des Kn).
3) Tu réinitialises tes matrices Kn à chaque passage dans les boucles i et j. Au final, même en corrigeant le deuxième eval (définition des Kn), tu mettrais dans les Kn une seule valeur, la dernière de toutes celles que tu voudrais mettre. La correction donnerait ça...
x=9;
for u=0:x
eval(['K' num2str(u+1) '= zeros(33);']);
for p=1:6
for q=1:6
eval(['K' num2str(u+1) '(3*u+p,3*u+q)=K' ...
num2str(u+1) '(3*u+p,3*u+q)+k' num2str(u+1) '(p,q);']);
end
end
end
Mais ces 3 boucles, c'est pas vraiment utile. Une simplification possible donnerait ça...
x=9;
for u=0:x
eval(['K' num2str(u+1) '=blkdiag(zeros(3*u),k' ...
num2str(u+1) ',zeros(27-3*u));']);
end
Bonne nuit
0
Use_Soap Messages postés 3 Date d'inscription dimanche 15 mars 2009 Statut Membre Dernière intervention 17 mars 2009
15 mars 2009 à 23:08
Vi dsl pour le double post, j'ai vu trop tard que mon premier post était dans un sujet déjà résolu et après, j'ai oublié de l'effacer :)

En tout cas, merci beaucoup pour toutes ces infos
Je vais essayer de mettre en oeuvre tout ça ( n'ayant jamais utilisé Matlab, il se peut que je galère encore un peu :D )
0
Sacabouffe Messages postés 9427 Date d'inscription dimanche 19 août 2007 Statut Membre Dernière intervention 29 mai 2009 1 832
15 mars 2009 à 23:21
OK, pas grave pour le double post. ;-)
Tu peux pas effacer totalement un message ; pour le faire supprimer, faut alerter la modération en cliquant sur le triangle jaune.
Bon beh sinon, y a pas de quoi ! ;-)
Si t'as d'autres soucis, repasse mais fais un nouveau sujet si la question est très différente de celle-ci.
D'abord parce que j'ai pas réponse à tout et aussi parce qu'un sujet sans réponse a plus de chance d'être visité qu'un sujet dans lequel quelqu'un est déjà intervenu et que si la personne qu'avait répondu la première fois est pas là, tu risques d'attendre une réponse un bon bout de temps dans le "vieux" sujet que t'auras fait remonter.
Ciao
0