public void MixtureFitTest() { var samples1 = new NormalDistribution(mean: -2, stdDev: 0.5).Generate(100000); var samples2 = new NormalDistribution(mean: +4, stdDev: 0.5).Generate(100000); // Mix the samples from both distributions var samples = samples1.Concatenate(samples2); // Create a new mixture distribution with two Normal components var mixture = new Mixture<NormalDistribution>(new[] { 0.2, 0.8 }, new NormalDistribution(-1), new NormalDistribution(+1)); // Estimate the distribution mixture.Fit(samples, new MixtureOptions { Iterations = 50, Threshold = 0 }); var result = mixture.ToString("N2", System.Globalization.CultureInfo.InvariantCulture); Assert.AreEqual("Mixture(x; 0.50*N(x; μ = -2.00, σ² = 0.25) + 0.50*N(x; μ = 4.00, σ² = 0.25))", result); }