public void FitTest()
{
double[] coefficients = { 0.50, 0.50 };
NormalDistribution[] components = new NormalDistribution[2];
components[0] = new NormalDistribution(2, 1);
components[1] = new NormalDistribution(5, 1);
var target = new Mixture<NormalDistribution>(coefficients, components);
double[] values = { 0, 1, 1, 0, 1, 6, 6, 5, 7, 5 };
double[] part1 = values.Submatrix(0, 4);
double[] part2 = values.Submatrix(5, 9);
MixtureOptions options = new MixtureOptions() { Threshold = 1e-10 };
target.Fit(values, options);
var actual = target;
var mean1 = Measures.Mean(part1);
var var1 = Measures.Variance(part1);
Assert.AreEqual(mean1, actual.Components[0].Mean, 1e-6);
Assert.AreEqual(var1, actual.Components[0].Variance, 1e-6);
var mean2 = Measures.Mean(part2);
var var2 = Measures.Variance(part2);
Assert.AreEqual(mean2, actual.Components[1].Mean, 1e-6);
Assert.AreEqual(var2, actual.Components[1].Variance, 1e-5);
var expectedMean = Measures.Mean(values);
var actualMean = actual.Mean;
Assert.AreEqual(expectedMean, actualMean, 1e-7);
var expectedVar = Measures.Variance(values, false);
var actualVar = actual.Variance;
Assert.AreEqual(expectedVar, actualVar, 0.15);
}