Ejemplo n.º 1
0
        /// <summary>
        /// Simple, stable, but not very accurate LogGammaP for small z &lt; 0.7*a
        /// <para>Log((z^a)(e^-z)/(a*Γ(a)) * 1F1(1, a+1, z))</para>
        /// </summary>
        /// <param name="a"></param>
        /// <param name="z"></param>
        /// <returns></returns>
        static double LogGammaPSmallZ(double a, double z)
        {
            // See: http://dlmf.nist.gov/8.5#E1
            double t      = HypergeometricSeries.Sum1F1(1, a + 1, z, -1);
            double result = a * Math.Log(z) - z - Math2.Lgamma(1 + a) + Math2.Log1p(t);

            return(result);
        }
Ejemplo n.º 2
0
 /// <summary>
 /// Lower gamma series sum: Σ( z^k/(a+1)_k) k={0, inf}
 /// <para>γ(a,z) = ((z^a) * (e^-z) / a) * LowerSeriesSum(a,z)</para>
 /// </summary>
 /// <param name="a"></param>
 /// <param name="z"></param>
 /// <returns></returns>
 /// <see href="http://dlmf.nist.gov/8.5#E1"/>
 public static double LowerSeries(double a, double z)
 {
     // Sum1F1 is optimized for a1 == 1
     return(HypergeometricSeries.Sum1F1(1, 1 + a, z));
 }