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

Berechnung dauert ewig

 

sipi
Forum-Anfänger

Forum-Anfänger


Beiträge: 15
Anmeldedatum: 10.03.12
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 10.03.2012, 12:22     Titel: Berechnung dauert ewig
  Antworten mit Zitat      
Hallo,

ich bin neu in diesem Forum und auch noch sehr grün hinter den Ohren im Umgang mit Matlab.

Ich habe folgendes Problem:
Ausgehend von einer Kurve will ich alle Extrema und deren Indizes finden. Soweit so gut, die Berechnungen hierzu dauerten auch noch nicht allzu lang. Nun habe ich das Programm erweitert: Zusätzlich sollen alle Zeitpunkte t_1 gefunden werden, an denen der Wert eines Maximums zuletzt erreicht wurde. Ich habe nun meine eingelesene Kurve schon von 525000 Werte auf 1000 reduziert, die Berechnung findet jedoch kein Ende!
Deswegen frage ich mich, ob es denn evtl ne einfachere Lösung gibt, die den benötigten Rechenaufwand ein wenig einschränkt.

Hier ist mein Code:
Code:

load datensatz;

% Maxima samt Indizes
diffx = diff([0,x,0]);
signdiffx = sign(diffx);
diffsigndiffx = diff(signdiffx);
index_max = find(diffsigndiffx < 0);
maxima = x(index_max);

% Minima samt Indizes
diffx = diff([0,x,0]);
signdiffx = sign(diffx);
diffsigndiffx = diff(signdiffx);
index_min = find(diffsigndiffx > 0);
minima = x(index_min);

% Ende für soc_eq_find
end_soc_eq_find = size(maxima);
end_soc_eq_find = end_soc_eq_find(2)-1;

c=1;
while c < end_soc_eq_find
   
    t_1(c) = soc_eq_find(datensatz, index_max(c+1), maxima(c+1));
    c+1;
   
    if c == end_soc_eq_find
        break
    end
   
end
 


Die Funktion soc_eq_find enthält noch folgenden Code:
Code:

function [t_1] = soc_eq_find(x, t_2, maxt_2)

i = t_2;

while i > 0
   
    i = i-1;
   
    if x(i) > x(t_2)
        break
    end
   
   
end

t_1 = i;
 




Wie gesagt, ich bin neu hier, also verzeiht mir bitte falls dieser Beitrag an der falschen Stelle sein sollte und die anfängerhafte Art und Weise des Codes Wink

Besten Dank im Voraus!
Private Nachricht senden Benutzer-Profile anzeigen


Harald
Forum-Meister

Forum-Meister


Beiträge: 24.502
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 10.03.2012, 22:12     Titel:
  Antworten mit Zitat      
Hallo,

im Zweifelsfall kann auch mal der Debugger helfen.
c wird in der ersten while-Schleife nie verändert. Du meinst wohl
Code:
c = c + 1;


Warum eigentlich dieses komische Konstrukt mit while/if/break statt einer for-Schleife?

Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
sipi
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 15
Anmeldedatum: 10.03.12
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 12.03.2012, 11:05     Titel:
  Antworten mit Zitat      
ja meine for-Schleife wollte zunächst nicht so wie ich es wollte, dann habe ich es durch dieses Konstrukt ausgetauscht und es hat geklappt! Deswegen hab ich es auch dabei belassen!


achja, das mit dem Zähler hat ich übersehen. Natürlich gehört da ein c = c+1 hin, dankeschön!
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.502
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 12.03.2012, 11:28     Titel:
  Antworten mit Zitat      
Hallo,

sind damit auch die Performance-Probleme erledigt?

Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
sipi
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 15
Anmeldedatum: 10.03.12
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 12.03.2012, 11:29     Titel:
  Antworten mit Zitat      
ja, so wie es aussieht wohl schon!

Danke nochmal!
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.