Friday 10 November 2017

Flytting Gjennomsnitt Funksjon I C


Er det mulig å implementere et bevegelige gjennomsnitt i C uten at det er behov for et vindu med prøver Ive har funnet ut at jeg kan optimalisere litt ved å velge en vindustø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. Definer et eksempel glidende gjennomsnitt, over et vindu på 4 prøver å være: Legg til ny prøve e: Et 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 eksempelet ditt). For et lengde N bevegelige gjennomsnitt beregner du: hvor yn er utgangssignalet og xn er inngangssignalet. Eq. (1) kan skrives rekursivt som Så du må alltid huske prøven xn-N for å beregne (2). Som påpekt av Conrad Turner, kan du bruke et (uendelig langt) eksponensielt vindu i stedet, som gjør det mulig å beregne utgangen bare fra tidligere utgang og gjeldende inngang: men dette er ikke et standard (uvevet) glidende gjennomsnitt, men 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 (vektene blir bare mindre og mindre for prøver langt i det siste). Jeg implementerte et glidende gjennomsnitt uten individuelt elementminne for et GPS-sporingsprogram jeg skrev. Jeg starter med 1 prøve og deler med 1 for å få dagens avg. Jeg legger til en prøve og deler med 2 til den nåværende avg. Dette 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øre det på. Jeg skjønte at 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 på. Og det fungerer bra. Bare husk at jo høyere lengden jo tregere følger det du vil følge. Det kan ikke være noe som helst mesteparten av tiden, men når du følger satellitter, hvis du er treg, kan stien være langt fra den faktiske posisjonen, og det vil se dårlig ut. Du kan ha et mellomrom mellom lørdager og de etterfølgende prikkene. Jeg valgte en lengde på 15 oppdatert 6 ganger i minuttet for å få tilstrekkelig utjevning og ikke komme for langt fra den faktiske lette stillingen med glattestrekpunktene. besvart 16 nov 16 kl 23:03 initialiser totalt 0, count0 (hver gang vi ser en ny verdi) En innskriving (scanf), en legger til totalnewValue, ett inkrement (telle), en del av gjennomsnitt (totalt antall) Dette ville være et bevegelige gjennomsnitt over alle innganger For å beregne gjennomsnittet over bare de siste 4 inngangene, ville det kreve 4 inngangsvariabler, kanskje kopiering av hvert inngang til en eldre inputvariable og deretter beregning av det nye glidende gjennomsnittet. Som summen av de 4 inngangsvariablene delt med 4 (høyre skift 2 ville være bra hvis alle inngangene var positive for å gjøre gjennomsnittlig beregning besvart 3. februar klokken 4:06 som faktisk vil beregne gjennomsnittet og IKKE det bevegelige gjennomsnittet. Etter hvert som tellingen blir større, blir virkningen av en ny inngangsprøve forsvunnet liten ndash Hilmar Feb 3 15 kl 13:53 Ditt svar 2017 Stack Exchange, Inc Jeg vet at dette kan oppnås med boost per: Men jeg vil virkelig unngå å bruke boost. Jeg har googled og ikke funnet noen egnede eller lesbare eksempler. I utgangspunktet vil jeg spore flytting gjennomsnitt 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å, jeg eksperimenterte med å bruke et sirkulært array, eksponentielt glidende gjennomsnitt og et enklere glidende gjennomsnitt og fant ut at resultatene fra det sirkulære arrayet passer mine behov best. spurte 12. juni kl 12:38 Hvis dine behov er enkle, kan du bare prøve å bruke et eksponentielt glidende gjennomsnitt. Enkelt sagt, 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 alfa hvor effekten av en gitt prøve bare varer i ca 1000 prøver. Hmm, jeg er egentlig ikke sikker på at dette passer for deg, nå som jeg har sagt 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 det på. svarte 12. juni kl 12:44 1 på ditt innlegg. Det eksponentielle glidende gjennomsnittet kan la alfa variere. Så dette tillater det å bli brukt til å beregne tidsbasen gjennomsnitt (for eksempel bytes per sekund). Hvis tiden siden den siste akkumulatoroppdateringen er mer enn 1 sekund, lar du alfa være 1,0. Ellers kan du la alpha være (usecs siden sist oppdatering1000000). ndash jxh Jun 12 12 at 6:21 I utgangspunktet 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 datasample. Vær oppmerksom på at under oppdateringer summen som elementer som addrested, unngå kostbare O (N) traversal å beregne summen som trengs for gjennomsnittet - på forespørsel. Totalt er det laget en annen parameter fra T for å støtte f. eks. bruker 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 bruk et ekstra bool data medlem til å registrere når beholderen først fylles mens sykkel nummeprøver rundt arrayet (best deretter omdøpt noe uskyldig som pos). besvart 12. juni 12 klokka 5:19 en antar at kvote-operatør (T-prøve) kvot er faktisk quotvoid operatorltlt (T-prøve) sitat. ndash oPless 8 Jun 14 kl 11:52 oPless ahhh. godt observert. egentlig mente jeg at det skulle være tomt operatør () (T-prøve), men selvfølgelig kunne du bruke hvilken som helst notasjon du likte. Vil fikse, takk. ndash Tony D Jun 8 14 at 14:27 Jeg vil utvikle beregning for aksjekurs glidende gjennomsnitt. Men mye kompleks beregning er planlagt senere. Mitt første skritt å vite hvordan å beregne Flytende Gjennomsnitt effektivt. Jeg trenger å vite hvordan du tar innspillingen og returnerer effekten effektivt. betraktet innsats Dato og pris. konsumert produksjon Dato, pris og flytende gjennomsnitt. Hvis jeg har 500 poster, og jeg vil beregne Flytte gjennomsnitt i 5 dager, hva er den effektive måten i stedet for å gå frem og tilbake i en rekke Dato og pris igjen, vennligst sugest hva er den beste måten å motta innskriving (ArrayList, Table, array etc) og returnere utgang. Merk: Dagens MA på 5 dager vil være gjennomsnittlig for siste 5 dager, inkludert dagens pris. I går vil MA være gjennomsnittlig de siste 5 dagene fra i går. Jeg vil holde dagene til å være fleksible i stedet for 5 det kan være 9, 14, 20 etc. Torsdag 10. april 2008 kl. 21:21 Hvis du trenger enkel beregning uten innsats enn du kan bruke TA-Lib. Men hvis du vil at beregningen din skal være mer effektiv enn TA-Lib, kan du lage din egen tekniske indikator. TA-Lib er flott, men problemet er at dette biblioteket bare har statiske metoder. Det betyr at når du må beregne SMA-arrayverdier basert på 500 prisbarer, sender du hele spekteret av barer, og det vil returnere en rekke SMA-verdier. Men hvis du mottar ny 501-st verdi, så skal du sende igjen hele arrayet, og TA-Lib vil igjen beregne og returnere SMA-utvalg av verdier. Forestill deg at du trenger en slik indikator på riktig pris, og for hver prisendring trenger du ny indikatorverdi. Hvis du har en indikator, er det ikke et stort problem, men hvis du har hundrevis av indikatorer som fungerer, kan det være et ytelsesproblem. Jeg var i en slik situasjon og begynte å utvikle realtidsindikatorer som er effektive og gjør ytterligere beregninger for ny prislinje eller bare for endret prislinje. Uheldigvis trengte jeg aldri SMA-indikator for mine handelssystemer, men jeg har slike for EMA, WMA, AD og andre. En slik indikator AD er publisert på bloggen min, og du kan se derfra hva er grunnstrukturen til min realtime-indikatorklasse. Jeg håper du trenger små endringer for å implementere SMA-indikatoren, fordi det er en av de enkleste. Logikken er enkel. Å beregne SMA alt du trenger er n siste prisverdier. Så klassetilfelle vil ha samling av priser, som vil lagre, hold bare n siste antall priser ettersom SMA er definert (i ditt tilfelle 5). Så når du har en ny linje, fjerner du den eldste og legger til en ny og lager beregning. Torsdag 10. april 2008 16:04 Alle svar Det er et bibliotek kalt TA-Lib som gjør alt det for deg og det er åpen kildekode. Den har ca 50 indikatorer jeg tror. Weve brukte det i produksjonsmiljø, og det er veldig effektivt og realistisk. Du kan bruke den i C, Java, C, etc. Hvis du trenger enkel beregning uten innsats enn du kan bruke TA-Lib. Men hvis du vil at beregningen din skal være mer effektiv enn TA-Lib, kan du lage din egen tekniske indikator. TA-Lib er flott, men problemet er at dette biblioteket bare har statiske metoder. Det betyr at når du må beregne SMA-arrayverdier basert på 500 prisbarer, sender du hele spekteret av barer, og det vil returnere en rekke SMA-verdier. Men hvis du mottar ny 501-st verdi, så skal du sende igjen hele arrayet, og TA-Lib vil igjen beregne og returnere SMA-utvalg av verdier. Forestill deg at du trenger en slik indikator på riktig pris, og for hver prisendring trenger du ny indikatorverdi. Hvis du har en indikator, er det ikke et stort problem, men hvis du har hundrevis av indikatorer som fungerer, kan det være et ytelsesproblem. Jeg var i en slik situasjon og begynte å utvikle realtidsindikatorer som er effektive og gjør ytterligere beregninger for ny prislinje eller bare for endret prislinje. Uheldigvis trengte jeg aldri SMA-indikator for mine handelssystemer, men jeg har slike for EMA, WMA, AD og andre. En slik indikator AD er publisert på bloggen min, og du kan se derfra hva er grunnstrukturen til min realtime-indikatorklasse. Jeg håper du trenger små endringer for å implementere SMA-indikatoren, fordi det er en av de enkleste. Logikken er enkel. Å beregne SMA alt du trenger er n siste prisverdier. Så klassetilfelle vil ha samling av priser, som vil lagre, hold bare n siste antall priser ettersom SMA er definert (i ditt tilfelle 5). Så når du har en ny linje, fjerner du den eldste og legger til en ny og lager beregning. Torsdag 10. april 2008 16:04 Jeg ville beregne det bevegelige gjennomsnittet i databasen via en lagret prosedyre eller i en terning. Har du sett på Analysis Services, har den muligheten til å beregne bevegelige gjennomsnitt. Torsdag 10. april 2008 16:05 Ja. TA-LIB er bra, men kan ikke være egnet for meg. Når jeg legger til ny verdi eller oppdatert verdi for historien over poster, vil jeg gjøre beregningen i en egen funksjon bare for det nye sitatet og lagre det i database. Jeg planlegger å oppdatere sitatet hver time. Jeg trenger å gjøre rundt 25 til 30 tekniske indikatorer for 2200 aksjer. Torsdag 10. april 2008 17:51 Utførelsestid for et TA-Lib-anrop på en rekkevidde på 10000 elementer tar ca 15 millisekunder (på en Intel Core Duo 2.13 Ghz). Dette er gjennomsnittet av alle funksjonene. Blant de raskeste tar SMA mindre enn 2,5 millisekunder. Den tregeste, HTTRENDMODE, tar 450 millisekunder. Med mindre elementer er det raskere. SMA tar ca 0,22 millisekunder for 1000 inngangselementer. Hastighetsøkningen er nesten lineær (overhead for å utføre funksjonssamtalen er ubetydelig). I sammenheng med søknaden din er TA-Lib svært lite sannsynlig å være flaskehalsen for hastighetsytelse. Også jeg anbefaler vanligvis ikke slik quadrat-løsning. Les nedenfor for detaljer. Først en korreksjon til Boban. s setning Alle funksjoner i TA-Lib kan også beregne en enkelt siste verdi ved å bruke et minimum av quotlast nquot-elementer. Du kan ha en rekkevidde på størrelse 10000, har data initialiseres bare for de første 500 elementene, legg til ett element og ring TA-Lib for å beregne SMA bare for det nye elementet. TA-Lib vil se bakover ikke mer enn nødvendig (hvis SMA er 5, vil TA-Lib beregne en enkelt SMA ved hjelp av de siste 5 verdiene). Dette gjøres mulig med parameteren startIdx og endIdx. Du kan angi et område som skal beregnes, eller en enkelt verdi. I dette scenariet vil du gjøre startIdx endIdx 500 til å beregne 501ste elementet. Hvorfor er slik quotlast nquot-løsning potensielt farlig for noen Uansett å velge Boban. s løsning eller TA-Lib mener det å bruke et lite, begrenset antall tidligere data ikke fungerer bra med de fleste TA-funksjoner. Med SMA er det åpenbart at du bare trenger n element for å beregne et gjennomsnitt over n element. Det er ikke så enkelt med EMA (og mange andre TA-funksjoner). Algoet avhenger ofte av forrige verdi for å beregne den nye verdien. Funksjonen er rekursiv. Det betyr at alle tidligere verdier har innflytelse på fremtidige verdier. Hvis du bestemmer deg for å quotlimitquot ditt algo for å bruke bare en liten mengde fortid n verdi, vil du ikke få det samme resultatet som noen som beregner over et stort antall tidligere verdier. Løsningen er et kompromiss mellom hastighet og presisjon. Jeg har ofte diskutert dette i sammenheng med TA-Lib (jeg kaller det den kvoterte perioden i dokumentasjonen og forumet). For å holde det enkelt, er min generelle anbefaling at du ikke kan gjøre forskjellen mellom et algo med en endelig impulsrespons (FIR) fra et algo med et uendelig impulsrespons (IIR). Du vil være tryggere å beregne over alle dataene du har tilgjengelig. TA-Lib spesifiserer i koden hvilken av dens funksjoner har en ustabil periode (IIR). Redigert av mfortier Fredag ​​15. august 2008 4:25 Riktig engelsk setning 15. fredag ​​15. august 2008 4:20 AMAVERAGE-funksjon Gjelder: Excel 2016 Excel 2013 Excel 2010 Excel 2007 Excel 2016 til Mac Excel for Mac 2011 Excel Online Excel for iPad Excel for iPhone Excel for Android-tabletter Excel Starter Excel Mobile Excel for Android-telefoner Mer. Mindre Denne artikkelen beskriver formel syntaks og bruk av AVERAGE-funksjonen i Microsoft Excel. Beskrivelse Returnerer gjennomsnittet (aritmetisk gjennomsnitt) av argumentene. For eksempel, hvis rekkevidde A1: A20 inneholder tall, returnerer formelen AVERAGE (A1: A20) gjennomsnittet av disse tallene. Synkroniseringsfunksjonen AVERAGE har følgende argumenter: Number1 Required. Det første nummeret, cellehenvisningen eller området som du vil ha gjennomsnittet for. Tall2. Valgfri. Tilleggsnummer, cellehenvisninger eller intervaller som du vil ha gjennomsnittet på, maksimalt 255. Argumenter kan enten være tall eller navn, intervaller eller cellehenvisninger som inneholder tall. Logiske verdier og tekstrepresentasjoner av tall som du skriver direkte inn i listen over argumenter teller. Hvis et referanseargument for et område eller celle inneholder tekst, logiske verdier eller tomme celler, ignoreres disse verdiene, men celler med verdien null er inkludert. Argumenter som er feilverdier eller tekst som ikke kan oversettes til tall, forårsaker feil. Hvis du vil inkludere logiske verdier og tekstrepresentasjoner av tall i en referanse som en del av beregningen, bruk AVERAGEA-funksjonen. Hvis du vil beregne gjennomsnittet av bare verdiene som oppfyller visse kriterier, bruker du AVERAGEIF-funksjonen eller AVERAGEIFS-funksjonen. Merk: AVERAGE-funksjonen måler sentral tendens, som er plasseringen av midten av en gruppe tall i en statistisk distribusjon. De tre vanligste tiltakene av sentral tendens er: Gjennomsnittlig. som er det aritmetiske gjennomsnittet, og beregnes ved å legge til en gruppe tall og deretter dividere med antall av tallene. For eksempel er gjennomsnittet av 2, 3, 3, 5, 7 og 10 30 divisjonert med 6, som er 5. Median. som er midten av en gruppe tall som er, halvparten av tallene har verdier som er større enn medianen, og halvparten av tallene har verdier som er mindre enn medianen. For eksempel er medianen 2, 3, 3, 5, 7 og 10 4. Modus. som er det vanligste nummeret i en gruppe av tall. For eksempel er modusen 2, 3, 3, 5, 7 og 10 3. For en symmetrisk fordeling av en gruppe av tall, er disse tre målene med sentral tendens alle de samme. For en skjev fordeling av en gruppe tall kan de være forskjellige. Tips: Når du har gjennomsnittlige celler, må du huske forskjellen mellom tomme celler og de som inneholder verdien null, spesielt hvis du har fjernet merket Vis et null i celler som har en nullverdi i dialogboksen Excel-alternativer i Excel-skrivebordet Søknad. Når dette alternativet er valgt, teller ikke tomme celler, men nullverdier er. Hvis du vil finne Vis null i celler som har en nullverdivelse: Klikk på Alternativer i kategorien Filer. og deretter i kategorien Avansert, se under Visningsalternativer for dette regnearket. Kopier eksempeldataene i følgende tabell, og lim det inn i celle A1 i et nytt Excel-regneark. For formler for å vise resultater, velg dem, trykk F2, og trykk deretter på Enter. Hvis du trenger, kan du justere kolonnebreddene for å se alle dataene.

No comments:

Post a Comment