Verfasst am: 14.07.2015, 13:00
Titel: mehrere Plots hintereinander laufen lassen
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]')
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?
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
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:
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.
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
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:
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
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
Und dann kannst Du im CommandWindow an den Befehlen herum probieren.
Gruß, Jan
Einstellungen und Berechtigungen
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
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.