» Poradna » Programy

Matematický problém (dlouhodobý průměr)

 |   | 

Potrebuji poradit, jak mam vypocitavat dlouhodoby prumer. Do aplikace mam nepretrzity prisun dat, napr. kazdou sekundu. Vzdy obdrzim cislo od 0 do 100 (procenta). Jak se vsak spravne vypocita dlohodoby aritmeticky prumer z techto ziskanych hodnot ? Pamet na ukladani vzorku mam omezenou na 10 samplu. Nedokazu s tim hnout ...  Poradite mi nekdo ? (doufam, ze jsem se vyjadril srozumitelne ...)dekuji vsem ...

Odpovědi na otázku

 |   | 

Dlouhodoby prumer je co? To je prumer z tech deseti poslednich vzroku? Nebo ze vsech? A at uz to je cokoliv, tak co je slozite na tom pozadovane vzorky secist a soucet vydelit jejich poctem?

Souhlasím  |  Nesouhlasím  |  Odpovědět
 |   | 

budes si ukladat sucet a pocet samplov. vzdy ked pride novy sampl, zvysis pocet o 1 a priratas ho k suctu samplov. priemer vypocitas ako "suma samplov" / "pocet samplov"...Nieco taketowhile(!koniecSamplovania()) {smpl = getSample();suma = suma + smpl;pocet = pocet + 1;}dlhodobyPriemer = suma / pocet; P.S. Zopakuj si zaklady matematiky a programovania!

Souhlasím  |  Nesouhlasím  |  Odpovědět
 |   | 

To je mi samozrejme jasne, jak se vypocita prumer ... , ale nepochopili jste me, jde o tohle. Pokud chci vypocitat prumer ze 2222 samplu, normalne je sectu a pak ten soucet vydelim poctem samplu (viz ucivo na zakladni skole). Ale pokud vypocitam prumer z prvnich deseti samplu ulozim si tenhle prvni prumer (prum1). Pak pockam na dalsich deset samplu, zase z nich vypocitam prumer (prum2) a pak vypoctu prumer z (prum1 a prum2) a ulozim vysledek do (prum1). Zase pockam na deset samplu atd, atd ... Zda se, ze takhle to pocita spravne ...  (aspon podle excelu ...)

Souhlasím  |  Nesouhlasím  |  Odpovědět
 |   | 

Hmmm, tak to pocitas blbe

Souhlasím  |  Nesouhlasím  |  Odpovědět
 |   | 

a, b, c, d .......... reálná čísla((a + b) / n + (c + d) / n) / 2 = (a + b + c + d) / 2ntakže to tak jde! Ale oba průměry musí mít stejný počet "samplů"

Souhlasím  |  Nesouhlasím  |  Odpovědět
 |   | 

jo, napsal jsem to malinko blbě; těch a, b, c ... tam v každý tý závorce bude "n", v tom případě, kterej jsem tam napsal by n=2

Souhlasím  |  Nesouhlasím  |  Odpovědět
 |   | 

jo, ale ten "zzzzz" nesplnil tu podminku stejnyho poctu samplu v kazdy skupine

Souhlasím  |  Nesouhlasím  |  Odpovědět
 |   | 

a nebo jsi to nepochopil ty, místo průměru si vždy ukládej součet a počet, takže sečteš prvních n samlů a zapamatuješ součet a to n (případně podělením zjistíš aktuální průměr), pak sečteš dalších m samplů, sečteš (případně podělením zjistíš aktuální průměr), a přičteš k zapamatovanému součtu a počet = n+m a můžeš zjistit i dlouhodobý průměr (podělením) a tak pokračuješ dál a není to závislé na stejném počtu samplů

Souhlasím  |  Nesouhlasím  |  Odpovědět
 |   | 

