Drops RuneQuest #3 – Magia Espiritual
Há 2 meses
As sombras da programação
Já que falávamos de variâncias e médias, um dos cálculos mais belos de média é a média harmónica.[update]
Roubar a explicação não… roubei o exemplo. Para a explicação deixei o apontador para o artigo na Wikipédia – mais preguiçoso ainda!
[/update]
(map (lambda (x) (/ 1 x)) *list*)
#'apply e #'+:(apply +
(map (lambda (x) (/ 1 x)) *list*))
(length *list*)
(define harmonic-mean
(lambda (*list*)
(/
(length *list*)
(apply +
(map (lambda (x) (/ 1 x)) *list*)))))
(let ((params '(40 60)))
(display (harmonic-mean params))
(newline))
[update]
Ainda esperando o pessoal do Prettify corrigir o syntax highlighting para LISP.
[/update]
Este artigo dá seguimento ao artigo sobre variância amostral.[math:pow(Xi - Xm, 2) || Xi <- List]math:pow/2) das diferenças entre cada elemento (Xi) da lista (Xi <- List) e sua média (Xm, calculado anteriormente).math:sum/1 para gerar um somatório e retorna a divisão do resultado do somatório pelo tamanho da lista menos um (Num / Demon).#'map roda a função anónima (lambda) em cada elemento, extraindo os quadrados dos desvios.[update]
Troquei o link para map/reduce, que apontava para um arcabouço do Google, quando as referências reais seriam encontradas no segundo parágrafo do texto referenciado.
[/update]
(lambda (x) (expt (- x xm) 2)) em LISP.#'apply) é usado somatório (#'+), aplicado ao conjunto resultante.
Uma das operações mais importantes e necessárias da matemática é a variância de amostra. É usada, por exemplo, para o cálculo do desvio padrão e da regressão linear.variance(List) ->
Xm = mean(List),
Num = lists:sum([math:pow(Xi - Xm, 2) || Xi <- List]),
Denom = length(List) - 1,
Num / Denom.mean/1:mean(List) ->
lists:sum(List) / length(List).(define variance
(lambda (*list*)
(let ((xm (mean *list*)))
(/
(apply +
(map (lambda (x) (expt (- x xm) 2)) *list*))
(- (length *list*) 1)))))(define mean
(lambda (*list*)
(/
(apply + *list*)
(length *list*))))double variance(int length, double *list) {
double x_mean = mean(length, list);
double sum = 0;
int i;
for (i=0; i<length; ++i)
sum += pow(list[i] - x_mean, 2.);
return sum / (length - 1);
}math.h. Segue a implementação da função mean():double mean(int length, double *list) {
double sum = 0;
int i;
for (i=0; i<length; ++i)
sum += list[i];
return sum / length;
}