贡献者: addis; spain
1$\Gamma$ 函数(gamma function)可以看成是阶乘在实数或复数域的拓展,该函数有多种定义方法,这里先讨论实数域上的定积分定义。该方法可以定义 $(-1, \infty)$ 区间的阶乘
另外能证明 $(-1/2)!=\sqrt{\pi}$,由此我们可以直接写出半整数的阶乘为
首先当 $x \leqslant 0$ 时该积分在 $x=0$ 处不收敛,以下仅讨论 $x$ 为正实数的情况2。
我们现在验证当 $x$ 取正整数时,新定义的阶乘 $x! = \Gamma(x+1)$ 与原来的定义 $x! = x(x-1)\dots 1$ 相同。首先
使用分部积分法,令 $t^x$ 为 “求导项”,$ \mathrm{e} ^{-t}$ 为 “积分项”,可得递推公式3(式 3 )
再来看半整数的阶乘,我们讨论范围内的最小半整数的阶乘为
对于大的 $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 中的默认 gamma(x)
函数接受一个实数 double 类型 x
,但如果你安装了符号工具箱 Matlab 符号计算和变精度计算,可以用 gamma(vpa(x))
。
% 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
 
 
 
 
 
 
 
 
 
 
 
友情链接: 超理论坛 | ©小时科技 保留一切权利