jednoducho si do jednej premennej ukladas sumu vsetkych vstupov a do druhej ich pocet, cize ak ti postupne prichadzaju cisla, tak nemusis si ich zaznamenavat, staci iba sumovat jednu pametovu premennu, a druhu vzdy inkrementovat o jedna. A vzdy ked budes chciet vediet ten priemer, tak ich proste predelis. nic viac ... len 2 premenne, pozor vsak aby ti nepretiekli !!!!!!!!

Souhlasím  |  Nesouhlasím  |  Odpovědět
 |   | 

to: hidden ... nojo, to je vlastne pravda, akorat s tim pretecenim, to bude orisek, bude to pocitat 16 bit PLC, kterej neumi vic, nez 16 bit cisla, ale nejakou rutinu na soucet  a deleni  si napisu ... THX

Souhlasím  |  Nesouhlasím  |  Odpovědět
 |   | 

To pretečenie je pri tomto divokom prístupe dosť veľký problém . (naj)Lepšie riešenie je pamätať si doterajší priemer a počet nameraných vzoriek. Pri počítaní nového priemeru, do ktorého chceš zahrnúť novú vzorku urobíš jednoducho: novy_priemer = priemer * (pocet_vzoriek / (pocet_vzoriek + 1)) + (nova_vzorka / (pocet_vzoriek + 1));novy_pocet_vzoriek = pocet_vzoriek + 1;Keď si to roznásobíš, zistíš, že je to naozaj priemer. Takto však používaš menšie čísla, takže nedôjde k pretečeniu.

Souhlasím  |  Nesouhlasím  |  Odpovědět
 |   | 

ale muze tam byt velka zaokrouhlovaci chyba, zvlaste pokud tam budou male hodnoty napr.: 1 + 2 = 3 => 1,5 zaokrouhleno na 2, pri dalsim kroku 2 x 2 = 4 a ne 3

Souhlasím  |  Nesouhlasím  |  Odpovědět
 |   | 

Priemer je potvora od prírody necelé číslo, preto sa prirodzene nezaokrúhľuje.

Souhlasím  |  Nesouhlasím  |  Odpovědět
 |   | 

Bohuzel s sestnactibitovou celociselnou aritmetikou budes muset zaokrouhlovat...

Souhlasím  |  Nesouhlasím  |  Odpovědět
 |   | 

Tak, pardón...Ale ak sa chceš vyhnúť pretečeniu, nejakú reprezentáciu necelých čísel si musíš vymyslieť.

Souhlasím  |  Nesouhlasím  |  Odpovědět
 |   | 

Není jednodušší vzorec: NovyPrumer = (Prumer*(PocetVzorku) + NovyVzore)/(PocetVzorku + 1);

Souhlasím  |  Nesouhlasím  |  Odpovědět
 |   | 

Přetečení nebo podtečení se stejně nevyhneš. Ať děláš co děláš, riskuješ, že z prvního 10000 se ti spočte průměr dobře a pak ta relativní změna průměru bude tak malá, že se ti ztratí v matematice tvého procesoru. A pak ti může přijít 100000 hodnot zcela mimo průměr, ale podíl hodnota/počet hodnot bude tak malý, že se ti to zaokrouhlí na 0.Nezbývá ti nic jiného, než při dosažení určitého počtu hodnot upravit čítač hodnot na polovinu (nebo i víc - to si musíš rozhodnout podle aritmetiky procesoru, aby nové hodnoty mohly efektivně ovlivnit počítání průměru) a začít počítat znovu. Tím docílíš toho, že i nové hodnoty budou mít možnost ovlivnit průměr, ale zároveň musí být nový počet hodnot dostatečně velký na to, aby ses vyhnul velkému ovlivnění.Osobně bych asi dal přednost uschovávání průměru (víš docela dobře max a min hodnotu) s dostatečným počtem desetinných míst (bude-li problém s FP operacemi, tak to prostě vynásob nějakým číslem (roluj to)). A v každém kroku k tomu připočti příspěvek aktuální stary_prumer-hodnoty/pocet_hodnot. No a až ti tahle hodnota při rozumné odchylce od průměru bude zaokrouhlena na 0, sniž pocet_hodnot na polovinu (třetinu).

