#region Header File
//
// MeanVar.cs - Mean and Variance Estimation
//
// Copyright (C) Javier Valcarce. BSD License
#endregion
namespace Arq
{
///
/// Statistical estimator of mean and variance
///
public class MeanVar
{
double m = 0; // mean
double v = 0; // var
long n = 0; // sample count
double t;
double max = double.NegativeInfinity;
double min = double.PositiveInfinity;
///
/// Compute a new sample and update estimators
///
///
public void Compute(double s)
{
n++;
m = m * (n - 1) / n + s / n;
t = (s - m) * (s - m);
v = v * (n - 1) / n + t / n;
if (s > max) max = s;
if (s < min) min = s;
}
///
/// Resets internal state
///
public void Reset()
{
m = v = 0;
n = 0;
}
// properties
public double Mean { get { return m; } }
public double Variance { get { return v; } }
public double Count { get { return n; } }
public double Max { get { return max; } }
public double Min { get { return min; } }
}
}