|
The mean, &mu, of N numbers, A[1], ..., A[N],
is their sum divided by N,
i.e. (∑1..N A[i])/N .
Their variance is
(∑1..N (A[i]-μ)2)/N
and their standard deviation, σ, is
sqrt(variance) ;
note that these quantities are always >=0.
The mean gives the "centre of gravity" (CG) of the numbers,
and the standard deviation indicates how far they stray from
the CG, on average.
Both the mean and the standard deviation can be
calculated on a single scan through A[ ]
even though the mean is not known until the end of the scan:
- variance
- = σ2
- = ( ∑i=1..N (A[i]-μ)2 ) / N
- = ( (∑ A[i]2) - 2*μ*(∑ A[i]) + N*μ2 ) / N
- = ( (∑ A[i]2) - 2*μ*sum ) / N + μ2
- = ( ∑i=1..N A[i]2 ) / N - μ2
i.e. the mean squares minus the squared mean.
- Hence
σ = sqrt(sumSq / N - μ2)
- where
sumSq = ∑1..N A[i]2
This gives the following algorithm:
sum := 0.0;
sumSq := 0.0;
for i in {1 .. N} do
sum +:= A[i];
sumSq +:= A[i]2
end for;
mean := sum / N;
stdDev := sqrt(sumSq / N - mean2);
-- L.A., 1999
Notes
|
|