Mit MATLAB, wie finde ich die 3-Tage gleitenden Durchschnitt einer bestimmten Spalte einer Matrix und hängen Sie den gleitenden Durchschnitt zu dieser Matrix Ich versuche, die 3-Tage gleitenden Durchschnitt von unten nach oben der Matrix zu berechnen. Ich habe meinen Code: Angesichts der folgenden Matrix a und Maske: Ich habe versucht Umsetzung der conv Befehl, aber ich erhalte einen Fehler. Hier ist der Befehl conv, den ich versucht habe, auf der 2. Spalte der Matrix a zu verwenden: Die Ausgabe, die ich wünsche, wird in der folgenden Matrix gegeben: Wenn Sie irgendwelche Vorschläge haben, würde ich es sehr schätzen. Vielen Dank für die Spalte 2 der Matrix a, ich bin die Berechnung der 3-Tage gleitenden Durchschnitt wie folgt und platziert das Ergebnis in Spalte 4 der Matrix a (Ich umbenannt Matrix a als 39desiredOutput39 nur für Abbildung). Der 3-tägige Durchschnitt von 17, 14, 11 ist 14 der dreitägige Durchschnitt von 14, 11, 8 ist 11 der 3-Tage-Durchschnitt von 11, 8, 5 ist 8 und der 3-Tage-Durchschnitt von 8, 5, 2 ist 5. Es gibt keinen Wert in den unteren 2 Zeilen für die 4. Spalte, da die Berechnung für den dreitägigen gleitenden Durchschnitt am unteren Ende beginnt. Die 39valid39 Ausgabe wird nicht angezeigt, bis mindestens 17, 14 und 11. Hoffentlich macht dies Sinn ndash Aaron 12 12 13 am 1:28 Im Allgemeinen würde es helfen, wenn Sie den Fehler anzeigen würde. In diesem Fall tun Sie zwei Dinge falsch: Zuerst muss Ihre Faltung durch drei (oder die Länge der gleitenden Durchschnitt) geteilt werden Zweitens beachten Sie die Größe von c. Sie können nicht einfach passen c in eine. Der typische Weg, um einen gleitenden Durchschnitt wäre, um die gleiche: aber das sieht nicht wie Sie wollen. Stattdessen sind Sie gezwungen, ein paar Zeilen zu verwenden: Download movAv. m (siehe auch movAv2 - eine aktualisierte Version, die eine Gewichtung erlaubt) Beschreibung Matlab enthält Funktionen, die movavg und tsmovavg (Zeitreihenbewegungsdurchschnitt) in der Financial Toolbox, movAv, entworfen werden Replizieren die grundlegende Funktionalität dieser. Der Code hier bietet ein schönes Beispiel für die Verwaltung von Indizes innerhalb Schleifen, die zu Beginn verwirrend sein kann. Ive bewusst hielt den Code kurz und einfach zu halten diesen Prozess klar. MovAv führt einen einfachen gleitenden Durchschnitt aus, der verwendet werden kann, um in einigen Situationen verrauschte Daten wiederherzustellen. Es funktioniert, indem man den Mittelwert der Eingabe (y) über ein gleitendes Zeitfenster nimmt, dessen Größe durch n spezifiziert ist. Je größer n ist, desto größer ist die Glättung der Wirkung von n in Bezug auf die Länge des Eingangsvektors y. Und effektiv (gut, Art von) schafft ein Tiefpass-Frequenz-Filter - siehe die Beispiele und Überlegungen Abschnitt. Da die Menge an Glättung, die von jedem Wert von n bereitgestellt wird, relativ zu der Länge des Eingangsvektors ist, ist es immer wert, verschiedene Werte zu testen, um zu sehen, was passend ist. Denken Sie auch daran, dass n Punkte in jedem Durchschnitt verloren gehen, wenn n 100 ist, enthalten die ersten 99 Punkte des Eingangsvektors nicht genug Daten für einen Durchschnitt von 100pt. Dies kann durch Stapeln von Durchschnitten etwas vermieden werden, zum Beispiel, wenn der Code und das Diagramm unten eine Anzahl von unterschiedlichen Längenfensterdurchschnitten vergleichen. Beachten Sie, wie glatt 1010pt mit einem einzigen 20pt Durchschnitt verglichen wird. In beiden Fällen gehen insgesamt 20 Datenpunkte verloren. Erstellen Sie xaxis x1: 0.01: 5 Erzeugen Sie RauschenRauschen 4 Rauschen repmat (randn (1, ceil (numel (x) noiseReps)), noiseReps, 1) Rauschform (Rauschen, 1, Länge (Rauschen) noiseReps) Generieren Sie ydata Rauschen yexp (Y, 20) 20 pt y5 movAv (y, 40) 40 pt (y, 10) 10 & ndash; (X, y2, y3, y4, y5, y6) Legende (Rohdaten, 10pt gleitender Durchschnitt, 1010pt, 20pt, 40pt, 100pt) xlabel (x) ylabel Y) title (Vergleich der gleitenden Mittelwerte) movAv. m Code Durchlauffunktion output movAv (y, n) Die erste Zeile definiert die Funktionen name, inputs und output. Der Eingang x sollte ein Vektor von Daten, um den Durchschnitt auf, n sollte die Anzahl der Punkte, um die durchschnittliche über die Ausgabe werden die gemittelten Daten, die von der Funktion zurückgegeben werden. Ausgangspunkt NAN vorgeben (1, numel (y)) Mittelpunkt von n finden midPoint round (n2) Die Hauptfunktion der Funktion wird in der for-Schleife ausgeführt, aber vor dem Start werden zwei Dinge vorbereitet. Zuerst wird die Ausgabe als NaNs vorgegeben, dies diente zwei Zwecken. Zuerst ist die Vorverteilung allgemein gute Praxis, da sie das Gedächtnis-Jonglieren, das Matlab zu tun hat, reduziert, zweitens macht es es sehr einfach, die gemittelten Daten in einen Ausgang einzustellen, der dieselbe Größe wie der Eingangsvektor hat. Dies bedeutet, dass die gleiche Xaxis später für beide verwendet werden kann, was für das Plotten zweckmßig ist, alternativ können die NaNs später in einer Zeile des Codes entfernt werden (Ausgangsausgang (Der variable midPoint wird verwendet, um die Daten in dem Ausgangsvektor auszurichten N 10, werden 10 Punkte verloren gehen, da für die ersten 9 Punkte des Eingangsvektors nicht genügend Daten vorhanden sind, um einen 10-Punkte-Durchschnitt zu nehmen. Wenn die Ausgabe kürzer als die Eingabe ist, muss sie ordnungsgemäß ausgerichtet werden Verwendet werden, so dass eine gleiche Menge an Daten am Anfang und am Ende verloren geht und der Eingang mit den Ausgangssignalen von den NaN-Puffern ausgerichtet bleibt, die erzeugt werden, wenn eine Ausgabe vorangestellt wird, für einen Indexwert von 1: Länge (y) (A: b) ban Berechnung des Mittelwerts (amidPoint) Mittelwert (y (a: b)) Ende In der for-Schleife wird ein Mittelwert über jedes aufeinanderfolgende Segment des Eingangs übernommen Definiert als 1 bis zur Länge des Eingangs (y), abzüglich der Daten, die verloren gehen (n) Wenn die Eingabe 100 Punkte lang ist und n 10 ist, wird die Schleife von (a) 1 bis 90 laufen Bedeutet a liefert den ersten Index des zu mittelnden Segments. Der zweite Index (b) ist einfach ein-1. Also auf der ersten Iteration, a1. N10. So b 11-1 10. Der erste Durchschnitt wird über y (a: b) übernommen. Oder x (1:10). Der Durchschnitt dieses Segments, das ein einzelner Wert ist, wird in der Ausgabe am Index amidPoint gespeichert. Oder 156. Auf der zweiten Iteration, a2. B 210-1 11. So wird der Mittelwert über x (2:11) übernommen und im Ausgang (7) gespeichert. Bei der letzten Iteration der Schleife für einen Eingang der Länge 100, a91. B 9010-1 100 so wird der Mittelwert x (91: 100) übernommen und im Ausgang (95) gespeichert. Dies verlässt den Ausgang mit insgesamt n (10) NaN-Werten am Index (1: 5) und (96: 100). Beispiele und Überlegungen Gleitende Durchschnitte sind in einigen Situationen nützlich, aber theyre nicht immer die beste Wahl. Hier sind zwei Beispiele, wo sie nicht unbedingt optimal sind. Mikrofonkalibrierung Dieser Datensatz repräsentiert die Pegel jeder Frequenz, die von einem Lautsprecher erzeugt und von einem Mikrofon mit einer bekannten linearen Antwort aufgezeichnet wird. Der Ausgang des Lautsprechers variiert mit der Frequenz, aber wir können diese Abweichung mit den Kalibrierdaten korrigieren - der Ausgang kann in Pegel eingestellt werden, um die Schwankungen der Kalibrierung zu berücksichtigen. Beachten Sie, dass die Rohdaten verrauscht sind - dies bedeutet, dass eine kleine Änderung der Frequenz eine große, unregelmäßige Änderung des Pegels erforderlich macht. Ist dies realistisch oder ist dies ein Produkt der Aufzeichnungsumgebung ist es sinnvoll, in diesem Fall einen gleitenden Durchschnitt anzuwenden, der die Pegelfrequenzkurve ausgleicht, um eine Eichkurve zu liefern, die etwas weniger unregelmäßig ist. Aber warum ist dies nicht optimal in diesem Beispiel Mehr Daten wäre besser - mehrere Kalibrierungen läuft gemittelt würde das Rauschen im System zerstören (so lange wie seine zufällige) und bieten eine Kurve mit weniger subtilen Details verloren. Der gleitende Durchschnitt kann nur annähern, und kann einige höhere Frequenz Dips und Peaks aus der Kurve, die wirklich existieren zu entfernen. Sine Wellen Mit einem gleitenden Durchschnitt auf Sinus-Wellen hebt zwei Punkte: Die allgemeine Frage der Auswahl einer vernünftigen Anzahl von Punkten, um den Durchschnitt über. Seine einfache, aber es gibt effektivere Methoden der Signalanalyse als Mittelung oszillierender Signale im Zeitbereich. In diesem Diagramm ist die ursprüngliche Sinuswelle blau aufgetragen. Rauschen wird hinzugefügt und als die orange Kurve aufgetragen. Ein gleitender Durchschnitt wird bei verschiedenen Punktzahlen durchgeführt, um zu sehen, ob die ursprüngliche Welle wiederhergestellt werden kann. 5 und 10 Punkte liefern vernünftige Ergebnisse, aber entfernen Sie nicht das Rauschen vollständig, wo die größeren Punktezahlen beginnen, Amplitudendetails zu verlieren, da sich der Mittelwert über verschiedene Phasen erstreckt (erinnern Sie sich an die Welle oscilates um Null und Mittelwert (-1 1) 0) . Ein alternativer Ansatz wäre, ein Tiefpaßfilter aufzubauen, als es auf das Signal im Frequenzbereich angewendet werden kann. Im nicht gehen ins Detail gehen, wie es geht über den Rahmen dieses Artikels, aber da das Rauschen ist wesentlich höhere Frequenz als die Wellen Grundfrequenz, wäre es ziemlich einfach in diesem Fall ein Tiefpassfilter als die Hochfrequenz zu entfernen Noise. Documentation output tsmovavg (tsobj, s, lag) gibt den einfachen gleitenden Durchschnitt für das finanzielle Zeitreihenobjekt tsobj zurück. Verzögerung gibt die Anzahl der vorherigen Datenpunkte an, die beim Berechnen des gleitenden Mittelwerts mit dem aktuellen Datenpunkt verwendet werden. Ausgabe tsmovavg (Vektor, s, lag, dim) gibt den einfachen gleitenden Durchschnitt für einen Vektor zurück. Verzögerung gibt die Anzahl der vorherigen Datenpunkte an, die beim Berechnen des gleitenden Mittelwerts mit dem aktuellen Datenpunkt verwendet werden. Output tsmovavg (tsobj, e, timeperiod) gibt den exponentiellen gewichteten gleitenden Durchschnitt für das finanzielle Zeitreihenobjekt tsobj zurück. Der exponentielle gleitende Durchschnitt ist ein gewichteter gleitender Durchschnitt, wobei die Zeitperiode den Zeitraum angibt. Exponentielle gleitende Durchschnitte reduzieren die Verzögerung durch mehr Gewicht auf die jüngsten Preise. Zum Beispiel gewichtet ein 10-Perioden-exponentieller gleitender Durchschnitt den jüngsten Preis um 18,18. Exponentialprozent 2 (TIMEPER 1) oder 2 (WINDOWSIZE 1). Output tsmovavg (Vektor, e, timeperiod, dim) gibt den exponentiell gewichteten gleitenden Durchschnitt für einen Vektor zurück. Der exponentielle gleitende Durchschnitt ist ein gewichteter gleitender Durchschnitt, wobei die Zeitperiode den Zeitraum angibt. Exponentielle gleitende Durchschnitte reduzieren die Verzögerung durch mehr Gewicht auf die jüngsten Preise. Zum Beispiel gewichtet ein 10-Perioden-exponentieller gleitender Durchschnitt den jüngsten Preis um 18,18. (2 (Zeitabschnitt 1)). Ausgabe tsmovavg (tsobj, t, numperiod) gibt den dreieckigen gleitenden Durchschnitt für das finanzielle Zeitreihenobjekt tsobj zurück. Der dreieckige gleitende Durchschnitt doppelt glättet die Daten. Tsmovavg berechnet den ersten einfachen gleitenden Durchschnitt mit Fensterbreite von ceil (numperiod 1) 2. Dann berechnet es einen zweiten einfachen gleitenden Durchschnitt auf dem ersten gleitenden Durchschnitt mit der gleichen Fenstergröße. Ausgabe tsmovavg (Vektor, t, numperiod, dim) gibt den dreieckigen gleitenden Durchschnitt für einen Vektor zurück. Der dreieckige gleitende Durchschnitt doppelt glättet die Daten. Tsmovavg berechnet den ersten einfachen gleitenden Durchschnitt mit Fensterbreite von ceil (numperiod 1) 2. Dann berechnet es einen zweiten einfachen gleitenden Durchschnitt auf dem ersten gleitenden Durchschnitt mit der gleichen Fenstergröße. Output tsmovavg (tsobj, w, gewichte) liefert den gewichteten gleitenden Durchschnitt für das finanzielle Zeitreihenobjekt tsobj. Indem Gewichte für jedes Element in dem sich bewegenden Fenster bereitgestellt werden. Die Länge des Gewichtsvektors bestimmt die Größe des Fensters. Wenn größere Gewichtungsfaktoren für neuere Preise und kleinere Faktoren für frühere Preise verwendet werden, ist der Trend eher auf die jüngsten Veränderungen ansprechen. Ausgabe tsmovavg (Vektor, w, Gewichte, dim) gibt den gewichteten gleitenden Durchschnitt für den Vektor zurück, indem Gewichte für jedes Element in dem sich bewegenden Fenster geliefert werden. Die Länge des Gewichtsvektors bestimmt die Größe des Fensters. Wenn größere Gewichtungsfaktoren für neuere Preise und kleinere Faktoren für frühere Preise verwendet werden, ist der Trend eher auf die jüngsten Veränderungen ansprechen. Output tsmovavg (tsobj, m, numperiod) gibt den modifizierten gleitenden Durchschnitt für das finanzielle Zeitreihenobjekt, tsobj, zurück. Der modifizierte gleitende Durchschnitt ist ähnlich dem einfachen gleitenden Durchschnitt. Betrachten Sie das Argument numperiod als die Verzögerung des einfachen gleitenden Mittelwerts. Der erste modifizierte gleitende Durchschnitt wird wie ein einfacher gleitender Durchschnitt berechnet. Die folgenden Werte werden durch Addition des neuen Preises und Subtrahieren des letzten Durchschnitts aus der resultierenden Summe berechnet. Ausgabe tsmovavg (Vektor, m, numperiod, dim) gibt den modifizierten gleitenden Durchschnitt für den Vektor zurück. Der modifizierte gleitende Durchschnitt ist ähnlich dem einfachen gleitenden Durchschnitt. Betrachten Sie das Argument numperiod als die Verzögerung des einfachen gleitenden Mittelwerts. Der erste modifizierte gleitende Durchschnitt wird wie ein einfacher gleitender Durchschnitt berechnet. Die folgenden Werte werden durch Addition des neuen Preises und Subtrahieren des letzten Durchschnitts aus der resultierenden Summe berechnet. Dim 8212 Dimension, um auf positive ganze Zahl mit dem Wert 1 oder 2 arbeiten Dimension zu arbeiten, als eine positive Ganzzahl mit einem Wert von 1 oder 2 angegeben. Dim ist ein optionales Eingabeargument, und wenn es nicht als eine Eingabe enthalten ist, die Standardeinstellung Wert 2 wird angenommen. Der Standardwert von dim 2 gibt eine zeilenorientierte Matrix an, wobei jede Zeile eine Variable ist und jede Spalte eine Beobachtung ist. Wenn dim 1. die Eingabe als Spaltenvektor oder spaltenorientierte Matrix angenommen wird, wobei jede Spalte eine Variable und jede Zeile eine Beobachtung ist. E 8212 Indikator für exponentiell gleitenden durchschnittlichen Charaktervektor Der exponentielle gleitende Durchschnitt ist ein gewichteter gleitender Durchschnitt, wobei der Zeitabschnitt der Zeitraum des exponentiellen gleitenden Durchschnitts ist. Exponentielle gleitende Durchschnitte reduzieren die Verzögerung durch mehr Gewicht auf die jüngsten Preise. Zum Beispiel gewichtet ein 10-Perioden-exponentieller gleitender Durchschnitt den jüngsten Preis um 18,18. Exponentialprozent 2 (TIMEPER 1) oder 2 (WINDOWSIZE 1) timeperiod 8212 Zeitdauer nonnegative integer Wählen Sie Ihr Land aus
No comments:
Post a Comment