public void FitTest()
{
double[] coefficients = { 0.50, 0.50 };
MultivariateNormalDistribution[] components = new MultivariateNormalDistribution[2];
components[0] = new MultivariateNormalDistribution(new double[] { 2 }, new double[,] { { 1 } });
components[1] = new MultivariateNormalDistribution(new double[] { 5 }, new double[,] { { 1 } });
var target = new MultivariateMixture<MultivariateNormalDistribution>(coefficients, components);
double[][] values = { new double[] { 0 },
new double[] { 1 },
new double[] { 1 },
new double[] { 0 },
new double[] { 1 },
new double[] { 6 },
new double[] { 6 },
new double[] { 5 },
new double[] { 7 },
new double[] { 5 } };
double[][] part1 = values.Submatrix(0, 4);
double[][] part2 = values.Submatrix(5, 9);
target.Fit(values);
var mean1 = Measures.Mean(part1, dimension: 0);
var var1 = Measures.Variance(part1);
Assert.AreEqual(mean1[0], target.Components[0].Mean[0], 1e-5);
Assert.AreEqual(var1[0], target.Components[0].Variance[0], 1e-5);
var mean2 = Measures.Mean(part2, dimension: 0);
var var2 = Measures.Variance(part2);
Assert.AreEqual(mean2[0], target.Components[1].Mean[0], 1e-5);
Assert.AreEqual(var2[0], target.Components[1].Variance[0], 1e-5);
var expectedMean = Measures.Mean(values, dimension: 0);
var expectedVar = Measures.Covariance(values);
var actualMean = target.Mean;
var actualVar = target.Covariance;
Assert.AreEqual(expectedMean[0], actualMean[0], 0.0000001);
// Assert.AreEqual(expectedVar[0, 0], actualVar[0, 0], 0.0000001);
}