WICHTIG: Der Betrieb von goMatlab.de wird privat finanziert fortgesetzt. - Mehr Infos...

Mein MATLAB Forum - goMatlab.de

Mein MATLAB Forum

 
Gast > Registrieren       Autologin?   

Partner:




Forum
      Option
[Erweitert]
  • Diese Seite per Mail weiterempfehlen
     


Gehe zu:  
Neues Thema eröffnen Neue Antwort erstellen

Dynamischer Variablenname

 

SuperUke
Forum-Newbie

Forum-Newbie


Beiträge: 3
Anmeldedatum: 30.06.07
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 04.07.2007, 11:58     Titel: Dynamischer Variablenname
  Antworten mit Zitat      
Servus,

gibt es im MATLAB eine Möglichkeit, Variablennamen dynamisch zu erzeugen. Z.B in einer Schleife a la:

Code:
for k = 1:1:3
    variable_k = irgendwas
end
Private Nachricht senden Benutzer-Profile anzeigen


Bijick
Ehrenmitglied

Ehrenmitglied



Beiträge: 914
Anmeldedatum: 18.06.07
Wohnort: Nürnberg
Version: R2006b, R2008b
     Beitrag Verfasst am: 04.07.2007, 14:02     Titel: Variable Variablennamen
  Antworten mit Zitat      
Hallo SuperUke,

Das passt zu der Frage zum Ändern von Variablennamen: Auch hier gelingt das Kunststück mit assignin:

Code:

for k = 1:1:3
    assignin ('base',['variable_' num2str(k)], irgendwas);
end
 


Kommentar:
Es genügt zu schreiben: "for k = 1:3", da der Default-Wert für die mittlere Zahl 1 ist.
'base' bezeichnet den allgemeinen Workspace; hier kann auch ein spezieller angegeben werden, siehe "assignin" in der Hilfe.
['variable_' num2str(k)] bewirkt, dass an den String 'variable_' derjenige String angehängt wird, der durch die Zahl k repräsentiert wird, m.a.W. die Zahl k muss mit num2str in den String 'k' umgewandelt werden.

Herzliche Grüße
Bijick
_________________

>> why
Private Nachricht senden Benutzer-Profile anzeigen E-Mail senden
 
Titus
Forum-Meister

Forum-Meister


Beiträge: 871
Anmeldedatum: 19.07.07
Wohnort: Aachen
Version: ---
     Beitrag Verfasst am: 19.07.2007, 17:15     Titel:
  Antworten mit Zitat      
Häufig lässt sich das Erzeugen von Variablen auf diese Weise leicht durch die Verwendung von cell arrays vermeiden, siehe
http://www.mit.edu/~pwb/cssm/matlab-faq.html#evalcell

Titus
Private Nachricht senden Benutzer-Profile anzeigen
 
Michaela
Forum-Century

Forum-Century


Beiträge: 239
Anmeldedatum: 12.07.07
Wohnort: ---
Version: bis 2007b
     Beitrag Verfasst am: 19.07.2007, 23:17     Titel:
  Antworten mit Zitat      
Wie ist das eigentlich mit der Rechenzeit? Eval ist ja vermutlich am langsamsten. Sind cell-arrays am vorteilhaftesten, oder kommt man sogar evtl. mit set('fieldname') für ein struct-array schneller hin?

Wie verhält sich assignin im Verhältnis zu cell-arrays. Würde mich über Erfahrungsberichte freuen.... ich kam noch nicht zum Ausprobieren. Crying or Very sad
Private Nachricht senden Benutzer-Profile anzeigen
 
joekey
Forum-Century

Forum-Century


Beiträge: 169
Anmeldedatum: 03.04.08
Wohnort: Wien
Version: 2011b
     Beitrag Verfasst am: 17.04.2008, 23:32     Titel:
  Antworten mit Zitat      
Hallo,

mich hätte interessiert ob man auch globale Variablen dynamisch erzeugen kann. Resp. ob man eine lokale Variable (zB. Char) in eine globale umwandeln kann, ohne dass inhalt verloren geht.

Falls ja, wie sind dann die schritte.

Danke Joe
Private Nachricht senden Benutzer-Profile anzeigen
 
Beijing10

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 21.05.2010, 14:43     Titel: Aufrufen Dynamische Variable
  Antworten mit Zitat      
Ich habe das Problem, dass ich nicht weiß, wie ich z.B. die Länge der erzeugten Variablen dann bestimme. (Außer natürlich explizit l=length(Group_B1) zu schreiben)

Sowas wie:

