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

Variable in Schleife hochzählen

 

Mr. Snoot
Forum-Newbie

Forum-Newbie


Beiträge: 8
Anmeldedatum: 24.05.09
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 28.05.2009, 21:30     Titel: Variable in Schleife hochzählen
  Antworten mit Zitat      
Hi,

ich habe mehrere Datenreihen mit x- und y-Werten.

Die würde ich gerne alle in einem Plot haben und dazu wollte ich das über eine Schleife realisieren, die in jedem Durchgang eine weitere Datenreihe einfügt. Dazu müsste ich aber die x- und y-Variable, in der die jeweilige Datenreihe gespeichert ist, in jedem Schleifendurchgang erhöhen, sonst wird das ja im Plot in jedem Durchgang einfach überschrieben. Also x1, y1 > x2, y2 > x3, Y3 ...

Das müsste doch zu machen sein, oder? Leider weiß ich nicht so recht, nach was ich suchen soll.

Hier mal das m-File:
Code:
for i = 1:21
   x = data(:,i);
   y = data(:,i + 1);
   split = textdata(1,i);

   plot(x,y)
   legend(split)

   i = i + 2;
end

Eine Beispieltabelle mit den Datenreihen hab ich angehängt (im Original gehts bis x11, y11)

Per Google habe ich sowas in der Art gefunden:
Code:
x(i) = data(:,i);
y(i) = data(:,i + 1)

Aber da heißts immer:
Zitat:
In an assignment A(I) = B, the number of elements in B and I must be the same.


daten.txt
 Beschreibung:

Download
 Dateiname:  daten.txt
 Dateigröße:  406 Bytes
 Heruntergeladen:  670 mal


Zuletzt bearbeitet von Mr. Snoot am 28.05.2009, 22:21, insgesamt 2-mal bearbeitet
Private Nachricht senden Benutzer-Profile anzeigen


steve
Ehrenmitglied

Ehrenmitglied



Beiträge: 2.022
Anmeldedatum: 03.09.07
Wohnort: Wien
Version: R2023b
     Beitrag Verfasst am: 28.05.2009, 22:12     Titel:
  Antworten mit Zitat      
Moin,

am besten machst du dich mal mit der Funktionsweise von for-Schleifen vertraut. Denn die Zählvariable der for-Schleife wird automatisch hochgezählt und wenn du die weiter per Hand erhöhst, dann passen irgendwann die Zuordnungen nicht mehr.

Code:

x = zeros(1,21);
y = zeros(1,21);
for i = 1:21
   x(i) = data(:,i);
   y(i) = data(:,i+1);
   split = textdata(1,i);

   plot(x(i),y(i))
   legendstr = {legendstr,split};
   legend(split)
end


Das sollte funktionieren...

Gruß
Alex
_________________

>> I told me to.

____________________________________
Matlab Cheat Sheet
goMatlab-Knigge - dran gehalten?!
Schon in den FAQ gesucht?
Ist vielleicht bei den Skripten oder den Tutorials was für dich dabei?
Private Nachricht senden Benutzer-Profile anzeigen
 
Mr. Snoot
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 8
Anmeldedatum: 24.05.09
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 28.05.2009, 22:18     Titel:
  Antworten mit Zitat      
Hi,

jein - da ich pro Durchgang zwei Spalten weitergehen muss (x1, y1, x2, y2, ...), muss ich i manuell erhöhen - aber nicht i + 2, sondern nur i + 1; zusätzlich zur automatischen Erhöhung (oder geht das dann auch mit for i = 1:2:21?).

Wie dem auch sei, das mit x(i) und y(i) hatte ich ja schon probiert, aber dann erhalte ich immer besagten Fehler:
Zitat:
In an assignment A(I) = B, the number of elements in B and I must be the same.
Private Nachricht senden Benutzer-Profile anzeigen
 
steve
Ehrenmitglied

Ehrenmitglied



Beiträge: 2.022
Anmeldedatum: 03.09.07
Wohnort: Wien
Version: R2023b
     Beitrag Verfasst am: 28.05.2009, 22:30     Titel:
  Antworten mit Zitat      
Moin,

Code:
x = zeros(1,21);
y = zeros(1,21);
l=0;
for k = 1:21
   x(k) = data(:,k+l);
   y(k) = data(:,k+l+1);
   split = textdata(1,k);
   l = 2;
   plot(x(k),y(k))
   legendstr = {legendstr,split};
   legend(split)
