1. 对数伽马函数 (gammaln) 的斯特林公式

在数值分析和渐近分析中,处理大自变量的伽马函数通常使用对数形式 lnΓ(z)\ln\Gamma(z) 的斯特林渐近展开(Stirling’s asymptotic series)。

z|z| \to \inftyarg(z)<π|\arg(z)| < \pi 时:

lnΓ(z)(z12)lnzz+12ln(2π)+k=1B2k2k(2k1)z2k1\ln \Gamma(z) \sim \left( z - \frac{1}{2} \right) \ln z - z + \frac{1}{2} \ln(2\pi) + \sum_{k=1}^{\infty} \frac{B_{2k}}{2k(2k-1)z^{2k-1}}

其中 B2kB_{2k} 为伯努利数。截断前几项的常用形式为:

lnΓ(z)(z12)lnzz+12ln(2π)+112z1360z3+O(z5)\ln \Gamma(z) \approx \left( z - \frac{1}{2} \right) \ln z - z + \frac{1}{2} \ln(2\pi) + \frac{1}{12z} - \frac{1}{360z^3} + \mathcal{O}\left(z^{-5}\right)

2. 伽马函数比值的渐近展开

在计算高阶正交多项式时,常遇到 Γ(n+a)Γ(n+b)\frac{\Gamma(n+a)}{\Gamma(n+b)}。直接计算 Γ\Gamma 会导致浮点溢出(双精度下 n>171n>171 即溢出),大数 lnΓ\ln\Gamma 直接相减则会导致灾难性取消(Catastrophic cancellation)。

Tricomi-Erdélyi 展开

由 Tricomi 和 Erdélyi 提出,直接描述了伽马函数比值的渐近行为:

Γ(z+a)Γ(z+b)zabn=0cnzn\frac{\Gamma(z+a)}{\Gamma(z+b)} \sim z^{a-b} \sum_{n=0}^{\infty} c_n z^{-n}

展开到前两项的高阶近似形式为:

Γ(n+a)Γ(n+b)nab[1+(ab)(a+b1)2n+O(n2)]\frac{\Gamma(n+a)}{\Gamma(n+b)} \sim n^{a-b} \left[ 1 + \frac{(a-b)(a+b-1)}{2n} + \mathcal{O}\left(n^{-2}\right) \right]

数值计算策略

  • 中等规模 nn:利用语言内置函数 exp(gammaln(n+a) - gammaln(n+b))
  • 超大规模 nn:必须使用上述 Tricomi-Erdélyi 渐近公式直接计算,避免精度丢失。

3. gammaln 差值的广义斯特林展开

如果直接处理对数差值 lnΓ(z+a)lnΓ(z+b)\ln\Gamma(z+a) - \ln\Gamma(z+b),可以利用带有伯努利多项式 Bn(x)B_n(x) 的广义斯特林展开。该公式结构严密,直接将渐近系数映射到伯努利多项式的差分上:

lnΓ(z+a)lnΓ(z+b)(ab)lnz+k=1(1)k+1(Bk+1(a)Bk+1(b))k(k+1)zk\ln\Gamma(z+a) - \ln\Gamma(z+b) \sim (a-b)\ln z + \sum_{k=1}^\infty \frac{(-1)^{k+1} (B_{k+1}(a) - B_{k+1}(b))}{k(k+1)z^k}

代入 k=1k=1 时的 B2(x)=x2x+16B_2(x) = x^2 - x + \frac{1}{6},可严格推导出现 O(z1)\mathcal{O}(z^{-1}) 项的系数 (ab)(a+b1)2z\frac{(a-b)(a+b-1)}{2z}


4. 伯努利多项式 (Bernoulli Polynomials) 简析

定义

通过母函数(Generating Function)定义为:

textet1=n=0Bn(x)tnn!\frac{t e^{xt}}{e^t - 1} = \sum_{n=0}^{\infty} B_n(x) \frac{t^n}{n!}

前几项为:

  • B0(x)=1B_0(x) = 1
  • B1(x)=x12B_1(x) = x - \frac{1}{2}
  • B2(x)=x2x+16B_2(x) = x^2 - x + \frac{1}{6}

核心性质与意义

伯努利多项式是连接“离散数学”与“连续数学”的核心桥梁,其在伽马函数分析中频繁出现的原因包括:

  1. 差分算子的逆运算: 具备美妙的差分性质 Bn(x+1)Bn(x)=nxn1B_n(x+1) - B_n(x) = n x^{n-1}。因为 Γ\Gamma 函数的核心是差分递推 lnΓ(z+1)lnΓ(z)=lnz\ln\Gamma(z+1) - \ln\Gamma(z) = \ln z,伯努利多项式天然是解析这种离散差分方程的最优基底。
  2. 欧拉-麦克劳林求和公式 (Euler-Maclaurin Formula): 用于将离散求和转化为连续积分。斯特林公式的严格推导正是利用该公式对 lnk\ln k 求和,从而引入了伯努利项。
  3. 等幂求和闭式解: 用于推导自然数列等幂求和(Faulhaber 公式)。