public void ConstructorTest4()
{
// Create a Dirichlet with the following concentrations
var dirich = new DirichletDistribution(0.42, 0.57, 1.2);
// Common measures
double[] mean = dirich.Mean; // { 0.19, 0.26, 0.54 }
double[] median = dirich.Median; // { 0.19, 0.26, 0.54 }
double[] var = dirich.Variance; // { 0.048, 0.060, 0.077 }
double[,] cov = dirich.Covariance; // see below
// 0.0115297440926238 0.0156475098399895 0.0329421259789253
// cov = 0.0156475098399895 0.0212359062114143 0.0447071709713986
// 0.0329421259789253 0.0447071709713986 0.0941203599397865
// (the above matrix representation has been transcribed to text using)
string str = cov.ToString(DefaultMatrixFormatProvider.InvariantCulture);
// Probability mass functions
double pdf1 = dirich.ProbabilityDensityFunction(new double[] { 2, 5 }); // 0.12121671541846207
double pdf2 = dirich.ProbabilityDensityFunction(new double[] { 4, 2 }); // 0.12024840322466089
double pdf3 = dirich.ProbabilityDensityFunction(new double[] { 3, 7 }); // 0.082907634905068528
double lpdf = dirich.LogProbabilityDensityFunction(new double[] { 3, 7 }); // -2.4900281233124044
Assert.AreEqual(0.19178082191780821, mean[0]);
Assert.AreEqual(0.26027397260273971, mean[1]);
Assert.AreEqual(0.547945205479452, median[2]);
Assert.AreEqual(0.19178082191780821, median[0]);
Assert.AreEqual(0.26027397260273971, median[1]);
Assert.AreEqual(0.547945205479452, median[2]);
Assert.AreEqual(0.048589635818914775, var[0]);
Assert.AreEqual(0.060354680811388089, var[1]);
Assert.AreEqual(0.077649296950323854, var[2]);
Assert.AreEqual(0.011529744092623844, cov[0, 0]);
Assert.AreEqual(0.015647509839989502, cov[0, 1]);
Assert.AreEqual(0.015647509839989502, cov[1, 0]);
Assert.AreEqual(0.021235906211414326, cov[1, 1]);
Assert.AreEqual(0.12121671541846207, pdf1);
Assert.AreEqual(0.12024840322466089, pdf2);
Assert.AreEqual(0.082907634905068528, pdf3);
Assert.AreEqual(-2.4900281233124044, lpdf);
}