Souhlasím  |  Nesouhlasím  |  Odpovědět
 |   | 

a nemozes to obmedzenie 10 vzoriek obist? proste to exportovat a ukladat vonku a potom to iba stiahnut a spriemerovat? predides tym aj ochylkam zo zaokruhlovania

Souhlasím  |  Nesouhlasím  |  Odpovědět
 |   | 

Vsem moc dekuju za inspiraci ...  Ty samply , co budu prumerovat budou nabyvat hodnot max do 20. Ten prumer me prakticky bude zajimat na jedno, mozna na dve desetinna mista, osetrim to tak, ze budu nasobit kazda sampl deseti nebo stem a tim si vyrobim potrebnou presnost ... S poctem samplu si taky nejak poradim, vytvorim si napr. prumer za poslednich 24 hodin. (pokud mi nebude stacit pamet) Ten puvodne vzneseny pozadavek na "libovolny" pocet samplu jsem jaksi "pretapnul". By l to jen takovy teoreticky predpoklad ... Jeste jednou vsem zucastnenym dekuju ...

Souhlasím  |  Nesouhlasím  |  Odpovědět
 |   | 

A co takhle:Vytvor si pole od 0 do 100( treba promenych typu DWORD - 32bitu= az 4GB muze uchovat ) . Kdyz  dostanes ten sample, tak akorat zvys pocitadlo u prislusneho indexu. To nepretece tak brzo..... No a z toho pole spocitej prumer, jak potrebujes. Jinak muzes pouzit i 64bitovou promennou misto DWORD

Souhlasím  |  Nesouhlasím  |  Odpovědět

Související témata: Matematický problém, Dlouhodobý průměr, Průměr


Určitě si přečtěte

Pojďme programovat elektroniku: Postavíme bezpečnostní systém za 30 Kč

Pojďme programovat elektroniku: Postavíme bezpečnostní systém za 30 Kč

** Před pár týdny jste si mohli v akci koupit Wi-Fi desku za jeden dolar ** Nám už TTGO T-Display dorazila do redakce ** Připojíme k ní jazýčkový kontakt a vyrobíme bezpečnostní systém

Jakub Čížek | 30

Jak funguje kontroverzní program, který ženám krade plavky. Mají se čeho bát?

Jak funguje kontroverzní program, který ženám krade plavky. Mají se čeho bát?

** Strojové učení ještě nepřitáhlo takový zájem jako na začátku prázdnin ** Ne, umělá inteligence nenašla lék na rakovinu ** Naučila se svlékat ženy nejen z plavek

Jakub Čížek | 34

Pojďme programovat elektroniku: České chytré zásuvky Netio pro kutily i firmy

Pojďme programovat elektroniku: České chytré zásuvky Netio pro kutily i firmy

** Wi-Fi zásuvky nevyrábí pouze Čína ** Vyzkoušeli jsme českou Netio PowerCable ** Je přímo určená pro vývojáře, má totiž jednoduché JSON API

Jakub Čížek | 42

Vyzkoušeli jsme chytrou čínskou zásuvku Sonoff S26 za tři stovky. Nevyhořeli jsme

Vyzkoušeli jsme chytrou čínskou zásuvku Sonoff S26 za tři stovky. Nevyhořeli jsme

** Je sice z Aliexpressu, ale funguje ** Můžete ji ovládat hlasem přes Amazon Echo nebo Google Home ** Za tři stovky zautomatizuje menší 230V spotřebič

Jakub Čížek | 96

10 novinek Androidu 10, které vás budou bavit

10 novinek Androidu 10, které vás budou bavit

Jan Láska, Vladislav Kluska | 25



Aktuální číslo časopisu Computer

Speciál o přechodu na DVB-T2

Velký test herních myší

Super fotky i z levného mobilu

Jak snadno upravit PDF