public void GradientTest()
{
for (double a = 0.1; a < 3; a += 0.1)
{
for (double b = 0.1; b < 3; b += 0.1)
{
var target = new BetaDistribution(a, b);
Assert.AreEqual(a, target.Alpha);
Assert.AreEqual(b, target.Beta);
FiniteDifferences fd = new FiniteDifferences(2);
fd.Function = (double[] parameters) => BetaDistribution.LogLikelihood(samples, parameters[0], parameters[1]);
double[] expected = fd.Compute(a, b);
double[] actual = BetaDistribution.Gradient(samples, a, b);
Assert.IsTrue(expected[0].IsRelativelyEqual(actual[0], 0.05));
Assert.IsTrue(expected[1].IsRelativelyEqual(actual[1], 0.05));
}
}
}