StirlingCoefficients.frink

View or download StirlingCoefficients.frink in plain text format


/** This reproduce the additional Stirling coefficients for Stirling's
    approximation to the factorial funcion from:

Nemes,Gergő, On the coefficients of the asymptotic expansion of n!,
Journal of Integer Sequences 13 (2010), no. 6, Article 10.6.6, 5 pp.
     http://www.cs.uwaterloo.ca/journals/JIS/VOL13/Nemes/nemes2.pdf

    This requires use of the generalized binomial theorem with rational
    numbers (instead of integers) as arguments.  This can be obtained using
    the result that binomial[r, k] = fallingFactorial[r, k] / k!

    Note that, from
    https://en.wikipedia.org/wiki/Stirling%27s_approximation

    "As n → ∞, the error in the truncated series is asymptotically equal to the
     first omitted term. This is an example of an asymptotic expansion. It is
     not a convergent series; for any particular value of n there are only so
     many terms of the series that improve accuracy, after which accuracy
     worsens."
*/


// Used for calculating falling factorial.
use Pochhammer.frink

/** This calculates StirlingCoeffient a_k.  This will be the term in the sum
    a_k / n^k

    For example, the coefficients are
    (1 + 1/(12 n) + 1/(288 n^2) ... )

    This implements equation 5 in Nemes */

StirlingCoefficient[k] :=
{
   ak = (2k)!/(2^k k!)
   sum1 = 0
   for i = 0 to 2k
   {
      sum2 = 0
      sum1a = generalizedBinomial[k+i-1/2, i] generalizedBinomial[3k + 1/2, 2k-i] 2^i 
      for j = 0 to i
         sum2 = sum2 + binomial[i,j] (-1)^j j! S[2k + i + j, j] / (2k + i + j)!

      sum1 = sum1 + sum1a * sum2
   }

   return sum1 * ak
}

/** This is the equation after (5) in Nemes. */
S[p,q] :=
{
   s = 1/q!
   sum = 0
   for l = 0 to q
      sum = sum + (-1)^l binomial[q, l] (q-l)^p

   return s * sum
}

/** Testing */
/*for k = 0 to 8
   println["$k\t" + StirlingCoefficient[k]]
*/


View or download StirlingCoefficients.frink in plain text format


This is a program written in the programming language Frink.
For more information, view the Frink Documentation or see More Sample Frink Programs.

Alan Eliasen was born 18864 days, 16 hours, 13 minutes ago.