public void FitTest2()
{
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[] { 2512512312 },
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[] weights = { 0, 1, 1, 1, 1, 1, 1, 1, 1, 1 };
weights = weights.Divide(weights.Sum());
double[][] part1 = values.Submatrix(1, 4);
double[][] part2 = values.Submatrix(5, 9);
target.Fit(values, weights);
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.WeightedMean(values, weights);
var expectedVar = Measures.WeightedCovariance(values, weights);
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.68);
}