Thursday 13 April 2017

Moving Average C Programm

Ich weiß, das ist erreichbar mit Schub wie pro: Aber ich möchte wirklich vermeiden, Boost. Ich habe gegoogelt und fand keine geeigneten oder lesbaren Beispiele. Grundsätzlich möchte ich den gleitenden Durchschnitt eines laufenden Stroms eines Stroms von Gleitkommazahlen mit den aktuellsten 1000 Zahlen als Datenmuster verfolgen. Was ist der einfachste Weg, um dies zu erreichen, experimentierte ich mit einem kreisförmigen Array, einem exponentiellen gleitenden Durchschnitt und einem einfacheren gleitenden Durchschnitt und fand, dass die Ergebnisse aus dem kreisförmigen Array meinen Bedürfnissen am besten entsprechen. Gefragt am 12. Juni 12 um 4:38 Wenn Ihre Bedürfnisse einfach sind, können Sie nur versuchen, einen exponentiellen gleitenden Durchschnitt. Setzen Sie 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 zu finden, wo die Wirkung einer bestimmten Probe nur für etwa 1000 Proben dauert. Hmm, Im nicht wirklich sicher, dass dies für Sie geeignet ist, jetzt, dass Ive es hier. Das Problem ist, dass 1000 ist ein ziemlich langes Fenster für einen exponentiellen gleitenden Durchschnitt Im nicht sicher, es gibt ein Alpha, die den Durchschnitt über die letzten 1000 Zahlen, ohne Unterlauf in der Gleitkomma Berechnung zu verbreiten würde. Aber wenn du einen kleineren Durchschnitt wünschst, wie 30 Zahlen oder so, das ist eine sehr einfache und schnelle Möglichkeit, es zu tun. Antwortete Jun 12 12 um 4:44 1 auf deinem Post. Der exponentielle gleitende Durchschnitt kann das Alpha variabel sein. So kann es verwendet werden, um Zeitbasis-Mittelwerte (z. B. Bytes pro Sekunde) zu berechnen. Wenn die Zeit seit dem letzten Akkumulator-Update mehr als 1 Sekunde ist, lassen Sie Alpha 1,0 sein. Andernfalls kannst du alpha sein (usecs seit letztem update1000000). Ndash jxh Grundsätzlich möchte ich den gleitenden Durchschnitt eines laufenden Stroms eines Stroms von Gleitkommazahlen mit den aktuellsten 1000 Zahlen als Datenmuster verfolgen. Beachten Sie, dass die unten genannte Gesamtsumme als Elemente als addreplaced, Vermeidung kostspieliger O (N) Traversal, um die Summe zu berechnen - benötigt für die durchschnittliche - on demand. Insgesamt wird ein anderer Parameter von T verwendet, um z. B. Mit einer langen langen, wenn insgesamt 1000 lang s, ein int für char s, oder ein doppeltes bis total float s. Dies ist ein bisschen fehlerhaft, dass Numsamples an INTMAX vorbeikommen könnten - wenn man sich vorstellt, dass man eine langjährige langjährige langwierige Zeit haben könnte. Oder verwenden Sie ein zusätzliches bool Datenelement, um aufzuzeichnen, wenn der Container zum ersten Mal gefüllt wird, während er Numsamples um das Array herumtreibt (am besten dann umbenannt etwas Unschuldiges wie Pos). Antwortete am 12. Juni 12 um 5:19 man geht davon aus, dass der Quanten-Operator (T-Stichprobe) tatsächlich quasi Operator (T-Probe) ist. Ndash oPless Jun 8 14 um 11:52 oPless ahhh. Gut beobachtet. Eigentlich habe ich gedacht, dass es nicht leer ist () (T Probe), aber natürlich könntest du auch immer Notizen verwenden, die du mochst. Werde reden, danke Ndash Tony D Juni 8 14 at 14: 27 Ich habe eine 4000-Menge Daten der Aktie und tring, um den gleitenden Durchschnitt für alle Datenwerte zu berechnen, aber da der gleitende Durchschnitt auf vorherigen Daten basiert und ich kann nicht berechnen die 15-Tage-SMA für Die ersten 14 Tage, überspringen die ersten 14 Tage und berechnen die SMA auf den Rest der Daten. Und es muss LINQ verwenden, um zu erreichen. Kann jemand geben Sie eine Probe oder Hinweis, wie man mit LINQ zu berechnen gleitenden Durchschnitt Die Ausgabe für die durchschnittlichen Werte sind alle rund 500s Ich verstehe wirklich nicht, wie ist das möglich, um diesen hohen Wert zu bekommen. Verschieben Mittelwertbildner mit Summen-Array: 06072012 562,49 571,72 06082012 565,84 580,32 06112012 568,56 571,17 06122012 569,55 576,16 06132012 570,56 572,16 06142012 570,63 571,53 06152012 571,21 574,13 06182012 572,78 585,78 06192012 573,79 587,41 06202012 574,23 585,74 06212012 574,22 577,67 06222012 575,63 582,10 06252012 576,06 570,77 06262012 576,68 572,03 06272012 576,88 574.50 06282012 576.7 569.05 06292012 576.95 584.00 07022012 578.37 592.52 07032012 579.92 599.41 07032012 581.74 599.41 Bearbeitet von Leemx Freitag, 16. November 2012 02:59 Verschoben von Lisa Zhu Microsoft Kontingent Mitarbeiter Montag, 19. November 2012 07:38 linq related (Von : Visual C General) Freitag, 16. November 2012 um 2:42 Uhr Um einen gleitenden Durchschnitt zu schaffen, würde ich damit beginnen, einen Bereich von 0 bis (Länge der Datenliste - Länge der Bewegungsperiode) zu erstellen, dann für jeden Wert im Bereich Wähle Elemente x bis x 43 Länge des Bewegungszeitraums und berechne den Durchschnitt. Alles in einer netten LINQ-Anweisung: Beachten Sie, dass dies nicht sehr effizient ist, da Sie grundsätzlich über die Datenliste für jeden Wert in der Reichweite iterieren. Hey, Look Dieses System erlaubt Signaturen von mehr als 60 cha Edited by Arno Brouwer Freitag, November 23, 2012 4:42 PM Als Antwort von Alexander Sun markiert Freitag, 07. Dezember 2012 um 14:41 Uhr Alle Antworten Ein Beispiel für deine LINQ-Anweisung würde helfen. QuotPremature-Optimierung ist die Wurzel aller evil. quot - Knuth Um einen gleitenden Durchschnitt zu schaffen, würde ich mit dem Erstellen eines Bereichs von 0 bis (Länge der Datenliste - Länge der Bewegungsperiode) beginnen, dann für jeden Wert im Bereich Auswahlelemente x Bis x 43 Länge der Bewegungsperiode und berechnen den Durchschnitt. Alles in einer netten LINQ-Anweisung: Beachten Sie, dass dies nicht sehr effizient ist, da Sie grundsätzlich über die Datenliste für jeden Wert in der Reichweite iterieren. Hey, Look Dieses System erlaubt Signaturen von mehr als 60 cha Edited by Arno Brouwer Freitag, November 23, 2012 4:42 PM Markiert als Antwort von Alexander Sun Freitag, 23. November 2012 04:41 Uhr Microsoft führt eine Online-Umfrage durch, um Ihre Meinung über die Msdn-Website zu verstehen. Wenn Sie sich für eine Teilnahme entscheiden, wird Ihnen die Online-Umfrage vorgestellt, wenn Sie die Msdn-Website verlassen. Möchten Sie teilnehmen? Helfen Sie uns, MSDN zu verbessern. Besuchen Sie unsere UserVoice-Seite, um sich anzumelden und zu bewerten. Dev-Center LernressourcenWillkommen bei LinuxQuestions. org. Eine freundliche und aktive Linux Community. Du siehst momentan LQ als Gast. Durch den Beitritt zu unserer Community haben Sie die Möglichkeit, Themen zu posten, unseren Newsletter zu erhalten, die erweiterte Suche zu nutzen, Threads zu abonnieren und auf viele weitere Besonderheiten zuzugreifen. Die Registrierung ist schnell, einfach und absolut kostenlos. Melden Sie sich bei unserer Community an. Beachten Sie, dass registrierte Mitglieder weniger Anzeigen sehen und ContentLink vollständig deaktiviert ist, sobald Sie sich anmelden. Wenn Sie Probleme mit der Registrierung oder Ihrem Account haben, kontaktieren Sie uns bitte. Wenn Sie Ihr Passwort zurücksetzen müssen, klicken Sie hier. Wenn Sie ein Problem melden, besuchen Sie bitte diese Seite, um alle LQ-bezogenen Cookies zu löschen. Einführung in Linux - Ein Hands on Guide Dieser Leitfaden wurde als Überblick über das Linux-Betriebssystem erstellt, das auf neue Benutzer als Explorations-Tour ausgerichtet ist und sich mit dem Training am Ende jedes Kapitels beschäftigt. Für fortgeschrittene Auszubildende kann es sich um eine Desktop-Referenz und um eine Sammlung des Basiswissens handeln, um die System - und Netzwerkadministration fortzusetzen. Dieses Buch enthält viele Beispiele aus dem wirklichen Leben, die aus der Autorenerfahrung als Linux-System und Netzwerk-Administrator, Trainer und Berater abgeleitet wurden. Sie hoffen, dass diese Beispiele Ihnen helfen, ein besseres Verständnis des Linux-Systems zu bekommen, und dass Sie sich ermutigt fühlen, Dinge auf eigene Faust auszuprobieren. Klicken Sie hier, um diesen Complete Guide absolut kostenlos zu erhalten. Ist es möglich, einen gleitenden Durchschnitt in C ohne die Notwendigkeit für ein Fenster von Proben Ive gefunden, dass ich ein bisschen optimieren kann, indem Sie eine Fenstergröße, die eine Macht von zwei zu erlauben, zu implementieren Bit-Shifting statt zu teilen, aber nicht brauchen einen Puffer wäre schön. Gibt es eine Möglichkeit, ein neues gleitendes durchschnittliches Ergebnis nur als eine Funktion des alten Ergebnisses auszudrücken und das neue Sample Definieren Sie ein Beispiel gleitender Durchschnitt, über ein Fenster von 4 Samples: Add new sample e: Ein gleitender Durchschnitt kann rekursiv implementiert werden , Aber für eine genaue Berechnung des gleitenden Durchschnitts müssen Sie sich an die älteste Eingabe Probe in der Summe (dh die a in Ihrem Beispiel) erinnern. Für eine Länge N gleitenden Durchschnitt berechnen Sie: wobei yn das Ausgangssignal ist und xn das Eingangssignal ist. Gl. (1) kann rekursiv geschrieben werden, also musst du dich immer an die Probe xn-N erinnern, um zu berechnen (2). Wie von Conrad Turner hervorgehoben, können Sie stattdessen ein (unendlich langes) exponentielles Fenster verwenden, mit dem Sie die Ausgabe nur aus der Vergangenheit und dem aktuellen Eingang berechnen können. Dies ist jedoch kein Standard (ungewichtet) gleitender Durchschnitt, sondern exponentiell Gewichteter gleitender Durchschnitt, wo Proben in der Vergangenheit ein kleineres Gewicht bekommen, aber (zumindest in der Theorie) vergisst du niemals etwas (die Gewichte werden in der Vergangenheit immer kleiner und kleiner). Ich habe einen gleitenden Durchschnitt ohne Einzelposten-Speicher für ein GPS-Tracking-Programm, das ich geschrieben habe. Ich fange mit 1 Probe an und teile mit 1, um die aktuelle avg zu bekommen. Ich füge dann eine Probe hinzu und teile mit 2 auf die aktuelle avg. Das geht weiter, bis ich die Länge des Durchschnitts erreicht habe. Jedes Mal danach füge ich die neue Probe hinzu, bekomme den Durchschnitt und beseitige diesen Durchschnitt von der Summe. Ich bin kein Mathematiker, aber das schien ein guter Weg, es zu tun. Ich dachte, es würde den Magen eines echten Mathe-Kerls drehen, aber es stellt sich heraus, dass es eine der akzeptierten Möglichkeiten ist, es zu tun. Und es geht gut Denken Sie daran, dass je höher Ihre Länge desto langsamer ist es, was Sie folgen wollen. Das mag die meiste Zeit nicht ausmachen, aber wenn man den Satelliten folgt, wenn man langsam ist, könnte der Weg weit von der aktuellen Position entfernt sein und es wird schlecht aussehen. Du hättest eine Lücke zwischen dem Sat und den hinteren Punkten. Ich wählte eine Länge von 15 aktualisiert 6 mal pro Minute, um ausreichende Glättung zu bekommen und nicht zu weit von der tatsächlichen Sat-Position mit den geglätteten Pfad-Punkten zu bekommen. Antwortete 16. November 16 um 23:03 initialize total 0, count0 (jedes Mal, wenn du einen neuen Wert sehe, dann eine Eingabe (scanf), man add totalnewValue, ein Inkrement (count), ein divide average (totalcount) Dies wäre ein gleitender Durchschnitt über Alle Eingänge Um den Durchschnitt über nur die letzten 4 Eingänge zu berechnen, würde es 4 Eingangsvariablen erfordern, vielleicht jede Eingabe in einen älteren Eingabevariablen kopieren und dann den neuen gleitenden Durchschnitt berechnen, als Summe der 4 Eingangsvariablen, geteilt durch 4 (rechte Verschiebung 2 wäre Gut, wenn alle Eingänge waren positiv, um die durchschnittliche Berechnung beantwortet Feb 3 15 um 4:06 Das wird tatsächlich berechnen den Gesamtdurchschnitt und NICHT der gleitende Durchschnitt. Wie Zähler wird größer die Auswirkungen einer neuen Eingabe Probe wird verschwindend klein ndash Hilmar Feb 3 15 um 13:53 Ihre Antwort 2017 Stack Exchange, Inc


No comments:

Post a Comment