/// <summary> /// Probability density function /// </summary> public double Pdf(double x) { if (x < 0 || x > 1) { return(0); } if (x < 1e-9) { if (Alpha > 1) { return(0); } if (Abs(Alpha - 1) < 1e-9) { return(Beta); } return(double.PositiveInfinity); } if (x > 1 - 1e-9) { if (Beta > 1) { return(0); } if (Abs(Beta - 1) < 1e-9) { return(Alpha); } return(double.PositiveInfinity); } return(Exp((Alpha - 1) * Log(x) + (Beta - 1) * Log(1 - x) - BetaFunction.CompleteLogValue(Alpha, Beta))); }
public void BetaCompleteLogValue() { var comparer = new AbsoluteEqualityComparer(0.0000001); for (int a = 1; a <= 20; a++) { for (int b = 1; b <= 20; b++) { double actual = BetaFunction.CompleteLogValue(a, b); double expected = Math.Log(Factorial(a - 1) * Factorial(b - 1) / Factorial(a + b - 1)); Assert.Equal(expected, actual, comparer); } } }