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

Dynamische Variablennamen + Felder

 

Julia84

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 22.07.2011, 17:24     Titel: Dynamische Variablennamen + Felder
  Antworten mit Zitat      
Hallo forum!

hab mich nun schon den gesamten tag durch das forum gelesen und schon verschiedenes ausprobiert jedoch bin ich noch zu keiner lösung gekommen.

Ich habe die folgenden probleme:

1)

Ich erstelle mehrere Matrizen die sich im variablennamen durch eine Laufziffer änder mit einer for schleife ala


Code:

for n=1:10

assignin ('base',['a', num2str(n)], []);
assignin ('base',['b', num2str(n)], []);
   

end


Also =>a1 = [] bis a10 = [] sowie nochmal für b

Funktioniert auch problemlos. In die Matrizen werden nun Werte geschrieben und ich möchte nun die Matrizen Transponieren also

a1 = a1' bis a10 = 10' sowie b

Das möchte ich auch automatisieren mittels einer for- Schleife, was mir aber nicht gelingt.

Habe schon


Code:
for h= 1:10
   
    eval(['a' num2str(h) ' = a' num2str(h) )])
   eval(['b' num2str(h) ' = b' num2str(h) )])
   
end


probiert und versucht an jedweder Stelle ein " ' " zu setzen, was so aber nicht funktioniert. Habe ich da irgendwo ein Denkfehler oder geht das so einfach nicht?

2) Im weiteren Verlauf des Programms nehme ich nun weitere Matrixoperationen vor wie z.B.

Code:

c1=[a1 b1]
c2=[a2 b2]
usw.
 


Das heißt die Laufziffer der Variablen ändert sich wieder und ich möchte das ebenso automatisieren. Wie geht das?

Die Matrizen werden schließlich in ein File geschrieben was momentan so aussieht:

Code:
dlmwrite('linie1.csv', c1);
dlmwrite('linie2.csv', c2);


Dies soll ebenso automatisiert werden und auch hier soll die jeweils gleiche Ziffer wieder in den Dateinamen und an die jeweilige Variable angehängt werden. Bisher bin ich bei allen Versuchen aber gescheitert.. Rolling Eyes
Hoffe ihr könnt mir helfen.

Vielen Dank schonmal und viele Grüße

Julia Wink


denny
Supporter

Supporter



Beiträge: 3.853
Anmeldedatum: 14.02.08
Wohnort: Ulm
Version: R2012b
     Beitrag Verfasst am: 22.07.2011, 18:21     Titel:
  Antworten mit Zitat      
Hallo Julia,

vielleicht hast auch schon auf Beiträge gestoßen wo es nicht empfohlen wird, mit Dynamischen Variablen zu arbeiten, da Verwaltungsaufwand ist schlicht zu groß.
Besser wäre Cell zu nutzen, obwohl ich noch nicht ganz genau verstehe, warum du Variablen in Base-Workspace erstellst?
ginge denn nicht statt:
Code:

assignin ('base', 'a', cell(1,10));
assignin ('base', 'b', cell(1,10));
 

das hier
Code:

a=cell(1,10);
b=cell(1,10);
 


dann wäre schon man kein EVAL notwendig
Code:


for h= 1:10
   
 a{h} = a{h}';
 b{h} = b{h}';
   
end
 


Das 2 Teil würde dann wie folgt aussehen:
Code:

c= cell(1:10)

for k=1:10
  c{k} = [a{k} b{k}]
  dlmwrite(sprintf('linie%d.csv',k), c{k});
end

 
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: 24.07.2011, 02:06     Titel:
  Antworten mit Zitat      
Hallo denny,

Danke! Es tut gut mal wieder einen Beitrag zu lesen, der nicht nur EVAL verwendet, um Probleme zu lösen, die man durch Benutzung von EVAL erschaffen hat.

Hallo Julia,

Man müsste nicht einen sonderen zwei Quotes einfügen, siehe:
Code:
A = 'Jetzt kommt ein Quote: '''

Aber ein "transpose(...)" ist in solchen Fällen übersichtlicher und berechnet das gleiche.
Aber dennys Lösung klappt gleich alle Fliegen mit einem Schlag. EVAL und ASSIGIN führen immer immer immer wieder zu solchen Schwierigkeiten, die man am besten vermeidet, indem man CELLs verwendet.

Gruß, Jan
Private Nachricht senden Benutzer-Profile anzeigen
 
Julia84

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 24.07.2011, 22:05     Titel:
  Antworten mit Zitat      
Hallo ihr beiden,

vielen Dank erstmal für eure Antworten!

Ja ich habe gelesen, dass man das mit evalin und assignin nicht machen und besser anders lösen sollte. Den Lösungsvorschlag den denny geposted hat war mir bislang aber nicht bekannt bzw. ich habe noch nie mit Cells in dieser Form gearbeitet. Elegant ist es definitiv und reduziert wohl auch programmieraufwand! Wink

Ich werde das diese Woche defnitiv mal ausprobieren!

Schönen sonntag noch!

lg julia Smile
 
Neues Thema eröffnen Neue Antwort erstellen



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 - 2025 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.