C simple moving average


O principal defeito no seu programa é que o cálculo recursivo está incorreto. Para calcular a média, você tem que obter a soma do valor atual e os valores restantes. Em seguida, dividir essa soma pelo número de valores. O número de valores é num. O valor atual é o que calculatenumber () retorna. A soma dos valores remanescentes é num-1 multiplicada pela média dos valores remanescentes. A média dos valores restantes é calculada fazendo uma chamada recursiva para a média (). Assim, escrevemos o seguinte: Um programa completo usando essa função pode ser assim: Note que esta não é uma maneira muito boa de calcular a média porque você perde precisão toda vez que você divide a soma atual por num. Quando essa média é multiplicada novamente à medida que a chamada recursiva retorna, os dígitos significativos que você perdeu na divisão não são restaurados. Você está destruindo informações dividindo e multiplicando a soma. Para maior precisão, você deseja manter o controle da soma como você percorrer os elementos, em seguida, dividir no final. Outro ponto a considerar é o que se entende por uma média móvel. O que implementamos acima não é uma média móvel, mas uma média fixa. É a média de uma janela fixa de elementos. Se você mover a janela por uma posição, você tem que começar tudo de novo e calcular a soma novamente. A maneira correta de implementar uma janela em movimento é acompanhar todos os elementos da janela. Quando você desloca a janela uma posição para a direita, você remove o elemento mais à esquerda da janela e subtrai seu valor da soma, em seguida, adicione o novo elemento mais à direita para a janela e adicione seu valor à soma. Isso é o que o torna uma quantia em movimento. Dividindo a soma móvel pelo número de elementos dá-lhe a média móvel. A maneira natural de implementar uma janela em movimento é com uma fila porque você pode adicionar novos elementos à cabeça e pop elementos antigos da cauda. Respondeu Nov 22 14 at 17:44

Comments

Popular Posts