Thursday, October 13, 2016

Bewegende Gemiddelde Filter C ++

Is dit moontlik om 'n bewegende gemiddelde in C te implementeer sonder die behoefte aan 'n venster van monsters Ive het bevind dat ek 'n bietjie kan optimaliseer, deur die keuse van 'n venster grootte dis 'n krag van twee voorsiening te maak vir bietjie-verskuiwing in plaas van verdeel, maar nie nodig 'n buffer sal lekker wees. Is daar 'n manier om 'n nuwe bewegende gemiddelde resultaat slegs as 'n funksie van die ou gevolg en die nuwe monster te druk definieer 'n voorbeeld bewegende gemiddelde, oor 'n venster van 4 monsters te wees: Voeg nuwe monster e: 'n bewegende gemiddelde kan rekursief geïmplementeer , maar vir 'n presiese berekening van die bewegende gemiddelde jy die oudste insette monster in die som (dws die 'n in jou voorbeeld) onthou. Vir 'n lengte N bewegende gemiddelde wat jy bereken: waar yn is die uitsetsein en xn is die insetsein. Aand. (1) kan rekursief geskryf word as sodat jy altyd moet die monster xn-N onthou om te bereken (2). Soos uitgewys deur Conrad Turner, kan jy 'n (oneindig lank) eksponensiële venster plaas, wat dit moontlik maak om die uitset net uit die verlede uitset en die huidige insette te bereken gebruik, maar dit is nie 'n standaard (ongeweegde) bewegende gemiddelde, maar 'n eksponensieel geweegde bewegende gemiddelde, waar monsters verder in die verlede kry 'n kleiner gewig, maar (ten minste in teorie) wat jy nooit iets vergeet nie (die gewigte kry net kleiner en kleiner vir monsters ver in die verlede). inisialiseer totale 0, count0 (elke keer sien 'n nuwe waarde toe een insette (scanf), een totalnewValue, een inkrement (telling), een kloof gemiddelde (totale / telling voeg) Dit sou 'n bewegende gemiddelde oor alle insette Om die gemiddelde bereken word oor net die laaste 4 insette, sal vereis 4 inputvariables, miskien kopiëring elke insette om 'n ouer inputvariable, dan berekening van die nuwe bewegende gemiddelde. as som van die 4 inputvariables, gedeel deur 4 (regs skuif 2 sal goed wees as al die insette was positiewe na die gemiddelde calculationIm kodering iets op die oomblik waar Im neem van 'n klomp van die waardes met verloop van tyd van 'n hardeware kompas maak. dit kompas is baie akkuraat en updates dikwels, met die gevolg dat as dit effens jiggles, ek eindig met die vreemde waarde dis wild teenstrydig is met sy bure. Ek wil die waardes uit te stryk. Nadat 'n lesing oor gedoen, wil dit voorkom asof dit wat ek wil hê, is 'n hoë-pass filter, 'n laaglaatfilter of 'n bewegende gemiddelde. bewegende gemiddelde Ek kan kry af met, hou net 'n geskiedenis van die afgelope 5 waardes of wat ook al, en gebruik die gemiddelde van die waardes stroomaf in my kode waar ek was eens net die gebruik van die mees onlangse waarde. Dit moet, dink ek, glad diegene jiggles mooi, maar dit lyk my dat sy waarskynlik redelik ondoeltreffend, en dit is waarskynlik een van daardie bekende probleme te Behoorlike programmeerders wat 'n baie netjiese Clever Wiskunde oplossing Theres. Ek is egter een van daardie aaklige selfopgeleide programmeerders sonder 'n greintjie van formele onderwys in enigiets wat selfs vaagweg verwant aan CompSci of Wiskunde. Lees 'n bietjie rond dui daarop dat dit 'n hoë of laaglaatfilter kan wees, maar ek kan nie enigiets wat verduidelik in terme verstaanbaar 'n hack soos ek wat die uitwerking van hierdie algoritmes sal wees op 'n verskeidenheid van waardes te vind, wat nog te sê hoe die wiskunde werk. Die antwoord hier gegee. byvoorbeeld tegnies nie beantwoord my vraag, maar slegs in terme verstaanbaar aan diegene wat waarskynlik reeds sal weet hoe om die probleem op te los. Dit sou 'n baie mooi en slim persoon inderdaad wat die soort van probleem is dit kan verduidelik word, en hoe die oplossings werk, in terme verstaanbaar vir 'n Kuns gegradueerde. gevra September 21 10 In 13:01 As jou bewegende gemiddelde het 'n lang ten einde die vereiste glad te bereik te wees, en jy dit nie regtig nodig het 'n besondere vorm van kern, dan is jy beter af as jy gebruik 'n eksponensieel verrottende bewegende gemiddelde: waar jy kies klein om 'n geskikte konstante wees (bv as jy kies klein 1- 1 / n, sal dit dieselfde hoeveelheid gemiddeld as 'n venster van grootte n hê, maar anders versprei oor ouer punte). In elk geval, sedert die volgende waarde van die bewegende gemiddelde hang net af van die vorige een en jou data, jy hoef nie 'n tou of iets hou. En jy kan dink dit as iets te doen soos, wel, Ive het 'n nuwe punt, maar ek dont regtig vertrou nie, so ek is van plan om te hou 80 van my ou skatting van die meting en net vertrou dat hierdie nuwe data punt 20. Dis pretty much dieselfde as om te sê: goed, ek het net hierdie nuwe punt 20, en ek sal gebruik 4 ander punte wat ek vertrou dieselfde hoeveelheid vertrou nie, behalwe dat in plaas van uitdruklik neem die 4 ander punte, jy neem aan dat die gemiddeld jy het die vorige keer was verstandig, sodat jy jou vorige werk kan gebruik. antwoord 21 September 10 In 14:27 Hey, ek weet dit is 5 jaar laat, maar dankie vir 'n awesome antwoord. I39m besig met 'n spel waar die klankveranderings wat gebaseer is op jou snelheid, maar as gevolg van die bestuur van die spel op 'n stadige-ass rekenaar, sal die spoed wild wissel, wat goed vir stuur, maar super irriterende in terme van klank was. Dit was 'n baie eenvoudige en goedkoop oplossing vir iets wat ek gedink het sou 'n baie komplekse probleem wees. â € Adam 16 Maart 15 by 20:20 As jy probeer om so af en toe vreemd waarde te verwyder, 'n laaglaatfilter is die beste van die drie opsies wat jy geïdentifiseer het. Lae-pass filters toelaat lae-spoed verander soos dié veroorsaak deur roterende n kompas met die hand, terwyl die verwerping van 'n hoë-spoed verander soos dié veroorsaak deur knoppe op die pad, byvoorbeeld. 'N bewegende gemiddelde sal waarskynlik nie voldoende wees nie, aangesien die gevolge van 'n enkele skans in jou data sal beïnvloed verskeie daaropvolgende waardes, afhangende van die grootte van jou bewegende gemiddelde venster. As die vreemde waardes maklik opgespoor kan jy selfs beter daaraan toe met 'n probleem-verwydering algoritme wat hulle heeltemal ignoreer nie: Hier is 'n guick grafiek om te illustreer: Die eerste grafiek is die insetsein, met een onaangename probleem. Die tweede grafiek toon die effek van 'n 10-monster bewegende gemiddelde. Die finale grafiek is 'n kombinasie van die 10-monster gemiddelde en die eenvoudige probleem opsporing algoritme hierbo getoon. Wanneer die glitch bespeur word, is die 10-monster gemiddelde gebruik in plaas van die werklike waarde. antwoord 21 September 10 by 13:38 Mooi verduidelik, en bonus punte vir die grafiek) uitvoering maak Henry Cooke 22 September 10 by 00:50 Sjoe. Selde gesien so 'n mooi antwoord uitvoering maak Muis 4 Junie 13 by 09:14 Die bewegende gemiddelde is 'n laaglaatfilter. â € naam 21 Oktober 13 aan 19:36 Probeer 'n lopende / streaming mediaan plaas. â € Kert 25 April 14 by 22:09 Moving gemiddelde ek kan kry af met. maar dit lyk my dat sy waarskynlik redelik ondoeltreffend. Theres werklik geen rede om 'n bewegende gemiddelde moet ondoeltreffende wees. Jy hou die aantal datapunte wat jy wil in 'n buffer (soos 'n omsendbrief tou). Op elke nuwe data punt, pop jy die oudste waarde en trek dit uit 'n som, en stoot die nuutste en voeg dit by die som. Daarop trek al die nuwe data punt werklik behels net 'n pop / druk, 'n toevoeging en 'n aftrek. Jou bewegende gemiddelde is altyd hierdie verskuiwing som gedeel deur die aantal waardes in jou buffer. Dit raak 'n bietjie moeiliker as jy data gelyktydig ontvang van verskeie drade, maar aangesien jou data is afkomstig van 'n hardeware toestel wat hoogs onwaarskynlik lyk vir my. Ag, en ook: aaklige selfopgeleide programmeerders verenig) Die bewegende gemiddelde leek ondoeltreffende vir my, want jy het 'n buffer van waardes te stoor - beter om net te doen 'n paar slim Wiskunde met jou insette waarde en huidige werking waarde Ek dink that39s hoe eksponensiële bewegende gemiddelde werk. 'N optimalisering I39ve gesien vir hierdie soort van bewegende gemiddelde behels die gebruik van 'n vaste-lengte tou amp 'n wyser na die plek waar jy is in die sin dat tou, en net wikkel die wyser rondom (met of as). Voila Geen duur stoot / pop. Vermoë doen om die amateurs, broer uitvoering Henry Cooke 22 September 10 by 00:54 Henry: Vir 'n reguit-up bewegende gemiddelde wat jy doen moet die buffer net sodat jy weet watter waarde kry inloer wanneer die volgende waarde kry gestoot. Dit gesê, die quotfixed-lengte tou amp n pointerquot jy beskryf is presies wat ek bedoel met quotcircular queue. quot That39s waarom ek gesê het dit ondoeltreffend isn39t. Wat dink jy ek bedoel En as jou antwoord is quotan skikking wat sy waardes terug op elke geïndekseer removalquot (soos std :: vektor in C) verskuif. Wel, dan, I39m so seer ek don39t selfs wil met jou praat nie) uitvoering maak Dan Tao 22 September 10 In 01:58 Henry: Ek don39t weet AS3, maar 'n Java programmer39s het versamelings soos CircularQueue op sy / haar beskikking (I39m nie 'n Java ontwikkelaar so I39m seker daar is beter voorbeelde daar buite that39s net wat ek gevind van 'n vinnige Google-soektog), wat presies die funksie we39re praat implemente. I39m redelik vol vertroue dat die meerderheid van medium - en lae-vlak tale met standaard biblioteke het iets soortgelyks (bv in there39s QueueltTgt). In elk geval, ek was filosofie myself, so. al is vergewe. â € Dan Tao 22 September 10 by 12:44 'n eksponensieel verrottende bewegende gemiddelde kan bereken word met die hand met net die tendens as jy die regte waardes te gebruik. Sien www. fourmilab. ch/hackdiet/e4/ vir 'n idee oor hoe om dit vinnig te doen met 'n pen en papier as jy op soek is na eksponensieel stryk bewegende gemiddelde met 10 smoothing. Maar aangesien jy 'n rekenaar, het jy waarskynlik wil doen binêre verskuiwing in teenstelling met desimaal verskuiwing) Op hierdie manier, al wat jy nodig het is 'n veranderlike vir jou huidige waarde en een vir die gemiddelde. Die volgende gemiddelde kan dan bereken word uit daardie. antwoord 21 September 10 In 14:39 Theres 'n tegniek bekend as 'n reeks hek wat goed werk met 'n lae-voorkoms onwaar monsters. aanvaarding van die gebruik van een van die bogenoemde filter tegnieke (bewegende gemiddelde, eksponensiële), sodra jy voldoende geskiedenis (een tydkonstante) jy kan toets die nuwe, inkomende data monster vir redelikheid, voordat dit by die berekening het. 'n bietjie kennis van die maksimum redelike tempo-van-verandering van die sein word vereis. die rou monster in vergelyking met die mees onlangse stryk waarde, en as die absolute waarde van daardie verskil is groter as die toegelate gebied, is daardie monster uitgegooi (of vervang met 'n paar heuristiese, bv. 'n voorspelling gebaseer op helling ewenaar of die tendens voorspellingswaarde van dubbele eksponensiële gladstryking) antwoord 30 April by 6: 56i weet dit is haalbaar met hupstoot volgens: Maar ek wil graag om te verhoed dat die gebruik van hupstoot. Ek het googled en nie gevind nie enige geskikte of leesbare voorbeelde. Eintlik wil ek die bewegende gemiddelde van 'n deurlopende stroom van 'n stroom van drywende punt getalle met behulp van die mees onlangse 1000 getalle as 'n data monster op te spoor. Wat is die maklikste manier om dit wat ek eksperimenteer met die gebruik van 'n omsendbrief skikking, eksponensiële bewegende gemiddelde en 'n meer eenvoudige bewegende gemiddelde en bevind dat die resultate van die omsendbrief array geskik my behoeftes beste te bereik. gevra 12 Junie 12 aan 04:38 As jou behoeftes is eenvoudig, kan jy net probeer om met behulp van 'n eksponensiële bewegende gemiddelde. Eenvoudig gestel, jy maak 'n akkumulator veranderlike, en as jou kode kyk na elke monster, die kode updates die akkumulator met die nuwe waarde. Jy kies 'n konstante alfa wat tussen 0 en 1, en bereken die volgende: Jy hoef net 'n waarde van alfa vind waar die effek van 'n gegewe voorbeeld net duur vir ongeveer 1000 monsters. Hmm, Ek is nie eintlik seker dit is geskik vir jou, noudat Ive het dit hier. Die probleem is dat 1000 is 'n mooi lang venster vir 'n eksponensiële bewegende gemiddelde Ek is nie seker daar is 'n alfa dat die gemiddelde van die afgelope 1000 getalle sou versprei, sonder onderloop in die drywende punt berekening. Maar as jy 'n kleiner gemiddelde, wou soos 30 nommers of so, dit is 'n baie maklike en vinnige manier om dit te doen. antwoord 12 Junie 12 by 04:44 1 op jou post. Die eksponensiële bewegende gemiddelde kan nie toelaat dat die alfa tot wisselvallig wees. So dit kan dit gebruik word om tyd basis gemiddeldes bereken (bv grepe per sekonde). As die tyd sedert die laaste akkumulator update is meer as 1 sekonde, jy laat Alpha wees 1.0. Anders, kan jy laat Alpha wees (usecs sedert verlede update / 1000000). â € jxh 12 Junie 12 aan 06:21 Eintlik wil ek die bewegende gemiddelde van 'n deurlopende stroom van 'n stroom van drywende punt getalle met behulp van die mees onlangse 1000 getalle as 'n data monster op te spoor. Let daarop dat die onderstaande updates die totale soos elemente soos bygevoeg / vervang, vermy duur O (N) traversal om die som te bereken - wat nodig is vir die gemiddelde - op aanvraag. Totaal gemaak 'n ander parameter van T te ondersteun bv met behulp van 'n lang lang wanneer altesaam 1000 lank s, 'n int vir char s, of 'n dubbel totale float s. Dit is 'n bietjie gebrekkig deurdat numsamples kon verby INTMAX - as jy omgee wat jy kan gebruik om 'n unsigned long lank. of gebruik 'n ekstra Bool data lid aan te teken wanneer die houer eerste gevul terwyl fietsry numsamples rondom die skikking (beste herdoop dan iets onskuldig soos POS). antwoord 12 Junie 12 aan 05:19 aanvaar word dat quotvoid operateur (T monster) quot is eintlik quotvoid operatorltlt (T monster) quot. â € oPless 8 Junie 14 by 11:52 oPless ahhh. goed raakgesien. eintlik het ek bedoel dat dit nietig operateur () (T monster), maar natuurlik jy kan gebruik wat ook al notasie jy graag. Sal los, te danke. â € Tony D 8 Junie 14 by 14: 27Intro Een van die belangrikste programme vir die Arduino raad is om te lees en aan te meld van sensor data. Byvoorbeeld een monitors druk elke sekonde van die dag. So hoog monster pryse genereer dikwels spykers in die grafieke een wil ook 'n gemiddeld van die metings het. As die afmetings is nie staties in die tyd wat ons dikwels nodig is 'n lopende gemiddelde. Dit is die gemiddeld van 'n sekere tydperk en baie waardevol wanneer jy tendens analise. Eenvoudigste vorm van 'n lopende gemiddelde kan gedoen word deur kode wat voortbou op die vorige hardloop gemiddelde: As 'n mens nie die geval is wil gebruik drywende punt wiskunde - want dit neem geheue en verminder spoed - 'n mens kan dieselfde heeltemal te doen in die heelgetal domein. Die afdeling deur 256 in die voorbeeld kode is 'n verskuiwing regs 8, wat is vinniger as sê afdeling deur bv 100. Dit is waar vir elke krag van 2 as deler en een net sorg die som van die weigths is gelyk aan die krag van 2. En natuurlik moet 'n mens versigtig wees daar geen intermediêre oorloop (oorweeg die gebruik van unsigned long) As jy moet neem 'n meer akkurate loop gemiddeld in concreto van die laaste 10 metings, 'n skikking (of gekoppel lys) om hulle te hou nodig. Dit verskeidenheid dien as 'n omsendbrief buffer en met elke nuwe meting die oudste een is verwyder. Die lopende gemiddeld word bereken as die som van al die elemente verdeel deur die aantal elemente in die skikking. Die kode vir die lopende gemiddeld sal so iets wees: nadeel van hierdie kode is dat die skikking te alle waardes hou nogal groot kan word. As jy 'n meting per sekonde en jy wil 'n lopende gemiddelde per minuut jy 'n verskeidenheid van 60 moet 'n gemiddelde per uur sou 'n verskeidenheid van 3600. Dit kon nie op hierdie manier op 'n Arduino gedoen want dit het net 2K RAM nodig. Maar met die bou van 'n 2 stadium gemiddelde dit kan baie goed benader word (disclaimer: nie vir alle metings). In psuedo kode: As 'n nuwe interne statiese skikking is wat nodig is vir elke runningAverage funksie, hierdie skree as 'n klas te implementeer. RunningAverage biblioteek Die runningAverage biblioteek maak 'n klas van die funksie hierbo sodat dit meer as een keer gebruik kan word in 'n skets. Dit ontkoppelt dié byvoeging () en die gemiddelde () funksie gee om 'n bietjie meer buigsaam bv wees 'n mens kan die gemiddelde verskeie kere bel sonder toevoeging van 'n ding. Let asseblief daarop dat elke geval van die klas voeg sy eie reeks om metings te hou, en dat dit bydra tot die geheue gebruik. Die koppelvlak van die klas is so klein as moontlik gehou word. Let wel: met weergawe 0.2 die name van die metodes is almal gemaak meer beskrywende. Gebruik 'n klein skets toon hoe dit gebruik kan word. 'N ewekansige kragopwekker gebruik word om 'n sensor naboots. In die opstel van () die Myra is skoongemaak sodat ons kan begin toevoeging van nuwe data. In lus () eers 'n ewekansige getal gegenereer en omgeskakel word na 'n float toe te voeg aan Myra. Toe die runningAverage gedruk om die reeksnommer poort. 'N Mens kan ook vertoon dit op 'n paar LCD of stuur oor Ethernet ens Wanneer 300 items bygevoeg Myra is skoongemaak weer begin. Aantekeninge by die biblioteek te gebruik, maak 'n gids in jou SKETCHBOOKPATHlibaries met die naam RunningAverage en sit die. H en Cpp daar. Opsioneel 'n voorbeelde subgids om die monster app te plaas. Geskiedenis 2011/01/30: aanvanklike weergawe 2011/02/28: Vaste ontbreek destructor in. H lêer 2011/02/28: verwyder verstek konstruktor 2012--. trimValue () Yuval Naveh bygevoeg trimValue (gevind op web) 2012/11/21: refactored 2012/12/30: gevoeg fillValue () refactored vir die publikasie van 2014/07/03: gevoeg geheue beskerming kode - as interne skikking nie kan toegeken word grootte word 0. Dit is om probleem hier beskryf los - forum. arduino. cc/indextopic50473.msg1790086msg1790086 - Todo toets op groot skaal. Sjabloon klas RunningAverage. H RunningAverage. cppAverages / Eenvoudige bewegende gemiddelde Gemiddeldes / Eenvoudige bewegende gemiddelde U word aangemoedig om hierdie taak op te los volgens die taakbeskrywing, die gebruik van enige taal wat jy kan weet. Berekening van die eenvoudige bewegende gemiddelde van 'n reeks van getalle. Skep 'n Stateful funksie / klas / instansie wat 'n tydperk neem en gee 'n roetine dat 'n aantal neem as argument en gee 'n eenvoudige bewegende gemiddelde van sy argumente tot dusver. 'N Eenvoudige bewegende gemiddelde is 'n metode vir die berekening van 'n gemiddelde van 'n stroom van getalle met slegs gemiddeld die afgelope 160 P 160 nommers van die stroom, 160 waar 160 P 160 is bekend as die tydperk. Dit kan toegepas word deur die roeping van 'n parafering roetine met 160 P 160 as sy argument, 160 I (P), 160 wat dan 'n roetine dat wanneer geroep met individuele, opeenvolgende lede van 'n stroom van getalle, bere die gemiddelde van sou terugkeer (up om), die laaste 160 P 160 van hulle, kan noem dit 160 SMA (). Die woord 160 Stateful 160 in die taak beskrywing verwys na die behoefte aan 160 SMA () 160 om sekere inligting tussen oproepe onthou om dit: 160 Die tydperk, 160 P 160 N bestel houer van ten minste die laaste 160 P 160 nommers uit elk van sy individuele oproepe. Stateful 160 beteken ook dat opeenvolgende oproepe na 160 I (), 160 die initializer, 160 moet afsonderlike roetines wat doen 160 nie 160 aandele gered staat sodat hulle kan gebruik word op twee onafhanklike strome van data terugkeer. Pseudo-kode vir die implementering van 160 SMA 160 is: Hierdie weergawe maak gebruik van 'n aanhoudende tou om die mees onlangse p waardes hou. Elke funksie teruggekeer van init-bewegende-gemiddelde het sy toestand in 'n atoom met 'n tou waarde. Dit implementering gebruik 'n omsendbrief lys van die nommers in die venster op te slaan aan die begin van elke iterasie wyser verwys na die lys sel wat hou die waarde net beweeg by die venster uit en vervang moet word met die net toegevoegde waarde. Met behulp van 'n afsluiting wysig Tans hierdie SMA cant nogc wees omdat dit 'n sluiting op die wal ken. Sommige ontsnapping analise kan die hoop toekenning te verwyder. Met behulp van 'n struct wysig Hierdie weergawe vermy die hoop toekenning van die sluiting behoud van die data in die stapel raamwerk van die hooffunksie. Dieselfde uitset: Om te verhoed dat die drywende punt benaderings hou opstapel en groei, kan die kode 'n periodieke som uit te voer op die hele ronde tou skikking. Dit implementering produseer twee (funksie) voorwerpe deel staat. Dit is idiomatiese in E te skei insette van uitset (lees en skryf) eerder as om dit kombineer in een voorwerp. Die struktuur is dieselfde as die implementering van Standard DeviationE. Die onderstaande elikser program genereer 'n anonieme funksie met 'n ingeboude tydperk p, wat gebruik word as die tydperk van die eenvoudige bewegende gemiddelde. Die aanloop funksie lees numeriese insette en gee dit aan die nuutgeskepte anonieme funksie, en dan inspekteer die resultaat te STDOUT. Die uitset word hieronder getoon, met die gemiddelde, gevolg deur die gegroepeer insette, wat die basis vorm van elke bewegende gemiddelde. Erlang het sluitings, maar onveranderlike veranderlikes. 'N Oplossing is dan om prosesse en 'n eenvoudige boodskap verby gebaseer API te gebruik. Matrix tale roetines om die sweef avarages vir 'n gegewe volgorde van items bereken. Dit is minder doeltreffend te loop as in die volgende opdragte. Voortdurend gevra vir 'n inset ek. wat by die einde van 'n lys T1. T1 kan gevind word deur te druk 2ND / 1, en gemiddelde kan gevind word in Lys / OPS druk op die program te beëindig. Funksie wat 'n lys met die gemiddeld data van die verskaf argument program wat 'n eenvoudige waarde terug by elke aanroeping terug: lys is die lys word gemiddeld: p is die tydperk: 5 opbrengste die gemiddeld lys: Voorbeeld 2: Die gebruik van die program movinav2 (i , 5) - Inisialiseer bewegende gemiddelde berekening, en definieer tydperk van 5 movinav2 (3, x): x - nuwe data in die lys (waarde 3), en gevolg sal word gestoor op veranderlike x, en vertoon movinav2 (4 x) : x - nuwe data (waarde 4), en die nuwe gevolg sal gestoor word op veranderlike x, en vertoon (43) / 2. Beskrywing van die funksie movinavg: veranderlike r - is die gevolg (die gemiddeld lys) wat veranderlike sal teruggestuur word ek - is die indeks veranderlike, en dit dui op die einde van die sub-lys die lys word gemiddeld. veranderlike Z - 'n helper veranderlike Die funksie gebruik veranderlike i om vas te stel watter waardes van die lys sal in die volgende gemiddelde berekening in ag geneem word. By elke iterasie, veranderlike i dui op die laaste waarde in die lys wat gebruik sal word in die gemiddelde berekening. So ons moet net om uit te vind wat die eerste waarde in die lys sal wees. Gewoonlik goed moet p elemente oorweeg, sodat die eerste element sal die een geïndekseer deur (i-P1) te wees. Maar op die eerste iterasies wat berekening gewoonlik negatief sal wees, sodat die volgende vergelyking negatiewe indekse sal vermy: Max (i-p1,1) of, reël die vergelyking, Max (i-p, 0) 1. of, die reël van die vergelyking, (i - (Max (IP, 0) 1) 1), en dan - maar die aantal elemente op die eerste iterasies sal ook kleiner wees, sal die korrekte waarde (begin indeks 1 einde indeks) wees , (i-Max (IP, 0)). Veranderlike Z hou die algemene waarde (maksimum (IP), 0) sodat die beginindex sal wees (Z1) en die numberofelements sal wees (iz) die middel (lys, Z1, iz) sal die lys van waarde wat sal gemiddeld som terugkeer ( .) sal hulle som som (.) / (iz) ri sal hulle gemiddeld en stoor die resultaat in die toepaslike plek in die lys gevolg behulp van 'n sluiting en die skep van 'n funksie


No comments:

Post a Comment