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

Neuen Vektor bei jeder Itration erstellen

 

JohnnyCash
Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 57
Anmeldedatum: 22.07.09
Wohnort: ---
Version: 2009b
     Beitrag Verfasst am: 22.07.2009, 12:09     Titel: Neuen Vektor bei jeder Itration erstellen
  Antworten mit Zitat      
Hey...
bin absoluter newbie im Programmieren mit matlab.
hab ein kleines Problem, welches für die Alteingesessenen hier sicherlich lächerlich klingt^^

Ich würde gern mit jeder neuen for Iteration einen neuen Vektor erzeugen, welcher ein zeros(1,2)-Vektor sein soll...

ich dachte da zuerst an sowas:

Code:

for i=1:9
    Tour('i') = zeros(1,2)
end
 


dass ich also nach der iteration folgenendes ergibt

Tour1 = [0 0]
Tour2 = [0 0]
...
Tour9 = [0 0]


leider will er so nicht...
natürlich bestünde die Möglichkeit, anstelle eines neuen Vektors einfach eine Matrix zuerstellen und eine neue Zeile anzufügen.
Bringt mir bloß leider in meinem Fall nix...

Kann jemand helfen?

Johnny[/code]
Private Nachricht senden Benutzer-Profile anzeigen


LittleX
Forum-Guru

Forum-Guru


Beiträge: 494
Anmeldedatum: 14.05.09
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 22.07.2009, 12:24     Titel:
  Antworten mit Zitat      
Hallo,

zwei Möglichkeiten die mir im Moment einfallen, wenn Du keine Matrix haben möchtest wären mit einem struct zu arbeiten oder mit assignin.

Code:

for idx=1:9
    t.(sprintf('Tour%d',idx)) = zeros(1,2);
end


for idx=1:9
    assignin('base',sprintf('Tour%d',idx),zeros(1,2));
end
 
Private Nachricht senden Benutzer-Profile anzeigen
 
Dagnabit
Forum-Century

Forum-Century


Beiträge: 244
Anmeldedatum: 23.04.09
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 22.07.2009, 12:32     Titel:
  Antworten mit Zitat      
...
und auch noch ´ne dritte Möglichkeit:


Code:
for i = 1 : 9
    eval(['Tour' num2str(i) ' = zeros(1,2)'])
end

_________________

lg
Martin
Private Nachricht senden Benutzer-Profile anzeigen
 
JohnnyCash
Themenstarter

Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 57
Anmeldedatum: 22.07.09
Wohnort: ---
Version: 2009b
     Beitrag Verfasst am: 22.07.2009, 12:40     Titel:
  Antworten mit Zitat      
danke für die schnelle Hilfe!

die dritte variante funktioniert leider nicht...er gibt folgende fehler meldung aus:


??? Index exceeds matrix dimensions.

Error in ==> vektor at 2
eval(['Tour' num2str(i) ' = zeros(1,2)'])
Private Nachricht senden Benutzer-Profile anzeigen
 
Dagnabit
Forum-Century

Forum-Century


Beiträge: 244
Anmeldedatum: 23.04.09
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 22.07.2009, 12:59     Titel:
  Antworten mit Zitat      
Servus Johnny

Bei mit läuft die Schleife problemlos.
Wenn Du nur die drei Zeilen ausführst, sollte sie ansich auch bei Dir laufen.

Vielleicht löscht Du mal alle Variablen im Workspace.

Code:


Wenn das nichts hilft und Du die die Schleife erweitert hast, poste mal den veränderten Code.
_________________

lg
Martin
Private Nachricht senden Benutzer-Profile anzeigen
 
JohnnyCash
Themenstarter

Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 57
Anmeldedatum: 22.07.09
Wohnort: ---
Version: 2009b
     Beitrag Verfasst am: 22.07.2009, 13:13     Titel:
  Antworten mit Zitat      
hast recht dagna, war mein fehler!

ja clear all sollte man wohl nie vergessen Wink
Private Nachricht senden Benutzer-Profile anzeigen
 
JohnnyCash
Themenstarter

Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 57
Anmeldedatum: 22.07.09
Wohnort: ---
Version: 2009b
     Beitrag Verfasst am: 22.07.2009, 22:00     Titel:
  Antworten mit Zitat      
so leider ist ein neues Problem aufgetaucht...

jetzt habe ich zwar meine Vektoren erzeugt, also

Tour1 = [0 0]
...
Tour9 = [0 0]

doch in einem nächsten Schritte, möchte ich in einer Schleife immer eine bestimmten Vektor (Tour1,..,2) bearbeiten, damit ich an diesen Elemente hinzufügen kann.

wenn ich das mal in einer art pseudocode für mein Bsp ausdrücke:
(ones(1,1)-vektor wird an die k.te Tour angehängt)

Code:

for k=1:9
     Tour k = [Tour k(1,end),ones(1,1)]
end
 



ist das irgendwie möglich?!

Ich weiß mit einer Matrix würde das alles allgemein einfacher...doch füge ich eine verschiedene Anzahl von Elementen an die verschieden Vektoren, was in einer Matrix zur falschen Lösung führen würde.

