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

mehrere Plots hintereinander laufen lassen

 

Friederike
Forum-Anfänger

Forum-Anfänger


Beiträge: 10
Anmeldedatum: 24.11.14
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 14.07.2015, 13:00     Titel: mehrere Plots hintereinander laufen lassen
  Antworten mit Zitat      
Hallo,

ich habe eine Frage zur Animation von Plots:
Ich habe mit ode45 Reaktionskinetiken geplotte. Und so drei plots bekommen. Nun würde ich gerne diese Plots nacheinander animieren lassen. Ich habe dabei große Probleme, da ich bisher nur was mit for-Schleifen gefunden habe, aber ich bei allen drei Plots die gleichen x- und y-Werte.
Mein Script sieht wie folgt aus:
Kann mir jemand helfen?
Code:
clear
subplot(3,1,1)
x0=[3,0,0];
tspan=[0,2];
[t,x]=ode45(@Reaktionskinetik,tspan,x0);
plot(t,x)
title('Reaktionskinetik einer Reaktion A zu B zu C mit k1 größer als k2');
xlabel('Zeit[t]');
ylabel('Konzentration[c]');
subplot(3,1,2)
x0=[3,0,0];
tspan=[0,2];
[t,x]=ode45(@Reaktionskinetika,tspan,x0);
plot(t,x)
title('Reaktionskinetik einer Reaktion A zu B zu C mit k1 und k2 gleich groß')
xlabel('Zeit[t]')
ylabel('Konzentration[c]')
subplot(3,1,3)
x0=[3,0,0];
tspan=[0,2];
[t,x]=ode45(@Reaktionskinetikb,tspan,x0);
plot(t,x)
title('Reaktionskinetik einer Reaktion A zu B zu C mit k2 größer als k2')
xlabel('Zeit[t]')
ylabel('Konzentration[c]')


[EDITED, Jan, Bitte Code-Umgebung verwenden - Danke!]
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: 14.07.2015, 13:57     Titel: Re: mehrere Plots hintereinander laufen lassen
  Antworten mit Zitat      
Hallo Friederike,

Na klar können wir Dir helfen. Was genau ist Deine Frage?

Zitat:
Nun würde ich gerne diese Plots nacheinander animieren lassen.Ich habe dabei große Probleme, da ich bisher nur was mit for-Schleifen gefunden habe, aber ich bei allen drei Plots die gleichen x- und y-Werte.

Was genau möchtest Du "nacheinander animieren"? Welches Problem trat mit welcher FOR-Schleife auf?

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

Forum-Anfänger

Forum-Anfänger


Beiträge: 10
Anmeldedatum: 24.11.14
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 14.07.2015, 18:07     Titel:
  Antworten mit Zitat      
Ich habe die drei Plot untereinander geplottet. Kann ich die hintereinander laufen lassen? so als würde ich einen graphen(x- und y-Achse sind fest) haben und dann die einzelnen Plots darin abspielen? Wenn ich es mit for-Schleife machen, dann doch so?
for
i=1:N
plot(x(i),y(i))
oder nicht? aber ich habe ja keine x(i)'s
Private Nachricht senden Benutzer-Profile anzeigen
 
Barny.G
Forum-Anfänger

Forum-Anfänger


Beiträge: 34
Anmeldedatum: 17.03.11
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 14.07.2015, 18:15     Titel:
  Antworten mit Zitat      
Hallo Friederike,

verstehe ich Dich richtig?

Du möchtest gern in ein und demselben Plotrahmen

1) einen Plot darstellen
2) den löschen
3) den nächsten Plot darstellen
4) den auch wiederum löschen
5) als Endergebnis den letzten Plot darstellen

(ähnlich einer PwrPoint-Präsi?)

Oder sollen alle drei Plots in einem Rahmen zugleich (übereinandergeplottet) dargestellt werden?

BG.

Ps.: ein lauffähiges Beispiel wäre sehr hilfreich Wink
Private Nachricht senden Benutzer-Profile anzeigen
 
Friederike
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 10
Anmeldedatum: 24.11.14
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 14.07.2015, 18:37     Titel:
  Antworten mit Zitat      
Hallo,

ich möchte dass die Plots wie du geschrieben hast, übereinander.
Das sind Plots wo sich die Konstantenk1, k2 der Funktion kinetik=[-k1*x(1);+k1*x(1)-k2*x(2);+k2*x(2)] ändern. Ich möchte das Visualisieren.
Die einzelnen Plots sehen so aus:

Bilder.jpg
 Beschreibung:

Download
 Dateiname:  Bilder.jpg
 Dateigröße:  38.38 KB
 Heruntergeladen:  432 mal
Private Nachricht senden Benutzer-Profile anzeigen
 
Friederike
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 10
Anmeldedatum: 24.11.14
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 14.07.2015, 18:38     Titel:
  Antworten mit Zitat      
also nicht übereinander, aber hintereinander weg und wenn es geht, bei jedem Plot so, dass die Kurven von t=0 bis t erscheinen
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: 15.07.2015, 09:20     Titel:
  Antworten mit Zitat      
Hallo Friederike,

Ich verstehe immer noch nicht, was wohinter hintereinander weg "abgespielt" werden soll. "t=0 bis t" ist mir ebenfalls nicht klar. Könnte "t" denn auch irgendwelce anderen Werte annehmen?

Zitat:
Das sind Plots wo sich die Konstantenk1, k2 der Funktion kinetik=[-k1*x(1);+k1*x(1)-k2*x(2);+k2*x(2)] ändern.

Das sagt mir noch nichts.

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

