Gamma 函数

                     

贡献者: addis; spain

预备知识 1 定积分

  1Γ 函数(gamma function)可以看成是阶乘在实数或复数域的拓展,该函数有多种定义方法,这里先讨论实数域上的定积分定义。该方法可以定义 (1,) 区间的阶乘

(1)x!Γ(x+1)=0+txetdt(x>1) .
Γ 函数在区间 (0,) 被定义为
(2)Γ(x)0+tx1etdt(x>0) .
可以证明新定义的阶乘的递推关系仍为
(3)(x+1)!=(x+1)x!(x>1) ,
0!=1。所以当 x 取正整数 N 时,式 1 的结果仍然是熟悉的 N!=N(N1),1

   另外能证明 (1/2)!=π,由此我们可以直接写出半整数的阶乘为

(4)N2!=N2(N21)12π(N>0) .

1. 推导

预备知识 2 分部积分法

   首先当 x0 时该积分在 x=0 处不收敛,以下仅讨论 x 为正实数的情况2

   我们现在验证当 x 取正整数时,新定义的阶乘 x!=Γ(x+1) 与原来的定义 x!=x(x1)1 相同。首先

(5)0!=Γ(1)=0+etdt=0(1)=1 .

   使用分部积分法,令 tx 为 “求导项”,et 为 “积分项”,可得递推公式3式 3

(6)x!=Γ(x+1)=0+txetdt=txet|0++0+xtx1etdt=x0+tx1etdt=xΓ(x)=x(x1)! .
由递推式 6 和初值式 5 ,对任意正整数 n
(7)n!=n(n1)!=n(n1)(n2)!...=n(n1)...1 

   再来看半整数的阶乘,我们讨论范围内的最小半整数的阶乘为

(8)(12)!=0+exxdx=20+et2dt=+et2dt=π ,
其中使用了换元法令 x=t2 将定积分变为高斯积分

2. 渐近公式

   对于大的 x, 有斯特林公式(Stirling formula)Γ(x+1)=2πx(xe)x(1+112x+1288x213951840x35712488320x4+)  这是一个渐近展开,右边的级数是发散的。它的推导可见拉普拉斯方法

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. ^ 事实上,自变量为负实数(非整数)时,Γ 函数有另一种定义,这里不讨论。
3. ^ 该证明仅对 x>0 适用,这样才有 0xe0=0,使第四个等号成立。


[1] ^ Arfken, Weber, Harris. Mathematical Methods for Physicists - A Comprehensive Guide 7ed

                     

© 小时科技 保留一切权利