C Språk Moving Average


Er det mulig å implementere et bevegelige gjennomsnitt i C uten behov for et vindu med prøver. Jeg har funnet ut at jeg kan optimalisere litt, ved å velge en vindusstørrelse som er en kraft på to for å tillate bitforskyvning i stedet for å dele, men ikke trenger en buffer ville være hyggelig Er det en måte å uttrykke et nytt glidende gjennomsnittsresultat bare som en funksjon av det gamle resultatet og den nye prøven. Finn et eksempel som beveger gjennomsnittet, over et vindu på 4 prøver å være. Legg til ny prøve eA glidende gjennomsnitt kan implementeres rekursivt, men for en nøyaktig beregning av det bevegelige gjennomsnittet må du huske den eldste innsatsprøven i summen, dvs. a i ditt eksempel. For et lengde N glidende gjennomsnitt beregner du hvor yn er utgangssignalet og xn er inngangssignalet Eq 1 kan skrives rekursivt som. Så du må alltid huske prøven x nN for å beregne 2. Som påpekt av Conrad Turner, kan du bruke et uendelig langt eksponensielt vindu i stedet, noe som gjør det mulig å beregne utgangen bare fra fortiden ut sette og nåværende input. but dette er ikke et standard uvevet glidende gjennomsnitt, men et eksponentielt vektet glidende gjennomsnitt, hvor prøver tidligere i det siste får en mindre vekt, men i det minste i teorien glemmer du aldri noe vekter blir bare mindre og mindre for prøver langt i det siste. Jeg implementerte et glidende gjennomsnitt uten individuell gjenstandshukommelse for et GPS-sporingsprogram jeg skrev. Jeg begynner med 1 prøve og deler med 1 for å få gjeldende avg. I så legger jeg til prøve og deler med 2 til de Nåværende avg. This fortsetter til jeg kommer til lengden av gjennomsnittet. Hver gang etterpå legger jeg til den nye prøven, får gjennomsnittet og fjerner det gjennomsnittet fra totalen. Jeg er ikke en matematiker, men dette virket som en god måte å gjør det jeg skjønte det ville slå magen til en ekte matte fyr, men det viser seg at det er en av de aksepterte måtene å gjøre det Og det fungerer bra Bare husk at jo lengre lengre jo lengre følger det du vil følge Det kan ikke hende det meste av tiden, men når du følger satellitter, hvis du er langsom, kan stien være langt fra den faktiske posisjonen, og det vil se dårlig. Du kan ha et mellomrom mellom lørdager og de etterfølgende punktene jeg valgte en lengde på 15, oppdatert 6 ganger i minuttet til få tilstrekkelig utjevning og ikke komme for langt fra den faktiske lette posisjonen med den glatte stien dots. answered 16 november 16 kl 23 03.initialiser totalt 0, teller 0 hver gang du ser en ny verdi. Deretter legger du inn en ny scanf, en legger til total newValue, en økningstall, en deling av gjennomsnittlig total telling. Dette ville være et bevegelige gjennomsnitt over alle innganger. For å beregne gjennomsnittet over bare de siste 4 inngangene, ville det kreve 4 inputvariables, kanskje kopiering av hvert inngang til en eldre inputvariable og deretter beregning av den nye bevegelsen gjennomsnittlig som summen av de 4 inputvariablene divideres med 4 høyre skift 2 ville være bra dersom alle inngangene var positive for å gjøre gjennomsnittlig beregning. ansvaret 3. februar klokken 4 06. Det vil faktisk beregne det totale gjennomsnittet og IKKE det glidende gjennomsnittet Som teller få s større virkningen av en ny inngangsprøve blir vanishingly liten Hilmar Feb 3 15 på 13 53. Din Svar.2017 Stack Exchange, Inc. Jeg vet at dette er mulig med boost som per. Men jeg vil virkelig unngå å bruke boost jeg har googled og ikke funnet noen egnede eller lesbare eksempler. Basisk vil jeg spore det bevegelige gjennomsnittet av en pågående strøm av en strøm av flytende punktnumre ved å bruke de siste 1000 tallene som en dataprøve. Hva er den enkleste måten å oppnå dette på. eksperimenterte med å bruke et sirkulært array, eksponentielt glidende gjennomsnitt og et enklere glidende gjennomsnitt og fant ut at resultatene fra den sirkulære gruppen passet mine behov best. asked 12. juni 12 på 4 38. Hvis dine behov er enkle, kan du bare prøve å bruke en eksponentielt glidende gjennomsnitt. Bare du lager en akkumulatorvariabel, og når koden ser på hver prøve, oppdaterer koden akkumulatoren med den nye verdien. Du velger en konstant alfa som er mellom 0 og 1, og beregner dette. Du trenger bare å finne en verdi av a lpha hvor effekten av en gitt prøve varer bare i ca 1000 prøver. Hvordan er jeg ikke sikker på at dette passer for deg, nå som jeg har satt det her Problemet er at 1000 er et ganske langt vindu for et eksponentielt glidende gjennomsnitt Jeg er ikke sikker på at det er en alfa som vil spre gjennomsnittet over de siste 1000 tallene, uten understrøm i flytpunktsberegningen. Men hvis du vil ha et mindre gjennomsnitt, som 30 tall eller så, er dette en veldig enkel og rask måte å gjøre it. answered 12 juni 12 på 4 44. 1 på ditt innlegg Det eksponentielle glidende gjennomsnittet kan tillate at alfaet er variabelt. Dette gjør at det kan brukes til å beregne tidsbasen, for eksempel byte per sekund. Hvis tiden siden den siste akkumulatoroppdateringen er mer enn 1 sekund lar du alpha være 1 0 Ellers kan du la alpha være usecs siden sist oppdatert 1000000 jxh Jun 12 12 på 6 21. Basisk vil jeg spore det bevegelige gjennomsnittet av en pågående strøm av en strøm av flytende punktnumre ved å bruke de siste 1000 tallene som en data sample. Not e som nedenfor oppdaterer summen som elementer som lagt til erstattet, og unngår kostbare ON-traverser for å beregne summen som trengs for gjennomsnittet - på forespørsel. Totalt er det laget en annen parameter fra T for å støtte f. eks. ved å bruke en lang lang når totalt 1000 lang s , en int for char s eller en dobbel til total float s. Dette er litt feil i at numsamples kan gå forbi INTMAX - hvis du bryr deg om at du kan bruke en usignert lang lang eller bruke en ekstra bool data medlem til å registrere når beholderen blir først fylt mens syklings numsamples rundt arrayet best deretter omdøpt noe uskyldig som pos. answered 12. juni 12 på 5 19.one antar at tomrom operatør T-prøven er faktisk tom operatør T-prøve oPless 8. juni 14 på 11 52. oPless ahhh godt sett faktisk mente jeg at det skulle være tomt operatør T-prøve, men selvfølgelig kunne du bruke hvilken som helst notat du likte. Vil du fikse, takk Tony D 8. juni kl 14 14. Jeg har en 4000 mengde data på lager og tring for å beregne glidende gjennomsnitt for alle dataverdier, men siden glidende gjennomsnitt er basert på tidligere data, og jeg kan ikke beregne 15-dagers SMA i de første 14 dagene, hopp over de første 14 dagene og beregne SMA på resten av dataene. Og det må LINQ bruke til å oppnå. Kan noen gi en prøve eller en hint hvordan du bruker LINQ til å beregne glidende gjennomsnitt Utgangen for gjennomsnittsverdiene er rundt 500 si virkelig forstår ikke hvordan det er mulig å få den høye verdien. Gjennomgang av gjennomsnitt med summene array 06 07 2012 562 49 571 72.06 08 2012 565 84 580 32.06 11 2012 568 56 571 17.06 12 2012 569 55 576 16.06 13 2012 570 56 572 16.06 14 2012 570 63 571 53.06 15 2012 571 21 574 13.06 18 2012 572 78 585 78.06 19 2012 573 79 587 41.06 20 2012 574 23 585 74.06 21 2012 574 22 577 67.06 22 2012 575 63 582 10.06 25 2012 576 06 570 77.06 26 2012 576 68 572 03.06 27 2012 576 88 574 50.06 28 2012 576 7 569 05.06 29 2012 576 95 584 00.07 02 2012 578 37 592 52.07 03 2012 579 92 599 41.07 03 2012 581 74 599 41.Editert av Leemx Fredag ​​16. november 2012 2 59 A M. Moved av Lisa Zhu Microsoft kontingentpersonell Mandag 19. november 2012 7 38 AM Linq relatert Fra Visual C Generelt. Fridag 16. november 2012 2 42 AM. Til å skape et bevegelige gjennomsnitt, ville jeg starte med å skape et område fra 0 til lengden på datalisten - lengden på flytteperioden, deretter for hver verdi i rekkevidden velg elementene x til x lengden på bevegelige periode og beregne gjennomsnittet. Alt i en fin LINQ-setning. Merk at dette ikke er ekstremt effektivt, siden du i utgangspunktet iterate over data listen for hver verdi i serien. Hey, se Dette systemet gir signaturer på mer enn 60 cha. Edited av Arno Brouwer fredag ​​23. november 2012 4 42.Marked som svar av Alexander Sun Fredag, desember 07, 2012 2 44 AM. Friday, 23. november 2012 4 41.Alle svar. En prøve av LINQ-setningen din vil hjelpe. Fremragende optimalisering er roten til alt ondt - Knuth. For å skape et bevegelige gjennomsnitt, ville jeg begynne med å skape en varierer fra 0 til lengden av datalisten - lengden på bevegelige periode, deretter for hver verdi i th e rekkevidde velg elementer x til x lengden på bevegelige periode og beregne gjennomsnittet. Alt i en fin LINQ statement. Merk at dette ikke er ekstremt effektivt, siden du i utgangspunktet gjener over data listen for hver verdi i området. Se, se dette Systemet tillater signaturer på mer enn 60 cha. Edited av Arno Brouwer Fredag ​​23. november 2012 4 42 PM. Markert som svar av Alexander Sun Fredag ​​07 desember 2012 2 44 AM. Friday, 23. november 2012 4 41.Microsoft gjennomfører en online-undersøkelse for å forstå din mening på Msdn-nettsiden. Hvis du velger å delta, vil onlineundersøkelsen bli presentert for deg når du forlater Msdn-nettsiden. Vil du gjerne delta. Hjelp oss å forbedre MSDN. Visit vår UserVoice Side å sende inn og stemme på ideer. Dev sentre. Lære ressurser.

Comments