end


Probier mal...

Gruß
Alex
_________________

>> I told me to.

____________________________________
Matlab Cheat Sheet
goMatlab-Knigge - dran gehalten?!
Schon in den FAQ gesucht?
Ist vielleicht bei den Skripten oder den Tutorials was für dich dabei?
Private Nachricht senden Benutzer-Profile anzeigen
 
Mr. Snoot
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 8
Anmeldedatum: 24.05.09
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 28.05.2009, 22:32     Titel:
  Antworten mit Zitat      
Selber Fehler Sad
Private Nachricht senden Benutzer-Profile anzeigen
 
steve
Ehrenmitglied

Ehrenmitglied



Beiträge: 2.022
Anmeldedatum: 03.09.07
Wohnort: Wien
Version: R2023b
     Beitrag Verfasst am: 29.05.2009, 08:41     Titel:
  Antworten mit Zitat      
Ahhhhhh...

jetzt weiß ich auch warum...

Code:
l=0;
for k = 1:21
   x = data(:,k+l);
   y = data(:,k+l+1);
   split = textdata(1,k);
   l = 2;
   hold all;
   plot(x(k),y(k))
   legendstr = {legendstr,split};
end
hold off;
legend(legendstr);


Gruß
Alex
_________________

>> I told me to.

____________________________________
Matlab Cheat Sheet
goMatlab-Knigge - dran gehalten?!
Schon in den FAQ gesucht?
Ist vielleicht bei den Skripten oder den Tutorials was für dich dabei?
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: 29.05.2009, 10:55     Titel:
  Antworten mit Zitat      
Hallo Mr. Snoot,

wenn Du x und y nur für den plot brauchst, ist es eigentlich auch in Ordnung, die Vektoren immer zu überschreiben. Aber es geht natürlich auch, sie richtig abzulegen.

Hier mein Vorschlag, der den plot-Befehl auch aus der Schleife herauszieht. Da die Werte in den x-Vektoren nicht sortiert sind, verwende ich den Marker '*'.

Code:
n = 3; % Bei Dir: n = 11
x = zeros(size(data,1),n);
y = zeros(size(data,1),n);
split = cell(n,1);

for ind = 1:n
   x(:,ind) = data(:,2*ind-1);
   y(:,ind) = data(:,2*ind);
   split{ind} = textdata{2*ind-1};
end

plot(x,y,'*')
legend(split)


In der Variable split stehen jetzt allerdings nur x1, x2, x3.


@steve: Mit
Code:

werden doch immer nur einzelne Punkte markiert. Ich dachte aber, dass der ganze Vektor gezeichnet werden soll.

Und hier als Schmankerl: Alles ohne x und y und Schleife:
Code:
plot(data(:,1:2:end),data(:,2:2:end),'*')
legend(textdata{1:2:end})


Herzliche Grüße
Bijick
_________________

>> why
Private Nachricht senden Benutzer-Profile anzeigen E-Mail senden
 
steve
Ehrenmitglied

Ehrenmitglied



Beiträge: 2.022
Anmeldedatum: 03.09.07
Wohnort: Wien
Version: R2023b
     Beitrag Verfasst am: 29.05.2009, 14:14     Titel:
  Antworten mit Zitat      
@Bijick: Danke! blöder C&P-Fehler... Irgendwie stand ich gestern abend und heute morgen noch neben mir Wink

Gruß
Alex

Edit by Bijick: Klarnamen entfernt. Bitte um Verständnis.
_________________

>> I told me to.

____________________________________
Matlab Cheat Sheet
goMatlab-Knigge - dran gehalten?!
Schon in den FAQ gesucht?
Ist vielleicht bei den Skripten oder den Tutorials was für dich dabei?
Private Nachricht senden Benutzer-Profile anzeigen
 
Mr. Snoot
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 8
Anmeldedatum: 24.05.09
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 29.05.2009, 19:54     Titel:
  Antworten mit Zitat      
steve hat Folgendes geschrieben:
...
hold all;
...

Ach ja, hold gibts auch nocht. Gute Idee Smile


Bijick hat Folgendes geschrieben:
Und hier als Schmankerl: Alles ohne x und y und Schleife: ...

Und perfekte Idee Very Happy

Vielen Dank euch zwei, damit bin ich erstmal ruhig gestellt.
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.