Forum-Anfänger

Forum-Anfänger


Beiträge: 10
Anmeldedatum: 24.11.14
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 15.07.2015, 09:42     Titel:
  Antworten mit Zitat      
Hallo,

also t ist die Zeit. Ich möchte einfach, das die einzelnen plots hintereinander gezeigt werden. Erst der erste Plot, dann verschwindet dieser, dann der zweite usw. die Achsen können stehen bleiben, da ich immer die gleichen Achsen habe.( die Zeit gegen die Konzentration)
Was sozusagen das Sahnehäbchen wäre ist, das der einzelne Plot auch animiert wird, in dem Sinne, das die Kurven nicht gleich da sind, sondern entstehen.
Aber mir reicht es wie Barny G. es geschrieben hat, das wäre schon super
Private Nachricht senden Benutzer-Profile anzeigen
 
Friederike
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 10
Anmeldedatum: 24.11.14
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 15.07.2015, 10:54     Titel:
  Antworten mit Zitat      
Hallo,

ich habe es jetzt selber hinbekommen, indem ich jeden Plot in einer Figure geplottet habe und mit getframe und movie das abspielen lasse.
Nun habe ich jedoch das Problem, dass beim Abspielen zwei y- und zwei x-Achsen angezeigt werden. Die richtige und eine von 0 bis 1. Welchen Fehler mache ich?
hier das Script, mit denen ich die Plots in einzelnen Figuren anzeigen lasse und mit getframe speicher:

Code:
figure(1)
x0=[3,0,0];
tspan=[0,2];
[t,x]=ode45(@Reaktionskinetik,tspan,x0);
plot(t,x);
M(1) = getframe(gcf);

figure(2)
x0=[3,0,0];
tspan=[0,2];
[t,x]=ode45(@Reaktionskinetika,tspan,x0);
plot(t,x);
M(2) = getframe(gcf);

figure(3)
x0=[3,0,0];
tspan=[0,2];
[t,x]=ode45(@Reaktionskinetikb,tspan,x0);
plot(t,x);
M(3) = getframe(gcf);
end


[EDITED, Jan, Bitte Code-Umgebung verwenden - Danke!]
Private Nachricht senden Benutzer-Profile anzeigen
 
Friederike
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 10
Anmeldedatum: 24.11.14
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 15.07.2015, 11:21     Titel:
  Antworten mit Zitat      
Ich habe nun festgestellt,

wenn ich den Befehl movie im Workspace ausführe bekomme ich ein Fenster, was sehr schön ist, habe ich jetzt auch nur eine x- und eine y-Achse, aber leider faslch skaliert. Wenn ich die plots in den einzelnen Fenstern plotten lasse, ist die Achsenskalierung richtig
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: 15.07.2015, 13:41     Titel:
  Antworten mit Zitat      
Hallo Friederike,

Bitte benutze die Code-Umgebung für Code. Danke!

Du möchtest also nur die drei Bilder nacheinander anzeigen lassen. Das war nicht einfach herauszubekommen. Das per movie zu machen ist umständlich, weil Du dafür ja Pixel-Grafiken exportierst. Wie wäre es direkt:
Code:
x0=[3,0,0];
tspan=[0,2];

t = cell(1, 3);
x = cell(1, 3);
[t{1}, x{1}] = ode45(@Reaktionskinetik,tspan,x0);
[t{2}, x{2}] = ode45(@Reaktionskinetika,tspan,x0);
[t{3}, x{3}]=ode45(@Reaktionskinetikb,tspan,x0);

H = plot(t{1}, x{1});
xlim([0,2]);
for k = 1:100
  pause(0.5);
  index = mod(k, 3) + 1;
  set(H, 'XData', t{index}, 'YData', x{index});
end

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

Forum-Anfänger

Forum-Anfänger


Beiträge: 10
Anmeldedatum: 24.11.14
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 15.07.2015, 18:44     Titel:
  Antworten mit Zitat      
hallo Jan,

wenn ich deinen Befehl ausführe erhalte ich diesen Fehler:

Error using matlab.graphics.chart.primitive.Line/set
While setting the 'YData' property of Line:
Value must be a vector of numeric type

Error in code (line 15)
set(H, 'XData', t{index}, 'YData', x{index});

Warning: Error creating or updating Line
Error in value of one or more of the following properties: XData YData
Array is wrong shape or size

Was mache ich da falsch? Es erschein ein Fenster mit einem Graph, und eine Kurve geht weg.
gruß
Private Nachricht senden Benutzer-Profile anzeigen
 
laternenjoe
Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 83
Anmeldedatum: 25.02.15
Wohnort: Bochum
Version: ---
     Beitrag Verfasst am: 15.07.2015, 21:07     Titel:
  Antworten mit Zitat      
Hab glaube ich Bullshit geschrieben ^^

aufjedenfall hat XData oder YData die falsche Dimension.
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: 16.07.2015, 11:16     Titel:
  Antworten mit Zitat      
Hallo Friederike,

Zitat:
Error using matlab.graphics.chart.primitive.Line/set
While setting the 'YData' property of Line:
Value must be a vector of numeric type

Dann verwende bitte den Debugger um herauszufinden, welchen Typ denn das entsprechende Elemt von x hat.

Zitat:
Error in value of one or more of the following properties: XData YData
Array is wrong shape or size

Dann brauchst Du vielleicht einfach nur ein transpose ?
Probiere es einfach mal aus. Dabei könnte helfen:
Code:

Und dann kannst Du im CommandWindow an den Befehlen herum probieren.

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.