Bästa metoden att skapa ett medelvärde?

C, C++, Pascal, Assembly, Raspberry, Java, Matlab, Python, BASIC, SQL, PHP, etc.
Användarvisningsbild
Al_Bundy
Inlägg: 2889
Blev medlem: 11 september 2012, 23:59:50
Ort: The U.S - Chicago
Kontakt:

Bästa metoden att skapa ett medelvärde?

Inlägg av Al_Bundy »

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.
ToPNoTCH
Inlägg: 4890
Blev medlem: 21 december 2009, 17:59:48

Re: Bästa metoden att skapa ett medelvärde?

Inlägg av ToPNoTCH »

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.
Användarvisningsbild
Al_Bundy
Inlägg: 2889
Blev medlem: 11 september 2012, 23:59:50
Ort: The U.S - Chicago
Kontakt:

Re: Bästa metoden att skapa ett medelvärde?

Inlägg av Al_Bundy »

Jag ska mäta hela tiden. Det ska ske snabbt.

Tack. Då väljer ju nummer 2.
mounte
Inlägg: 204
Blev medlem: 14 november 2010, 13:15:00
Ort: Sandviken

Re: Bästa metoden att skapa ett medelvärde?

Inlägg av mounte »

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:

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);
    }
    
}
Gimbal
Inlägg: 7931
Blev medlem: 20 april 2005, 15:43:53

Re: Bästa metoden att skapa ett medelvärde?

Inlägg av Gimbal »

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.
Skriv svar