Hej.
Vad är bästa metoden att skapa ett medelvärde av en dynamisk diskret slumpvariabel?
1. Ta till exempel 50 observationer och summera dessa och dela i antalet observerade observationer. Repetera.
2. Ta till exempel 50 observationer och summera dessa och dela i antalet observerade observationer.
Byt ut första observerade värdet och adderar nytt observerat värde. Dela nu med antalet observerade observationer. Repetera det fetmarkerade Här används arraylista.
Båda ger resultat men nummer 2 uppdaterar sitt resultat för varje gång, utom de 50 första gångerna.
Bästa metoden att skapa ett medelvärde?
Re: Bästa metoden att skapa ett medelvärde?
Den första metoden är ju bra om du behöver medelvärdet en gång (och du tycker 50 mätningar är lagom)
Den andra om du behöver det löpande.
Som vanligt så gäller ju "det beror på".
Hur ofta mäter du och hur stor utjämning vill du ha osv.
Det kanske inte är lämpligt med just 50 mätningar om du mäter en gång per år och värdet skall användas till att ställa en termostat för ditt element i huset.
För att vara tydlig.
Den andra om du behöver det löpande.
Som vanligt så gäller ju "det beror på".
Hur ofta mäter du och hur stor utjämning vill du ha osv.
Det kanske inte är lämpligt med just 50 mätningar om du mäter en gång per år och värdet skall användas till att ställa en termostat för ditt element i huset.
För att vara tydlig.
Re: Bästa metoden att skapa ett medelvärde?
Jag ska mäta hela tiden. Det ska ske snabbt.
Tack. Då väljer ju nummer 2.
Tack. Då väljer ju nummer 2.
Re: Bästa metoden att skapa ett medelvärde?
Om du till ditt alternativ lägger till att du memorerar summan så behöver du inte dividera så mycket. Då räcker det med att du subtraherar det äldsta värdet i listan, adderar det nya, sätter in det nya värdet i listan. Sedan räcker det att du delar summan med antalet datapunkter.
Något i stil med:
Något i stil med:
Kod: Markera allt
#include <stdio.h>
#define NPTS 50
int data[NPTS] = {0};
int datasum = 0;
int *nptr = data;
int wcount = 0;
int new_number(int num) {
if(wcount < NPTS) {
*nptr = num;
datasum += num;
nptr++;
wcount++;
printf(" - Buffer not full sum: %d count: %d ==> %d\n", datasum, wcount, datasum/wcount);
return datasum/wcount;
}
nptr = data+(nptr-data)%NPTS;
datasum -= *nptr;
datasum += num;
*nptr++ = num;
return datasum/NPTS;
}
int main()
{
for(int i=0; i<100; ++i) {
int ret = new_number(i);
printf("new average: %d\n", ret);
}
}
Re: Bästa metoden att skapa ett medelvärde?
En fuskvariant som ibland duger beroende på applikation är:
X=(X*49+Y)/50
Där X= medelvärdet och Y är det nya samplingsvärdet.
X=(X*49+Y)/50
Där X= medelvärdet och Y är det nya samplingsvärdet.