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

Matrix-Plot in for-Schleife aktualisieren

 

pfeili
Forum-Century

Forum-Century


Beiträge: 177
Anmeldedatum: 27.08.08
Wohnort: ---
Version: R2019b
     Beitrag Verfasst am: 23.04.2013, 12:40     Titel: Matrix-Plot in for-Schleife aktualisieren
  Antworten mit Zitat      
Liebe Leute,

ich möchte gern Daten in einer for-Schleife einlesen und plotten. In der Schleife werden mit den jeweils aktuell eingelesenen Daten diverse Berechnungen angestellt und in die Ergebnismatrizen qv und H gespeichert. Am Ende jedes Durchlaufes wird vf und H_real gelöscht. Hier ein Ausschnitt:

Code:

% Anzahl der im Ordner liegenden Messwert-Dateien bestimmen
anzahl = length(dir('*.txt'));
for n = 1:anzahl
.
.
.
qv(n,:) = vf;
H(n,:) = H_real;
plot(qv, H)
grid
xlabel('Volumenstrom in m³/s')
ylabel('Förderhöhe in m')
clear vf
clear H_real
end
 


In meinem Beispiel habe ich am Ende des Einlesens eine 4x10Matrix für qv bzw. für H. Ich möchte sie so plotten, dass bei jedem Schleifendurchlauf die neuen Werte andersfarbig in dasselbe Diagramm gemalt werden. Also bei n = 1 nur rote Werte, bei n=2 kommen dann blaue Werte hinzu usw. . Kann mir da jemand helfen?

Viele Grüße und danke

pfeili
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: 23.04.2013, 13:52     Titel: Re: Matrix-Plot in for-Schleife aktualisieren
  Antworten mit Zitat      
Hallo pfeili,

Ich bin nicht sicher, ob ich Dich richtig verstanden habe.

Code:
anzahl = length(dir('*.txt'));
color = jet(anzahl);  % Oder andere colormap
axes('NextPlot', 'add');   % Oder: hold('on')
for n = 1:anzahl
  .
  .
  .
  qv(n,:) = vf;
  H(n,:) = H_real;
  plot(qv, H, 'Color', color(n, :));
  clear vf
  clear H_real
end
grid
xlabel('Volumenstrom in m³/s')
ylabel('Förderhöhe in m')
 

Gruß, Jan
Private Nachricht senden Benutzer-Profile anzeigen
 
pfeili
Themenstarter

Forum-Century

Forum-Century


Beiträge: 177
Anmeldedatum: 27.08.08
Wohnort: ---
Version: R2019b
     Beitrag Verfasst am: 23.04.2013, 14:23     Titel:
  Antworten mit Zitat      
Hallo Jan,

leider macht er es da so, wie im Anhang gezeigt. Er verbindet also immer die jeweils n-ten Elemente der Matrix H miteinander. Es sollten aber vier unterschiedliche Kurven herauskommen. Hast du da noch eine Idee?

Viele Grüße

pfeili

kurven.jpg
 Beschreibung:

Download
 Dateiname:  kurven.jpg
 Dateigröße:  28 KB
 Heruntergeladen:  416 mal
Private Nachricht senden Benutzer-Profile anzeigen
 
pfeili
Themenstarter

Forum-Century

Forum-Century


Beiträge: 177
Anmeldedatum: 27.08.08
Wohnort: ---
Version: R2019b
     Beitrag Verfasst am: 23.04.2013, 15:24     Titel:
  Antworten mit Zitat      
Ich hab es jetzt erstmal so gemacht, dass ich das Zeichnen nach der for-Schleife durchführe.

Code:

for
.
.
.
end

groesse = size(qv);
figure(n+1)
if groesse(1) == 1
    plot(qv(1,:), H(1,:))
elseif groesse(1) == 2
    plot(qv(1,:), H(1,:), qv(2,:), H(2,:))
elseif groesse(1) == 3
    plot(qv(1,:), H(1,:), qv(2,:), H(2,:), qv(3,:), H(3,:))
elseif groesse(1) == 4
    plot(qv(1,:), H(1,:), qv(2,:), H(2,:), qv(3,:), H(3,:), qv(4,:), H(4,:))
