Wednesday, 14 June 2017

Moving Average Array


Ihre innere für ist Iteration alle Array, so dass s, warum Sie immer den gleichen Durchschnitt die für die ganze Array, sollten Sie von 0 auf die aktuelle Anzahl der äußeren für stattdessen iterieren. Ihr gleitender Durchschnitt wird aktualisiert in j von Ihr inneres für das bedeutet, dass es vorherige Werte jede neue Schleife überschreibt, sollte dies innerhalb der äußeren für statt der inneren mit i als index. You sind Teilung Summe j berechnen Mittelwerte, jede neue innere Schleife j Sie werden durch 0 teilen Die erste Summe, die ich glaube, dass Sie j 1 stattdessen verwenden möchten, ist der Index nicht derselbe wie die aktuelle Länge. Tips, um zu beheben. Wenn Sie Variablen verwenden, um Loop-Arrays, sollten Sie stattdessen verwenden. Für eine Frage der Reproduktion Ihrer Frage können Sie uns die Isolierte Problem statt deiner aktuellen Code ie. Imagine, wenn der Fehler in deinen Eingaben ist, wie konnten wir glauben, dass du sie wirklich benutzt hast. Sie wurden am 4. Oktober 13 bei 20 54. Du schlief alle Daten jedes Mal, wenn du für int ji haben solltest Durchschnittlich length i-averageLength 2 0 ji averageLength 2 j numDataPoints j oder etwas ähnliches für deinen innersten Durchschnitt. Ebenso sollte movingAverage i sum j modifiziert werden, um den Fall zu behandeln, wenn j 0 ist. Insbesondere sollte es sich wahrscheinlich bewegen Sollte auf den movingAverage i-Slot außerhalb der Mittelungsschleife angewendet werden. answered Okt 4 13 bei 20 42.Next Zeit, nehmen Sie die Kommentare über die Zuordnung aus der Frage, bevor Sie es posten Aber da Sie scheinen ziemlich neu in diesem, darüber nachzudenken, wie Sie würden durch die Daten gehen, und machen Sie es tun, dass Sie versuchen sollten, um sicherzustellen, dass jede Schleife an der richtigen Stelle stoppt, und denken Sie daran, dass, wenn Sie aufhören würde, wenn es keine Zahlen mehr gibt, wie wenn Sie die innere Schleife machen und Sie können nur 3 weitere Zahlen anstelle von 4 das Programm muss auch aufhören, stellen Sie sicher, dass Ihr Code für diese. Erweiterte Oct 4 13 bei 20 56.Without alle zusätzlichen Details, benötigen Sie wahrscheinlich einen ungewichteten gleitenden Durchschnitt an jedem Punkt A i In der Eingangsanordnung A der Länge N mit 0 i N, das ist einfach der Mittelwert der vorherigen K-Einträge des Arrays, bis zu und einschließlich A i Wenn es also t K solche Werte gibt, dann durchschnittlich die i 1 - Werte aus A 0 Durch A i inclusive. Ein bisschen Gedanken zeigen Ihnen, dass Sie nicht brauchen, um alle K-Werte jedes Mal addieren Sie einfach die Summe und beim Umzug auf den nächsten Punkt ist dies ein gleitender Durchschnitt, subtrahieren Sie den Wert, der s ist Ersetzt und den neuen Wert addieren, der es ersetzen wird Während der ersten K-1 Punkte addierst du einfach den neuen Wert in die Summe und erhöhe deinen Zähler um 1. Ein beliebiger Punkt in diesem Prozess ist der gleitende Durchschnitt die aktuelle Summe Durch die aktuelle Zählwert. answered Okt 4 13 bei 21 05.In einem gleitenden Durchschnitt, müssen Sie eine Art von Fenster size. Your Fenstergröße ist averageLength, so wird es so etwas aussehen. Die Schleife beginnt bei der aktuellen Daten und geht zurück DurchschnittLength Datenpunkte und fügt sie hinzu Sie haben nur einen gleitenden Durchschnitt, wenn Sie haben, wenn Sie genug Datenpunkte haben und der Durchschnitt wird die Summe geteilt durch die durchschnittliche length. Note Nicht getestet nur Sudo-Code, aber Dies ist die idea. answered Okt 4 13 bei 21 05.Ihr Antwort.2017 Stack Exchange, Inc. Ich weiß, das ist erreichbar mit Boost wie pro. But ich wirklich gerne vermeiden, Boost Ich habe gegoogelt und nicht gefunden, geeignet oder Lesbare Beispiele. Basisch möchte ich den gleitenden Durchschnitt eines laufenden Stroms von einem Strom von Gleitkommazahlen mit den neuesten 1000 Zahlen als Datenbeispiel verfolgen. Was ist der einfachste Weg, dies zu erreichen. Ich experimentierte mit einem kreisförmigen Array, Exponentieller gleitender Durchschnitt und ein einfacher gleitender Durchschnitt und festgestellt, dass die Ergebnisse aus dem kreisförmigen Array zu meinen Bedürfnissen bestand am besten 12. Juni bei 4 38.Wenn Ihre Bedürfnisse einfach sind, können Sie einfach versuchen, mit einem exponentiellen gleitenden Durchschnitt. Schnell einfach, Sie machen eine Akkumulator-Variable, und wie Ihr Code bei jedem Sample sieht, aktualisiert der Code den Akkumulator mit dem neuen Wert Sie wählen eine konstante Alpha, die zwischen 0 und 1 ist, und berechnen Sie diese. Sie müssen nur einen Wert von Alpha wo finden Die Wirkung einer gegebenen Probe dauert nur etwa 1000 Samples. Hmm, ich bin nicht wirklich sicher, dass dies für dich geeignet ist, jetzt, wo ich es hier hingelegt habe Das Problem ist, dass 1000 ein ziemlich langes Fenster für einen exponentiellen gleitenden Durchschnitt ist Nicht sicher, dass es ein Alpha gibt, das den Durchschnitt über die letzten 1000 Zahlen verbreiten würde, ohne Unterlauf in der Gleitkomma-Berechnung. Aber wenn du einen kleineren Durchschnitt wünschst, wie 30 Zahlen oder so, ist dies eine sehr einfache und schnelle Möglichkeit, es zu tun. Beantwortet 12. Juni 12 bei 4 44. 1 auf deinem Post Der exponentielle gleitende Durchschnitt kann das Alpha variabel sein. So kann es verwendet werden, um Zeitbasis-Mittelwerte zB Bytes pro Sekunde zu berechnen Wenn die Zeit seit dem letzten Akkumulator-Update mehr als 1 ist Zweitens, lassen Sie alpha be 1 0 Andernfalls können Sie alpha be usecs seit letztem Update 1000000 jxh Jun 12 12 at 6 21.Basically Ich möchte den gleitenden Durchschnitt eines laufenden Stroms von einem Strom von Gleitkommazahlen mit den meisten zu verfolgen Jüngsten 1000 Nummern als Datenbeispiel. Hinweis, dass die unten die Summe als Elemente als addiert ersetzt, vermeidet kostspielige ON-Traversal, um die Summe zu berechnen, die für den Durchschnitt benötigt wird - on demand. Total ist ein anderer Parameter von T, um zB zu verwenden Eine lange lange, wenn es sich um 1000 lange s, ein int für char s oder ein doppeltes zu total float s. This ist ein bisschen fehlerhaft in diesem Numsamples könnte nach INTMAX gehen - wenn Sie sich interessieren könnten Sie eine unsigned lange lange verwenden oder verwenden Sie eine extra Bool Datenelement aufzeichnen, wenn der Container zum ersten Mal gefüllt wird, während das Radfahren Numsamples um das Array am besten dann umbenannt etwas Unschuldiges wie pos. answered Jun 12 12 bei 5 19.on geht davon aus, dass void Operator T Probe ist eigentlich void Operator T Probe oPless Jun 8 14 Bei 11 52. oPless ahhh gut gesichtet tatsächlich ich meinte für es zu leeren Betreiber T Probe, aber natürlich könnten Sie verwenden, was Notation Sie mochten, beheben, danke Tony D Jun 8 14 bei 14 27.die Traderema Funktion funktioniert nicht richtig Berechnen Sie nur den Durchschnitt der letzten Periodeneinträge Folgen Sie dem folgenden Code für die Traderemessfunktion EMACalculator Limit, Array EMAVerfügbares Array 0 printr Array Multiplikator1 2 Limit 1 EMA Array EMA Array 0 Schließen Array 1.while Limit Echo EMA ist EMA n EMA Schließen - EMApreviousday Multiplikator1 EMApreviousday EMApreviousday EMA Limit - Rückkehr EMA wo Grenze akzeptieren die Periode von ema und Array akzeptieren Array von Daten für Ema-Berechnung.

No comments:

Post a Comment