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 programmieren

 

Gast

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 27.10.2010, 21:46     Titel: Gleitender Mittelwert programmieren
  Antworten mit Zitat      
Hallo,

ich möchte einen gleitender Mittelwert (siehe unten) mithilfe einer Funktion programmieren.
Code:

yy(1) = y(1)
yy(2) = (y(1) + y(2) + y(3))/3
yy(3) = (y(1) + y(2) + y(3) + y(4) + y(5))/5
yy(4) = (y(2) + y(3) + y(4) + y(5) + y(6))/5
yy(n)= (y(1)+...+y(n))/n ;
 

Hat jemand eine Idee?

Danke


monica
Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 52
Anmeldedatum: 08.01.09
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 27.10.2010, 21:51     Titel:
  Antworten mit Zitat      
Hi,

schau mal im file exchange, unter "moving average"

Beste Grüße
Private Nachricht senden Benutzer-Profile anzeigen
 
Gast

Gast


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

im Forum habe ich was gefunden.

http://www.gomatlab.de/gleitender-m.....leitender+mittelwert.html

Code:

n = length(Datenvektor);

for index = 2:n
    Mittelwert(index-1) = mean(Datenvektor(1:index));
end
 


Aber Mittelwert ist nicht initialisiert.
Kann jemand mir helfen?
Danke
 
hosti
Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 83
Anmeldedatum: 08.09.09
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 27.10.2010, 22:17     Titel:
  Antworten mit Zitat      
einfach vorher mit zeros initialisieren:

Code:

Mittelwert = zeros(n-1,1);
 


lg
Private Nachricht senden Benutzer-Profile anzeigen
 
Gast

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 27.10.2010, 22:39     Titel:
  Antworten mit Zitat      
Hallo,
Danke für die schnelle Antwort. Ich habe es ausprobiert. Meine Funktion sieht so aus:
Code:


function o=gleitenderMittelwert(y)

n = length(y);
Mittelwert = zeros(n-1,1);

for index = 2:n
    Mittelwert(index-1) = mean(y(1:index));
end
 
o=Mittelwert;
end

 


Wenn y= [1 2 3 4 5] zum Beispiel, bekomme ich 1.5 2 2.5 3 als Ergebnis.
Eigentlich sollte ich 1 1.5 2 3 4 bekommen.
Was habe ich falsch gemacht?

Danke nochmal!!!
 
Gast

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 27.10.2010, 22:53     Titel:
  Antworten mit Zitat      
Hallo,
Danke für die schnelle Antwort. Ich habe es ausprobiert. Meine Funktion sieht so aus:
Code:


function o=gleitenderMittelwert(y)

n = length(y);
Mittelwert = zeros(n-1,1);

for index = 2:n
    Mittelwert(index-1) = mean(y(1:index));
end
 
o=Mittelwert;
end

 


Wenn y= [1 2 3 4 5] zum Beispiel, bekomme ich 1.5 2 2.5 3 als Ergebnis.
Eigentlich sollte ich 1 1.5 2 3 4 bekommen.
Was habe ich falsch gemacht?

Danke nochmal!!!
 
Gast

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 27.10.2010, 23:22     Titel:
  Antworten mit Zitat      
Hallo,

es besteht die Möglichkeit FILTER zu benutzen.
Code:

y= [1 2 3 4 5]
windowSize = 5;
ergebnis=filter(ones(1,windowSize)/windowSize,1,data)

Ich kriege 0.2000 0.6000 1.2000 2.0000 3.0000 als Ergebnis.
Es funktioniert auch nicht so ganz. Hat jemand eine Idee? Danke.
 
Jan S
Moderator

Moderator


Beiträge: 11.057
Anmeldedatum: 08.07.10
Wohnort: Heidelberg
Version: 2009a, 2016b
     Beitrag Verfasst am: 28.10.2010, 15:39     Titel: Re: Gleitender Mittelwert programmieren
  Antworten mit Zitat      
Hallo Gast!

Zitat:
Code:

yy(1) = y(1)
yy(2) = (y(1) + y(2) + y(3))/3
yy(3) = (y(1) + y(2) + y(3) + y(4) + y(5))/5
yy(4) = (y(2) + y(3) + y(4) + y(5) + y(6))/5
yy(n)= (y(1)+...+y(n))/n ;
 

Die Beschreibung ist nicht schlüssig:
Code:

yy(4) = (y(2) + y(3) + y(4) + y(5) + y(6))/5
yy(n)= (y(1)+...+y(n))/n ;
 

Die beiden Zeilen sind nich kompatibel, für n==4 kommt einfach nicht die obere Zeile heraus.

"Gleitender Mittelwert" bezieht sich immer auf ein bestimmtes Fenster. Die ersten 4 Zeilen sehen so aus, als sein die Fensterweite 5 gemeint.
Die letzte Zeile sieht aber so aus, als würdest Du nach folgendem suchen:
Code:
yy = cumsum(y) ./ (1:length(y))

Gruß, Jan
Private Nachricht senden Benutzer-Profile anzeigen
 
hammy
Forum-Anfänger

Forum-Anfänger


Beiträge: 14
Anmeldedatum: 25.10.10
Wohnort: Schweiz
Version: ---
     Beitrag Verfasst am: 28.10.2010, 21:46     Titel:
  Antworten mit Zitat      
Warum machst dus nicht so:

Code:

% data steht für deine Matrix

x = length(data);

durchschnitt = mean(data(1:x));

 


Hilft das?
Private Nachricht senden Benutzer-Profile anzeigen
 
Andreas Goser
Forum-Meister

Forum-Meister


Beiträge: 3.654
Anmeldedatum: 04.12.08
Wohnort: Ismaning
Version: 1.0
     Beitrag Verfasst am: 29.10.2010, 08:59     Titel:
  Antworten mit Zitat      
Code:

Zitat:

You can use filter to find a running average without using a for loop. This example finds the running average of a 16-element vector, using a window size of 5.

Code:

data = [1:0.2:4]';
windowSize = 5;
filter(ones(1,windowSize)/windowSize,1,data)
 

Andreas
Private Nachricht senden Benutzer-Profile anzeigen E-Mail senden
 
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.