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

String in jedem Schleifendurchlauf ändern

 

Borste
Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 56
Anmeldedatum: 18.04.13
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 21.03.2014, 10:41     Titel: String in jedem Schleifendurchlauf ändern
  Antworten mit Zitat      
Morgen,

ich habe mal eine simple Frage. Kann man einen String in jedem Schleifendurchlauf automatisch neu benennen um dann im Workspace
quasi so viele Strings wie Schleifendurchläufe zu haben? Als Beispiel:
Code:
for i=1:10
a=rand(1)
b=rand(1)
c=rand(1)

vektor1=[a b c]  %% dieser Vektor soll dann im 2. Durchlauf vektor2 im 3. vektor 3 usw heißen

end
 


Kann man das irgendwie umsetzen?

Vielen Dank schonmal und beste Grüße
Private Nachricht senden Benutzer-Profile anzeigen


Nras
Forum-Meister

Forum-Meister


Beiträge: 608
Anmeldedatum: 21.02.12
Wohnort: ---
Version: 7.12.0.635 (R2011a)
     Beitrag Verfasst am: 21.03.2014, 11:33     Titel:
  Antworten mit Zitat      
Hallo,

kurze Antwort: Ja, das geht mit einer Kombination aus sprintf und eval, ist aber umständlich. Genau so umständlich ist es dann später, diese einzelnen Vektoren für weitere Berechnungen in Schleifen anzusprechen. Es wird dir hier nicht empfohlen werden, Variablennamen so durchzuzählen, dass ein Index im Namen versteckt ist.

In dem Fall die bessere Lösung ist eine Matrix aus den Vektoren zu erstellen:
Code:
M = zeros(10,3); % als Matrix
C = cell(10,1); % als Cell

for i=1:10
a=rand(1);
b=rand(1);
c=rand(1);

% schlechte Variante
cmd = sprintf('vektor%d = [a,b,c]',i);
eval(cmd);

% bessere Varianten
M(i,:) = [a, b, c];
C{i} = [a, b, c];
end
% vektor1 entspricht M(1,:) und C{1}
% vetkor2 entspricht M(2,:) und C{2} usw..


Das macht das Weiterarbeiten damit viel einfacher, da hier ein Index wirklich ein Index ist, der das Weiterarbeiten damit sehr komfortabel macht.

Viele Grüße,
Nras

edit: Wieso tauchen denn da in der Code-Umgebung Smileys auf?
Private Nachricht senden Benutzer-Profile anzeigen
 
Borste
Themenstarter

Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 56
Anmeldedatum: 18.04.13
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 21.03.2014, 11:44     Titel:
  Antworten mit Zitat      
hmm okay, vielen Dank erstmal!!
Das Problem an der Sache ist, dass ich gerade das Abspeichern
der Vektoren in einer Matrix umgehen möchte, da ich dieses Beispiel auf ein Programm anwende, bei dem am Ende eine viel zu große Matrix entstehen würde. Außerdem habe ich Vektoren unterschiedlicher Länge und so würde die Matrix mit unnötigen Nullen (die Speicherplatz verbrauchen) aufgefüllt werden. Ich probiere die "schlechte Variante" mal aus, sonst muss ich mir noch eine andere Methode/Möglichkeit überlegen, wie ich meine Vektoren abspeichere.

Viele Grüße
Private Nachricht senden Benutzer-Profile anzeigen
 
Borste
Themenstarter

Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 56
Anmeldedatum: 18.04.13
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 21.03.2014, 11:51     Titel:
  Antworten mit Zitat      
Schnell mal gecheckt, der Ansatz sieht doch gut aus.. Man kann doch dann super auf die Vektoren im Workspace wieder zurückgreifen, denke das hilft mir weiter!

Vielen Dank

p.s.: Smileys? Wie Wo Was??? Ich sehe keine... ; )
Private Nachricht senden Benutzer-Profile anzeigen
 
Nras
Forum-Meister

Forum-Meister


