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

gleitender Mittelwert

 

Olli123

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 23.10.2009, 12:15     Titel: gleitender Mittelwert
  Antworten mit Zitat      
Hallo zusammen,
ich möchten einen gleitenden Mittelwert in MatLab berechnen aber bekomme das nicht hin.
Also die generelle Form sollte sein, das zum Bsp. der Mittelwert der Werte 1 - 11 meines Datensatzes berechnet wird, dann 2-12, 3 - 13, usw.
kann mir da jemand helfen?

viele Grüße
Olli


Harald
Forum-Meister

Forum-Meister


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

probiers mal mit filter oder (einfacher in der Handhabung) convn, z.B.

Code:
m = convn(data,ones(11,1)./11,'valid');


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

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 23.10.2009, 12:47     Titel:
  Antworten mit Zitat      
hier mal meine idee:

Code:

x = rand(100,1);
cx = cumsum(x);
plot(x);
hold on;
plot((circshift(cx,-10) -cx)/10,'r');
 



nur bei den letzten werten muss man noch ein wenig basteln
 
Titus
Forum-Meister

Forum-Meister


Beiträge: 871
Anmeldedatum: 19.07.07
Wohnort: Aachen
Version: ---
     Beitrag Verfasst am: 23.10.2009, 13:32     Titel:
  Antworten mit Zitat      
Hallo,

Code:


Da ist genau das beschrieben (moving average).

Titus
Private Nachricht senden Benutzer-Profile anzeigen
 
guest1

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 12.05.2010, 15:49     Titel: Bitte um (noch) mehr Hilfe
  Antworten mit Zitat      
Hallo,

sorry, Leute, ich raffs nicht. Ich hab genau das selbe Problem, und auch den Eintrag in der Hilfe gelesen. Da ist ja auch ein Beispiel:

Code:
filter(ones(1,windowSize)/windowSize,1,data)


..Bei einer Fenstergröße von 5. Okay, das hab ich geschnallt. Ich verstehe nur nicht, was der zweite Parameter - hier: 1 - bewirkt.

Weiter unten ist ja der Algorithmus beschrieben. So will ich den Wert aber nicht berechnet haben. Was muss ich genau tun?

Oder verstehe ich viell. die Berechnung des "Gleitenden Mittelwerts" falsch.

Danke für die Hilfe
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.452
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 12.05.2010, 16:04     Titel:
  Antworten mit Zitat      
Hallo,

Zitat:
Ich verstehe nur nicht, was der zweite Parameter - hier: 1 - bewirkt.

die 1 bewirkt, dass eben nur ein gleitender Mittelwert berechnet wird und die Terme - a(2)*y(n-1) - ... - a(na+1)*y(n-na) nicht berücksichtigt werden.

Zitat:
So will ich den Wert aber nicht berechnet haben

Meine Glaskugel ist gerade etwas trübe Wink Wie willst du ihn denn berechnet haben?

Zitat:
Was muss ich genau tun?

Das hängt von deiner Antwort auf die obere Frage ab.

Tipp: an einem einfachen Beispiel ansehen, was man haben möchte und was filter ausspuckt. Dann kann man das entsprechend anpassen.

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

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 12.05.2010, 16:28     Titel:
  Antworten mit Zitat      
Hallo,

das hab ich wohl nicht richtig erläutert Embarassed . Ich habe das gleiche Problem wie der TS:

Ich habe einen Datensatz bestimmter Länge und möchte dass "z.Bsp. der Mittelwert der Werte 1 - 11 meines Datensatzes berechnet wird, dann 2-12, 3 - 13 usw. "

Das schlimme ist, dass ich das wirklich an nem einfachen Beispiel ausgetestet hab und nicht das herausgekommen ist, was ich will.

Danke
 
quant82
Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 97
Anmeldedatum: 30.04.10
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 12.05.2010, 17:31     Titel:
  Antworten mit Zitat      
naja angenommen a ist der vector....

dann lässte eben eine forschleife drüberlaufen... geht bestimmt auch einfacher aber so sollte es gehen

Code:


a = [1 2 4 5 6  3 4 2 3 4 5 3 34]'

for i = 1:irgendwas

mean(a(i:i+10))
end

 
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.452
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 12.05.2010, 18:57     Titel:
  Antworten mit Zitat      
Hallo,

@ quant82: ja, eben dafür gibts den Befehl filter. Bei großen Vektoren ist der um Größenordnungen schneller als eine for-Schleife über mean. Mal davon abgesehen, dass man mit dem Code am Ende nur den letzten Mittelwert hätte...

@ guest1: sag doch bitte, WIESO nicht das herauskommt, was du willst. Oder WAS du willst. Falls dich nur die ersten paar Werte stören, schneid sie doch einfach ab?

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

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 13.05.2010, 16:03     Titel:
  Antworten mit Zitat      
Hallo,

ich hab grad aktuell die Zahlen nicht hier, weil ich nicht auf der Arbeit bin. Ich meld mich am Montag nochmal. Wenn ich alles nachgerechnet hab...
 
guest1

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 17.05.2010, 10:05     Titel:
  Antworten mit Zitat      
Guten Morgen,

ich starte einen erneuten Versuch Smile.
Es ist wohl tatsächlich so, dass ich das mit dem gleitenden Mittelwert etwas falsch verstanden hab.

Ich möchte für einen Vektor Y, der die Länge k hat, den Mittelwert einzelner "Perioden" berechnen und den in einen Vektor M schreiben, wobei die "Periodenlänge" n variabel sein soll, M ist dann freilich kürzer als Y und hat die Länge x, was der Anzahl besagter "Perioden" entspricht:


Also M[1]= (Y[1]+ Y[2]+ ..+Y[n])/ n ; M[2]= (Y[n+1]+ Y[n+2]+...Y[n+n])/n; .... M[x] = (Y[n+ n+ ...+ 1]+ Y[n+ n+ ...+ 2]+ ..Y[k])/n;

Ich hoffe, das war verständlich.

Soweit ich nun verstanden hab, ist dies aber nicht das was man allgemein als "Gleitender Mittelwert" bezeichnet.
Bis jetzt löse ich das über eine Vorschleife:

Code:

for k= 1: x,
    M (k) = mean (Y(2, (k-1)*n +1 : k* n );
end
 


Weil ja aber for-Schleifen bekanntlicherweise nicht ganz so praktisch und langsamer sind, suchte ich nach ner besseren Lösung. Und Mmn. ist es das gleiche, was im ersten Post steht.

Vielen Dank für die Hilfe
 
Harald
Forum-Meister

Forum-Meister


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

ja, das ist verständlich, ist aber eben kein gleitender Mittelwert.

Wenn k durch n teilbar ist, geht folgendes:
Code:
mittel = mean(reshape(y, n, []));


Nach deinem Codebeispiel scheint das aber ja der Fall zu sein. Falls nicht, den Vektor vorher entsprechend kürzen.

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

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 19.05.2010, 14:39     Titel:
  Antworten mit Zitat      
Hi,

super danke. Es funktioniert tatsächlich. Danke für die Hilfe. Dauert wirklich n bisschen, bis man hier alle Befehle kennt (und dann auch versteht) Smile

..ach ja: und es muss natürlich for-Schleife heißen, nicht Vorschleife Embarassed
 
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.