Johnny
Private Nachricht senden Benutzer-Profile anzeigen
 
LittleX
Forum-Guru

Forum-Guru


Beiträge: 494
Anmeldedatum: 14.05.09
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 22.07.2009, 22:41     Titel:
  Antworten mit Zitat      
Hallo,

wenn Du bei den einzelnen Variablen bleiben willst, müsstest Du Dir die einzelnen Befehle wieder als string zusammen bauen und mit eval auswerten lassen (wie von Dagnabit vorgeschlagen).

Mit dem Datentyp struct oder cell lässt sich da doch angenehmer arbeiten.
In einer cell können Vektoren unterschiedlicher Länge gespeichert werden.

Beispiel:
Code:

C{1} = zeros(2,1);
C{2} = rand(10,1);
 
Private Nachricht senden Benutzer-Profile anzeigen
 
JohnnyCash
Themenstarter

Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 57
Anmeldedatum: 22.07.09
Wohnort: ---
Version: 2009b
     Beitrag Verfasst am: 22.07.2009, 23:00     Titel:
  Antworten mit Zitat      
hmm weiß leider nich wirklich wie ich das in mit cell oder struct machen sollte. das ich es mit eval vielleicht hinbekomme hatte ich mir schon erhofft.
bloß wie muss ich mir das vorstellen?

Code:

for k=1:9
     eval(['Tour' num2str(k) '])  = [eval(['Tour' num2str(k) ' (1,2)'])  ones(1,1)]
end
 


so oder ähnlich?
Private Nachricht senden Benutzer-Profile anzeigen
 
LittleX
Forum-Guru

Forum-Guru


Beiträge: 494
Anmeldedatum: 14.05.09
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 23.07.2009, 00:06     Titel:
  Antworten mit Zitat      
Hallo,

aus der MATLAB Doku:
eval(expression) executes expression, a string containing any valid MATLAB expression. You can construct expression by concatenating substrings and variables inside square brackets.

Du übergibst eval einen string, der einen Matlab ausdruck enthält, dieser wird dann ausgwertet.

Beispiel:
Code:

eval('x = 2 + 4')
 


Nun musst Dir Dir also immer strings mit MATLAB Ausdrücken basteln.

Warum meinst Du denn, dass z.b. cell nicht funktioniert?
Private Nachricht senden Benutzer-Profile anzeigen
 
JohnnyCash
Themenstarter

Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 57
Anmeldedatum: 22.07.09
Wohnort: ---
Version: 2009b
     Beitrag Verfasst am: 23.07.2009, 00:21     Titel:
  Antworten mit Zitat      
nein du hast mich falsch verstanden. wahrscheinlich funktioniert cell oder struct sogar besser. Leider bin ich wie oben schon gesagt absoluter newbie und kenn mich noch nicht wirklich aus.
ich wollte bloß endlich mal meine anwendung zum laufen bringen Wink
hab mich grad nochmal über struct belesen...

vielleicht sollte ich es so machen:

Code:

for 1:9
     Tour = struct( ' i ', zeros(2,1))
end
 


dannn könnte ich doch auf die einzelnen vektoren über struct zugreifen oder?
bloß beinhaltet mein code einen Denkfehler.

Es kann auch sein dass du Little mir genau dass schon oben angeboten hast, sei mir nicht böse Wink
Private Nachricht senden Benutzer-Profile anzeigen
 
LittleX
Forum-Guru

Forum-Guru


Beiträge: 494
Anmeldedatum: 14.05.09
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 23.07.2009, 09:12     Titel:
  Antworten mit Zitat      
ah ok Smile
am besten liest Du mal in der MATLAB Doku unter
Programming Fundamentals->Classes (Data Types) Dir die entsprechendnen Abschnitte durch.

Hier mal noch ein Vorschlag, wie Du das ganze mit cell und struct hinbekommen kannst:

Code:

%% struct
for idx=1:9
    str = ['Tour',num2str(idx)];
    t.(str) = zeros(1,2);
end

for idx=1:9
    str = ['Tour',num2str(idx)];
    t.(str) = [t.(str),ones(1,3)] ;
end

%% cell
C = cell(1,9);
for idx=1:9
    C{idx} = zeros(1,2);
end

for idx=1:9
    C{idx} = [C{idx},ones(1,3)] ;
end
 
Private Nachricht senden Benutzer-Profile anzeigen
 
JohnnyCash
Themenstarter

Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 57
Anmeldedatum: 22.07.09
Wohnort: ---
Version: 2009b
     Beitrag Verfasst am: 23.07.2009, 10:36     Titel:
  Antworten mit Zitat      
LittleX...
Ich danke dir! Ich werds dann wohl doch über die Cells machen, erscheint mir der optimale Weg zu sein.

Soweit ich das jetzt überblickt habe, kann ich dann ja auch einzelne Elemente der Cell auswerten.

Bsp.: C{4}(3,1) = 1 + 1

genau das habe ich gesucht.

Nochmals thx Wink

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