assignin ('base',['Group_B' num2str(i)],phiB(c:z,Smile);
laenge=length('Group_B', num2str(i)]

funktioniert leider nicht.

Danke für die Hilfe
 
denny
Supporter

Supporter



Beiträge: 3.853
Anmeldedatum: 14.02.08
Wohnort: Ulm
Version: R2012b
     Beitrag Verfasst am: 21.05.2010, 15:05     Titel:
  Antworten mit Zitat      
Hallo

dazu muss du mit EVALIN arbeiten:
Code:

i = 1
assignin('base',sprintf('Group_B%d',i),[1:100]);
laenge=evalin('base',sprintf('length(Group_B%d)', i))

 
Private Nachricht senden Benutzer-Profile anzeigen
 
JL12345

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 13.02.2013, 15:47     Titel:
  Antworten mit Zitat      
hallo zusammen
ich weiß das kommt etwas spät, passt aber noch zu dem Thema. Folgendes Problem. Ich möchte zu denm variablennamen auch noch den indizes in der Variable dynmisch verwalten.
also zum beispiel sowas wie
Code:

for i = 1:10
     for j = 1:50
          if a == b
             assignin('base',['var_',num2str(j)](i),b)
          end
     end
end
 

dass also der wert b der variable var_j an der stelli i zugewiesen wird
geht das irgendwie??

danke im Voraus
LGJL
 
denny
Supporter

Supporter



Beiträge: 3.853
Anmeldedatum: 14.02.08
Wohnort: Ulm
Version: R2012b
     Beitrag Verfasst am: 13.02.2013, 17:21     Titel:
  Antworten mit Zitat      
Hallo
So was geht nicht mit ASSIGNIN.
Das würde zwar mit EVALIN gehen. Aber davon ist abzuraten, weil ist nicht debugbar ist und sehr schwer zu lesen/verstehen.

Besser wäre an dieser Stelle CELLs oder Dynamische Felder zu verwenden.

für CELL:
Code:


for i = 1:10
     for j = 1:50
          if a == b
             var{j}(i)=b
          end
     end
end

 


als Dynamische Felder
Code:
for i = 1:10
     for j = 1:50
          if a == b
             mystruct.(sprintf(var_%d, j)) (i) = b
          end
     end
end



als evalin
Code:
for i = 1:10
     for j = 1:50
          if a == b
             evalin('base',sprintf('var_%d(%d)=%d;',j,i,b))
          end
     end
end
Private Nachricht senden Benutzer-Profile anzeigen
 
JL12345

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 13.02.2013, 17:36     Titel:
  Antworten mit Zitat      
da ich das ganze dannach als zeitreihe plotten will hab ich mich für die evalin variante entschieden. Danke vielmals funktioniert super!!=)

LGJL
 
JL12345

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 13.02.2013, 17:40     Titel:
  Antworten mit Zitat      
sag mal kann mann bei evalin die ausgabe unterdrücken?
 
denny
Supporter

Supporter



Beiträge: 3.853
Anmeldedatum: 14.02.08
Wohnort: Ulm
Version: R2012b
     Beitrag Verfasst am: 13.02.2013, 18:03     Titel:
  Antworten mit Zitat      
Strich Punkt im String-Ausdruck am Ende setzen

evalin('base',sprintf('var_%d(%d)=%d;',j,i,b))
Private Nachricht senden Benutzer-Profile anzeigen
 
Jan S
Moderator

Moderator


Beiträge: 11.057
Anmeldedatum: 08.07.10
Wohnort: Heidelberg
Version: 2009a, 2016b
     Beitrag Verfasst am: 15.02.2013, 00:13     Titel:
  Antworten mit Zitat      
Hallo JL12345,

Ich ratre ausdrücklich von EVAL, EVALIN und ASSIGNIN ab. Diese Methoden zur ferngesteuerten Erzeugung von Variablen macht Matlab langsam und das Debuggen und Warten des Codes unnötig kompliziert.
Man findet viele viele Details dazu im Forum.

Gruß, Jan
Private Nachricht senden Benutzer-Profile anzeigen
 
Samoth
Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 70
Anmeldedatum: 13.01.16
Wohnort: ---
Version: R2013b
     Beitrag Verfasst am: 01.08.2016, 14:50     Titel: Aufsummieren
  Antworten mit Zitat      
Hallo,
funktioniert das Aufsummieren dynamischer Variablen dann mit evalin????

Gruß
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.452
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 01.08.2016, 15:44     Titel:
  Antworten mit Zitat      
Hallo,

man kann sicher mit dynamischen Variablen arbeiten und, je nachdem in welchem Workspace sie sich befinden, mit eval(in) arbeiten.
Ich würde es aber auf jeden Fall vermeiden, siehe die Vorposter, insbesondere
15.02.2013, 00:13
13.02.2013, 17:21 (Beispiel zur Vermeidung von evalin)
19.07.2007, 17:15

Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
Neues Thema eröffnen Neue Antwort erstellen

Gehe zu Seite 1, 2  Weiter

Einstellungen und Berechtigungen
Beiträge der letzten Zeit anzeigen:

Du kannst Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum antworten.
Du kannst deine Beiträge in diesem Forum nicht bearbeiten.
Du kannst deine Beiträge in diesem Forum nicht löschen.
Du kannst an Umfragen in diesem Forum nicht mitmachen.
Du kannst Dateien in diesem Forum posten
Du kannst Dateien in diesem Forum herunterladen
.





 Impressum  | Nutzungsbedingungen  | Datenschutz | FAQ | goMatlab RSS Button RSS

Hosted by:


Copyright © 2007 - 2024 goMatlab.de | Dies ist keine offizielle Website der Firma The Mathworks

MATLAB, Simulink, Stateflow, Handle Graphics, Real-Time Workshop, SimBiology, SimHydraulics, SimEvents, and xPC TargetBox are registered trademarks and The MathWorks, the L-shaped membrane logo, and Embedded MATLAB are trademarks of The MathWorks, Inc.