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

4-D beschleunigen

 

Maik aus Magdeburg

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 14.09.2012, 12:16     Titel: 4-D beschleunigen
  Antworten mit Zitat      
Hallo,

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..
Code:
if K>max(abs(Klaffung))
               
                fprintf(fid,'Itteration: %2.0f , dx: %f, dy: %f, dz: %f, m: %f, omega: %f, phi: %f, kappa: %f, stx: %2.0f, sty: %2.0f, stz: %2.0f, swom: %1.1f, swphi: %1.1f, swka: %1.1f \n', iteration, xtrafo(1,1), xtrafo(2,:), xtrafo(3,:), M, dxgrad, dygrad, dzgrad, stx, sty, stz, sw1, sw2, sw3);
                for i=1;
                    Loesung = [sw1; sw2; sw3; iteration];
                   
                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.).
Code:
if K>max(abs(Klaffung))
               
                fprintf(fid,'Itteration: %2.0f , dx: %f, dy: %f, dz: %f, m: %f, omega: %f, phi: %f, kappa: %f, stx: %2.0f, sty: %2.0f, stz: %2.0f, swom: %1.1f, swphi: %1.1f, swka: %1.1f \n', iteration, xtrafo(1,1), xtrafo(2,:), xtrafo(3,:), M, dxgrad, dygrad, dzgrad, stx, sty, stz, sw1, sw2, sw3);

            end
     
                         end    
                     end
                 end
            end
        end
    end

 while ~feof(fid)
        line=fgetl(fid);
        j = j + 1;
        Loesung(j,4) = str2double(line(13:14)); Loesung(j,1) = str2double(line(161:164)); Loesung(j,2) = str2double(line(173:176));Loesung(j,3) = str2double(line(184:187));
    end  
     
   for j=1:length(Loesung);
       
        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)
       
    end;

Wäre für jede Hilfe die das Ploten schneller macht dankbar. (habe 4*2GHZ CPU, Mathlab R2007b).

Mit freundlichen Grüßen

Maik aus Magdeburg


Jan S
Moderator

Moderator


Beiträge: 11.057
Anmeldedatum: 08.07.10
Wohnort: Heidelberg
Version: 2009a, 2016b
     Beitrag Verfasst am: 17.09.2012, 09:55     Titel: Re: 4-D beschleunigen
  Antworten mit Zitat      
Hallo Maik,

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
Private Nachricht senden Benutzer-Profile anzeigen
 
Maik aus Magdeburg

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 17.09.2012, 14:43     Titel:
  Antworten mit Zitat      
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: ---
     Beitrag Verfasst am: 03.10.2012, 15:22     Titel:
  Antworten mit Zitat      
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.

Code:
plot3(Loesung(:,1)',Loesung(:,2)',Loesung(:,3)','.')


Wenn ich Farben in Abhängigkeit zur Anzahl der Iterationen haben möchte mit folgendem Code

Code:

farbe=jet(20);
plot3(Loesung(:,1)',Loesung(:,2)',Loesung(:,3)','*','color',farbe(Loesung(:,4)',:))


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
 
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.