Aqui está outra resposta que oferece comentários sobre como a resposta de Muis , Abdullah Al-Ageel e Flip são matematicamente a mesma coisa exceto que escritas de forma diferente.
Claro, temos José Manuel Ramos a análise de explicando como os erros de arredondamento afetam cada um de maneira ligeiramente diferente, mas isso depende da implementação e mudaria com base em como cada resposta foi aplicada ao código.
No entanto, há uma grande diferença
Está no Muis 's N
, Flip 's k
e Abdullah Al-Ageel 's n
. Abdullah Al-Ageel não chega a explicar o que n
deveria ser, mas N
e k
diferem em que N
é " o número de amostras em que deseja média ao longo ", enquanto k
é a contagem de valores amostrados. (Embora eu tenha dúvidas se ligar para N
o número de amostras é preciso.)
E aqui chegamos à resposta abaixo. É essencialmente a mesma velha média móvel exponencial ponderada dos outros, então, se você estiver procurando por uma alternativa, pare aqui.
Média móvel exponencial ponderada
Inicialmente:
average = 0
counter = 0
Para cada valor:
counter += 1
average = average + (value - average) / min(counter, FACTOR)
A diferença é a min(counter, FACTOR)
parte. Isso é o mesmo que dizer min(Flip's k, Muis's N)
.
FACTOR
é uma constante que afeta a rapidez com que a média "alcança" a tendência mais recente. Quanto menor o número, mais rápido. (Em 1
não é mais uma média e apenas se torna o valor mais recente).
Esta resposta requer o contador em execução counter
. Se for problemático, o min(counter, FACTOR)
pode ser substituído por just FACTOR
, transformando-o na resposta de Muis . O problema em fazer isso é que a média móvel é afetada por tudo o que average
é inicializado. Se foi inicializado para0
, esse zero pode levar muito tempo para sair da média.
Como fica parecendo