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

Integration von Messreihe

 

alex85
Forum-Anfänger

Forum-Anfänger


Beiträge: 40
Anmeldedatum: 06.10.09
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 28.11.2009, 21:51     Titel: Integration von Messreihe
  Antworten mit Zitat      
Ich habe zwei Vektoren: 'dn' und 't' mit jeweils 140.000 Werten. Abtastrate war 1000 Hz.

Ich möchte meine Werte einfach integrieren, habe folgenden Ansatz gewählt:

Code:

% zurückgelegter Weg: s = 2*pi*rm*dn/(60*1000)
syms i
int(dn,i,0,length(dn))


Eine Alternative wäre die Berechnung über eine for-Schleife, wie ich es hier z.B. gemacht habe, nur vergeht über 1 min!!! für die Berechnung, was mit zu lange ist.

Code:

% E = M(i)*dn(i)  --  dn [rpm]
E = 0;
tic
for i=1:length(eval(['M_',int2str(j/2+0.5), '(:,1)']))
           
            s = ['dn = n_an_', int2str(j/2+0.5), '(i,1) - n_ab_', int2str(j/2+0.5), '(i,1);'];
            eval(s);

            s = ['E = E + M_', int2str(j/2+0.5), '(i,1) * dn/(60*1000)*2*pi;'];
            eval(s);

end
E
toc


Kann mir hier jemand ein Tipp geben, wie ich dieses Problem mit einer möglichst geringen Rechenzeit lösen kann?! Danke!
Private Nachricht senden Benutzer-Profile anzeigen


Harald
Forum-Meister

Forum-Meister


Beiträge: 24.500
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 28.11.2009, 23:47     Titel:
  Antworten mit Zitat      
Hallo,

Code:

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

Forum-Anfänger

Forum-Anfänger


Beiträge: 40
Anmeldedatum: 06.10.09
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 29.11.2009, 11:15     Titel:
  Antworten mit Zitat      
Cool, somit ist die Rechenzeit von 30 sek auf 0,04 gefallen Very Happy Danke!

Für die Berechnung von E habe ich nun die Rechenzeit ebenfalls drücken können, indem ich meine Differenzdrehzahl einfach vor der for-Schleife berechne. Somit steht in meiner Schleife nur noch:
Code:

E=0;
for i=1:length(eval(['M_',int2str(j/2+0.5)]))

            s = ['E = E + M_', int2str(j/2+0.5), '(i,1) * dn_', int2str(j/2+0.5), ' (:,i) / (60*1000)*2*pi;'];
            eval(s);
end
 


Code:
/ (60*1000)*2*pi
könnte ich zwar noch aus der Schleife ziehen, das wird die Rechenzeit von über 40 sek aber auch nicht erheblich senken. Gibts hier noch eine Möglichkeit, den Prozess zu beschleunigen?
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


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

da dürfte schon noch was gehen. Um konkrete Vorschläge machen zu können, müsste ich allerdings wissen, welche Dimensionen die M_1 etc. und dn_1 etc. haben.

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

Forum-Anfänger

Forum-Anfänger


Beiträge: 40
Anmeldedatum: 06.10.09
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 29.11.2009, 11:55     Titel:
  Antworten mit Zitat      
Also pro Messung werden ca. 15 Zyklen gefahren (M_1 - M_15). Die Dimension schwankt etwas. Aber als Mittelwert könnte man in etwa (100.000 x 1) Messwerte pro Zyklus annehmen.
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.500
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 29.11.2009, 13:39     Titel:
  Antworten mit Zitat      
Hallo,

d.h. sowohl M_1 als auch dn_1 etc. sind Spaltenvektoren?

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

Forum-Anfänger

Forum-Anfänger


Beiträge: 40
Anmeldedatum: 06.10.09
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 29.11.2009, 14:12     Titel:
  Antworten mit Zitat      
Ja genau!
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.500
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 29.11.2009, 14:33     Titel:
  Antworten mit Zitat      
Dann müsste statt

Code:
E = E + M_1(i,1) * dn_1 (:,i) / (60*1000)*2*pi;

eigentlich

Code:
E = sum(M_1 .* dn_1) / (60*1000)*2*pi;

gehen.
Natürich musst du das wieder in deinen String packen.

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

Forum-Anfänger

Forum-Anfänger


Beiträge: 40
Anmeldedatum: 06.10.09
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 29.11.2009, 15:31     Titel:
  Antworten mit Zitat      
Rechenzeit von 44sek auf 0,004sek gefallen Shocked
Very Happy Very Happy Vielen Dank!!!!!!!!!!
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.