贡献者: 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