Beiträge: 608
Anmeldedatum: 21.02.12
Wohnort: ---
Version: 7.12.0.635 (R2011a)
     Beitrag Verfasst am: 21.03.2014, 12:40     Titel:
  Antworten mit Zitat      
Hallo,

ja tatsächlich. Zu Hause auf meinem Rechner habe ich da in den letzten beiden Zeilen bei den Kommentaren Smileys gesehen, wenn auf die Matrix M zugegriffen wird. Hier im Büro sieht das alles gut aus.

Zurück zum Thema: Mit der zweiten Variante (das mit der Cell) kannst du auch Vektoren unterschiedlicher Länge ohne zusätzliche Nullen abspeichern. Man kann sogar Daten unterschiedlichen Typs darin abspeichern.
Code:
C = cell(3,1);
C{1} = [1, 2, 3];
C{2} = [1, 2, 3, 4];
C{3} = 'Hallo';


Viele Grüße, Nras.
Private Nachricht senden Benutzer-Profile anzeigen
 
Borste
Themenstarter

Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 56
Anmeldedatum: 18.04.13
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 24.03.2014, 16:32     Titel:
  Antworten mit Zitat      
das mit dem cell array geht glaub ich nicht, weil die vektoren erst durch Schleifen aufgefüllt werden. Heißt ich habe nicht sofort einen fertigen Vektor1, den ich abspeichern kann, sondern parallel werden verschiedene Vektoren aufgefüllt.
Ich finde die als "schlecht" betitelte Lösung ganz gut, einziges Problem: Wie kann ich die gespeicherten Vektoren dann später wiederum in einer Schleife aufrufen?? Also quasi wieder eine Schleife von 1 bis 10 in der ich dann jeweils bei jedem Durchlauf Vektor1, dann Vektor2 usw aufrufe.

Danke für die Hilfe!
Private Nachricht senden Benutzer-Profile anzeigen
 
Nras
Forum-Meister

Forum-Meister


Beiträge: 608
Anmeldedatum: 21.02.12
Wohnort: ---
Version: 7.12.0.635 (R2011a)
     Beitrag Verfasst am: 24.03.2014, 16:58     Titel:
  Antworten mit Zitat      
Hallo,

das ist ja genau das Problem, wenn du die Vektoren mit eval erzeugst, wirst du sie wohl auch wieder mit eval ansprechen müssen. Da verliert man dann schnell den Überblick.
Du kannst auch die Matrix oder die Cell nacheinander füllen, beispielsweise so:
Code:
M = zeros(10,3); % als Matrix
C = cell(10,1); % als Cell

for i=1:10
    for j = 1:3
        v=rand(1);
        M(i,j) = v;
        C{i} = [C{i},v];
    end
end
% vektor1 = M(1,:) oder vektor1 = C{1}


Falls du das unbedingt mi der eval-Geschichte machen willst, die Vektoren kannst du dann so aufrufen:
Code:

for i=1:10
% schlechte Variante
cmd = sprintf('vektor = vektor%d;',i);
eval(cmd);
% ab hier ist dann vektor verfügbar
disp(vektor)
end

Eine Empfehlung ist diese Variante aber nicht.

Viele Grüße,
Nras.

Edit: Kommentar in die Code-Umgebung verschoben

Zuletzt bearbeitet von Nras am 24.03.2014, 17:52, insgesamt 2-mal bearbeitet
Private Nachricht senden Benutzer-Profile anzeigen
 
Borste
Themenstarter

Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 56
Anmeldedatum: 18.04.13
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 24.03.2014, 17:26     Titel:
  Antworten mit Zitat      
Alles klar, ich probier das alles mal aus und überprüfe was die schnellste und beste Variante dann letztendlich ist. Auf alle Fälle vielen Dank, das hat mir schonmal sehr viel geholfen!!

Beste Grüße

p.s.: Du hast es mit den Smileys : ) unter dem Code bei der Matrixbeschreibung haste wieder einen eingebaut ^^
Private Nachricht senden Benutzer-Profile anzeigen
 
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.