ich habe eine Frage ob der nachfolgende Code für den 3-D Plot verbesserungswürdig ist so das er schneller plottet. Hintergrund ist der, dass Matlab für die Erstellung 3,5 h braucht, und ich habe die abzubildenden Daten sogar schon um 80% reduziert. Was ich bereits gelesen habe ist, dass Matlab in der Erstellung von Plots eh recht langsam ist.
Ich habe zwei Codes geschrieben. Der obere ist schneller und läuft in 6 for-Schleifen mit und braucht für beides zusammen (txt-erstellung + Grafik) bei 1% der Daten = 2 Min 38 Sek..
end
x_plot=sw1;
y_plot=sw2;
z_plot=sw3;
cm=jet(12);
iteration=Loesung(4,:);
hold on
colorbar title('grafische Ausgabe der Lösungskombinationen mit der benötigten Anzahl an Iterationen');
plot3(x_plot,y_plot,z_plot,'.','color',cm(iteration,:)) grid view(3) end end end end end end end
Der untere schreibt erst die txt-Datei und liest sie danach noch mal ein und gibt den Plot aus ((bei 1% der Daten), Rechenzeit + txt-Erstellung 1,5 Sek., einlesen der txt + graphische Ausgabe 2 Min 50 Sek.).
x_plot=Loesung(j,1);
y_plot=Loesung(j,2);
z_plot=Loesung(j,3);
iteration=Loesung(j,4);
farbe=jet(12);
hold on
colorbar title('grafische Ausgabe der Lösungskombinationen mit der benötigten Anzahl an Iterationen');
plot3(x_plot,y_plot,z_plot,'.','color',farbe(iteration,:)) grid view(3)
Der gepostete Code hat mehr "end"-Statements als FORs, WHILEs oder IFs. Deshalb lässt sich nicht richtig abschätzen, welcher Teil weshalb wie schnell ist.
Falls hier Code wiederholt ausgeführt wird, lohnt es sich immer ihn so weit wie möglich nach aussen zu ziehen. Z.B. "cm = jet(12)" muss ja nicht jedesmal neu erstellt werden.
Benötigst Du alle Figures gleichzeitig oder könntest Du eine nach der anderen erstellen. In letzterem Fall wäre es deutlich schnelöler, wenn Du nicht per PLOT3 das LINE-Objekt neu erstellst, sondern das bestehende per "set(LineHandle, 'XData', x_plot, 'YData', y_plot, 'ZData', z_plot)" updatest.
Gruß, Jan
Maik aus Magdeburg
Gast
Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
Verfasst am: 17.09.2012, 14:43
Titel:
Hallo Jan,
habe nur das Ende des Programms (also die Erstellung des Plotts) rein geschrieben, da es sonst zu umfangreich ist und es sich eventuell keiner angucken würde. Am Anfang des Programms beginne ich mit 6 for-schleifen die ich zum Schluss halt schließe. Deshalb ist hier 6 mal der Befehl end untereinander vorhanden. Die for-Schleifen durchlaufen Werte von Translationen und Rotationen für x, y und z.
Momentan wird nur ein Plot erstellt in dem alle Lösungen eingetragen werden die berechnet wurden. Später möchte ich dann 72 Plotts ausgeben weil der Körper 72 Ebenen hat und damit eine art Videosequenz erstellen, aber soweit bin ich noch nicht.
Das ich das ("cm = jet(12)") auch ganz außerhalb schreiben kann wusste ich nicht, dürfte die ganze Sache aber beschleunigen, wenn auch nur minimal. Das mit dem update werde ich mal ausprobieren, mal gucken ob es funktioniert. In meinem Plot erstelle ich jedoch nur Punkte, keine Linien oder Ebenen.
Trotzdem Danke für den Tipp.
MFG
Maik aus Magdeburg
Maik aus Magdeburg
Gast
Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
Verfasst am: 03.10.2012, 15:22
Titel:
Hallo
hab noch mal eine Frage zur Möglichkeit meinen Plot zu beschleunigen.
Habe herausgefunden, dass es wesentlich schneller gehen müsste wenn ich die berechneten Werte (x, y, z, Anzahl der Iterationen) in eine Lösungsmatrix schreiben würde und diese dann in einem Stück ausgebe. Leider klappt es nur für einfarbige Werte mit folgendem Code.
gibt er mir folgenden Fehler aus.
??? Error using ==> plot3
Color value must be a 3 element numeric vector.
Hat jemand eine Idee wie man hinbekommt das es läuft?
MFG
Maik aus Magdeburg
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.