贡献者: addis; spain
1$\Gamma$ 函数(gamma function)可以看成是阶乘在实数或复数域的拓展,该函数有多种定义方法,这里先讨论实数域上的定积分定义。该方法可以定义 $(-1, \infty)$ 区间的阶乘
\begin{equation}
x! \equiv \Gamma (x + 1) = \int_0^{+\infty} t^x \mathrm{e} ^{-t} \,\mathrm{d}{t} \qquad (x > -1)~.
\end{equation}
即 $\Gamma$ 函数在区间 $(0,\infty)$ 被定义为
\begin{equation}
\Gamma(x) \equiv \int_0^{+\infty} t^{x-1} \mathrm{e} ^{-t} \,\mathrm{d}{t} \qquad (x > 0)~.
\end{equation}
可以证明新定义的阶乘的递推关系仍为
\begin{equation}
(x+1)!=(x+1)x! \qquad (x>-1)~,
\end{equation}
且 $0! = 1$。所以当 $x$ 取正整数 $N$ 时,
式 1 的结果仍然是熟悉的 $N! = N(N-1)\dots, 1$。
另外能证明 $(-1/2)!=\sqrt{\pi}$,由此我们可以直接写出半整数的阶乘为
\begin{equation}
\frac{N}{2}! = \frac{N}{2} \left(\frac{N}{2}-1 \right) \dots \frac12 \sqrt{\pi} \qquad (N > 0)~.
\end{equation}
1. 推导
首先当 $x \leqslant 0$ 时该积分在 $x=0$ 处不收敛,以下仅讨论 $x$ 为正实数的情况2。
我们现在验证当 $x$ 取正整数时,新定义的阶乘 $x! = \Gamma(x+1)$ 与原来的定义 $x! = x(x-1)\dots 1$ 相同。首先
\begin{equation}
0! = \Gamma(1) = \int_0^{+\infty} \mathrm{e} ^{-t} \,\mathrm{d}{t} = 0 - (-1) = 1~.
\end{equation}
使用分部积分法,令 $t^x$ 为 “求导项”,$ \mathrm{e} ^{-t}$ 为 “积分项”,可得递推公式3(式 3 )
\begin{equation}
\begin{aligned}
x! &= \Gamma(x+1) = \int_0^{+\infty} t^x \mathrm{e} ^{-t} \,\mathrm{d}{t} = - \left. t^x \mathrm{e} ^{-t} \right\rvert _{0}^{+\infty} + \int_0^{+\infty} x t^{x-1} \mathrm{e} ^{-t} \,\mathrm{d}{t} \\
&= x\int_0^{+\infty} t^{x-1} \mathrm{e} ^{-t} \,\mathrm{d}{t} = x\Gamma (x) = x(x-1)!~.
\end{aligned} \end{equation}
由递推
式 6 和初值
式 5 ,对任意正整数 $n$ 有
\begin{equation}
n! = n(n-1)! = n(n-1)(n-2)!... = n(n-1)...1~
\end{equation}
再来看半整数的阶乘,我们讨论范围内的最小半整数的阶乘为
\begin{equation}
\left(-\frac12 \right) ! = \int_0^{+\infty} \frac{ \mathrm{e} ^{-x}}{\sqrt x} \,\mathrm{d}{x} = 2\int_0^{+\infty} \mathrm{e} ^{-t^2} \,\mathrm{d}{t} = \int_{-\infty}^{+\infty} \mathrm{e} ^{-t^2} \,\mathrm{d}{t} = \sqrt{\pi}~,
\end{equation}
其中使用了换元法令 $x = t^2$ 将定积分变为
高斯积分。
2. 渐近公式
对于大的 $x$, 有斯特林公式(Stirling formula):
$$
\Gamma(x+1)
=\sqrt{2\pi x}\left({x\over \mathrm{e} }\right)^x
\left(
1
+{1\over12x}
+{1\over288x^2}
-{139\over51840x^3}
-{571\over2488320x^4}
+ \cdots
\right)~
$$
这是一个渐近展开,右边的级数是发散的。它的推导可见拉普拉斯方法
Matlab 代码
Matlab 中的默认 gamma(x)
函数接受一个实数 double 类型 x
,但如果你安装了符号工具箱 Matlab 符号计算和变精度计算,可以用 gamma(vpa(x))
。
代码 1:gamma_sym.m
% symbolic implementation of gamma function
% input and output are 'double' (supports complex and matrix)
% efficiency: ~6e-4 [s/eval]
function z = gamma_sym(z)
if issym(z), error('argument must be double'); end
old = digits(17);
z = double(gamma(vpa(z)));
if any(isnan(z) | isinf(z))
warning('bad output !');
end
digits(old);
end
1. ^ 参考 Wikipedia 相关页面 以及 [1] 相关章节。
2. ^ 事实上,自变量为负实数(非整数)时,$\Gamma$ 函数有另一种定义,这里不讨论。
3. ^ 该证明仅对 $x>0$ 适用,这样才有 $0^x \mathrm{e} ^{-0} = 0$,使第四个等号成立。
[1] ^ Arfken, Weber, Harris. Mathematical Methods for Physicists - A Comprehensive Guide 7ed
致读者: 小时百科一直以来坚持所有内容免费无广告,这导致我们处于严重的亏损状态。 长此以往很可能会最终导致我们不得不选择大量广告以及内容付费等。 因此,我们请求广大读者
热心打赏 ,使网站得以健康发展。 如果看到这条信息的每位读者能慷慨打赏 20 元,我们一周就能脱离亏损, 并在接下来的一年里向所有读者继续免费提供优质内容。 但遗憾的是只有不到 1% 的读者愿意捐款, 他们的付出帮助了 99% 的读者免费获取知识, 我们在此表示感谢。