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 18663 days, 1 hours, 43 minutes ago.