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

Plot dauert zu lange

 

ThoRie
Forum-Anfänger

Forum-Anfänger


Beiträge: 34
Anmeldedatum: 22.05.19
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 03.08.2019, 13:52     Titel: Plot dauert zu lange
  Antworten mit Zitat      
Hallo. Ich habe ein Problem mit dem folgenden Plot:

Code:
tic
A=[0 0;10 10;20 0];
S=[0 0];
hold on
plot(S(1),S(2),'rx');
plot(A(1,1),A(1,2),'bo');
plot(A(2,1),A(2,2),'bo');
plot(A(3,1),A(3,2),'bo');
for i=1:5000
a=random('unid',3);
B=A(a,:);
S=(S+B)/2;
plot(S(1),S(2),'k');
end
toc


Wie man leicht an der gemessenen Zeit erkennen kann, dauert diese Berechnung mit dem entsprechenden Plot sehr lange. Ich habe auch mal den Versuch gemacht und das plot(...) innerhalb der Schleife auskommentiert. Dann arbeitet er sehr schnell. Wenn ich diesen Teil hinter die Schleife ziehe, dann plottet er aber nur den letzten Punkt, statt allen entstandenen.

Wie kann ich es also realisieren, dass das geforderte Sirpinsky-Dreieck entsteht, aber er trotzdem schneller arbeitet?

PS.: Vielleicht ist die Information wichtig, dass ich mit Octave arbeite. Ich habe dieses Thema aber hier verfasst, da es ja zum einen konkret um eine Grafik geht und zum anderen habe ich (aus Erfahrung) die Hoffnung, dass ich hier schneller eine Antwort bekomme als in der Octave-Kategorie.
Private Nachricht senden Benutzer-Profile anzeigen
Verschoben: 04.08.2019, 15:18 Uhr von Jan S
Von Grafiken und Plots nach Octave-Forum


Jan S
Moderator

Moderator


Beiträge: 11.057
Anmeldedatum: 08.07.10
Wohnort: Heidelberg
Version: 2009a, 2016b
     Beitrag Verfasst am: 04.08.2019, 15:28     Titel: Re: Plot dauert zu lange
  Antworten mit Zitat      
Hallo ThoRie,

Bitte poste Fragen zu Octave in der Kategorie "Octave". Die Laufzeit des Codes hängt entscheidend davon ab, mit welcher Software man sie berechnet. Du fragst speziell nach Octave, also bringt es nichts, das für Matlab zu optimieren. Danke!

In Matlab ist die Beschleunigung einfach:
Code:
tic
A = [0 0;10 10;20 0];
S = zeros(5000, 2);
hold on
plot(S(1),S(2),'rx');
plot(A(1,1),A(1,2),'bo');
plot(A(2,1),A(2,2),'bo');
plot(A(3,1),A(3,2),'bo');
for i = 2:5000  % [EDITED, start at 2, not at 1]
  a = randi(3);   % random('unid',3);
  B = A(a,:);
  S(i, :) = (S(i-1, :) + B) / 2;
end
plot(S(:, 1), S(:, 2), 'k.');
toc

Man zieht also den zeitaufwändigen plot Befehl aus der Schleife raus. Schon komme ich auf etwa 0.2 Sekunden - in Matlab, ich habe kein Octave installiert.

Gruß, Jan

Zuletzt bearbeitet von Jan S am 20.08.2019, 13:22, insgesamt einmal bearbeitet
Private Nachricht senden Benutzer-Profile anzeigen
 
ThoRie
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 34
Anmeldedatum: 22.05.19
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 04.08.2019, 17:40     Titel:
  Antworten mit Zitat      
Okay, vielen Dank.

Ich habe es einmal versucht, ich musste ihm lediglich nur noch eine if-Schleife einbauen, da im ersten Fall ja i-1=-1 gelten würde und das geht bei Octave nicht.
Also sieht das lauffähige Beispiel für Octave jetzt wie folgt aus:
Code:
tic
A = [0 0;10 10;20 0];
S = zeros(5000, 2);
hold on
plot(S(1),S(2),'rx');
plot(A(1,1),A(1,2),'bo');
plot(A(2,1),A(2,2),'bo');
plot(A(3,1),A(3,2),'bo');
for i = 1:5000
if i-1>0
  a = randi(3);   % random('unid',3);
  B = A(a,:);
  S(i, :) = (S(i-1, :) + B) / 2;
end
end
plot(S(:, 1), S(:, 2), 'k.');
toc
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 - 2024 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.