end
grid
xlabel('Volumenstrom in m³/s')
ylabel('Förderhöhe in m')
 


Allerdings kann ich auch 5 oder 6 Ergebnisdateien haben. Da müsste ich das jetzt noch zweimal einfügen und erweitern. Aber irgendwie muss das doch auch weniger umständlich gehen, am besten eben gleich innerhalb der Schleife, damit man sieht, welche Kurve dazukommt. Könnt ihr mir da helfen?

pfeili
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: 23.04.2013, 16:56     Titel: Re: Matrix-Plot in for-Schleife aktualisieren
  Antworten mit Zitat      
Hallo pfeili,

Code:
% Statt:
  plot(qv, H, 'Color', color(n, :));
% dies:
  plot(qv, transpose(H), 'Color', color(n, :));

Gruß, Jan
Private Nachricht senden Benutzer-Profile anzeigen
 
pfeili
Themenstarter

Forum-Century

Forum-Century


Beiträge: 177
Anmeldedatum: 27.08.08
Wohnort: ---
Version: R2019b
     Beitrag Verfasst am: 24.04.2013, 12:16     Titel:
  Antworten mit Zitat      
Hallo Jan,

leider gäbe es dann Probleme mit der Matrixgröße, da ja im zweiten Schleifendurchlauf aus beiden 1x10-Matrizen 2x10 Matrizen werden. Matlab meint:

Zitat:

??? Error using ==> plot
Vectors must be the same lengths.


Ich verstehe trotzdem nicht, warum er es im ersten Schritt macht. Sollte er nicht da schon beim Transponieren meckern?

Viele Grüße

pfeili
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.04.2013, 13:50     Titel:
  Antworten mit Zitat      
Hallo pfeili,

Matlab meckert hier, weil X und Y-Komponenten unterschiedlich lang sind.
Ich vermute, Du musst X anders wählen.

Gruß, Jan
Private Nachricht senden Benutzer-Profile anzeigen
 
pfeili
Themenstarter

Forum-Century

Forum-Century


Beiträge: 177
Anmeldedatum: 27.08.08
Wohnort: ---
Version: R2019b
     Beitrag Verfasst am: 24.04.2013, 14:35     Titel:
  Antworten mit Zitat      
Hallo Jan,

So hier sehen die beiden Matrizen nach Durchlaufen der Schleifen aus:

qv =

Columns 1 through 9

0.0150 0.0135 0.0120 0.0105 0.0090 0.0075 0.0060 0.0045 0.0030
0.0183 0.0165 0.0146 0.0128 0.0110 0.0092 0.0073 0.0055 0.0037
0.0110 0.0104 0.0098 0.0090 0.0083 0.0074 0.0065 0.0054 0.0039
0.0138 0.0131 0.0122 0.0114 0.0105 0.0095 0.0083 0.0070 0.0054

Column 10

0.0015
0.0018
0.0014
0.0030

H =

Columns 1 through 8

1.4623 1.9006 2.2472 2.5122 2.8792 3.4195 4.1228 4.6529
2.1045 2.7671 3.2666 3.6641 4.1330 4.9485 5.8659 6.8547
7.7843 8.3274 8.8541 9.3340 9.8679 10.3712 10.8134 11.1842
11.8078 12.5419 13.3464 14.1926 14.9776 15.7321 16.4448 17.0260

Columns 9 through 10

5.1116 5.4072
7.5377 7.9658
11.4626 11.5068
17.5256 17.7694

Es sind also beides 4x10 doubles. Diese am Ende zu plotten ist kein Problem.

Nun möchte ich aber, dass ich ein figure habe, in welches beim ersten Schleifendurchlauf die erste Zeile von H gegen die erste Zeile von qv geplottet wird. Beim zweiten Durchlauf soll dann die zweite Zeile von H gegen die zweite Zeile von qv hinzukommen usw. ... Ich will es allerdings dynamisch formuliert haben, damit ich auch mehr als die bisher verwendeten vier Test-txt-Dateien einlesen kann.

Weißt du, wie ich es meine?

pfeili
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.04.2013, 18:03     Titel:
  Antworten mit Zitat      
Hallo pfeili,

Wie wäre es mit:
Code:
plot(qv(end, :), H(end, :))

Gruß, Jan
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.