Matlab gamma函数:我得到大值的Inf

Matlab gamma函数:我得到大值的Inf,matlab,Matlab,我正在为Matlab中的多元t分布的pdf编写自己的代码。 有一段代码包含gamma函数 gamma((nu+D)/2) / gamma(nu/2) 问题是nu=1000,所以我从gamma函数得到Inf。 看来我必须使用伽马的一些数学性质 函数以不同的方式重写它 感谢您的建议数值gamma(1000/2)大于MATLAB支持的最大数值。因此它显示“inf”。要查看MATLAB中的最大值,请选中realmax。对于你的情况,如果D不是很大,你必须重写你的公式。让我们假设在你的例子中,D是一个偶

我正在为Matlab中的多元t分布的pdf编写自己的代码。 有一段代码包含gamma函数

gamma((nu+D)/2) / gamma(nu/2)
问题是nu=1000,所以我从gamma函数得到Inf。 看来我必须使用伽马的一些数学性质 函数以不同的方式重写它

感谢您的建议

数值
gamma(1000/2)
大于MATLAB支持的最大数值。因此它显示“inf”。要查看MATLAB中的最大值,请选中
realmax
。对于你的情况,如果D不是很大,你必须重写你的公式。让我们假设在你的例子中,D是一个偶数。那么你得到的公式是:nu/2*(nu/2-1)*..*(nu/2-D/2+1)


然后,
sum1
将是您想要的结果

您可以使用函数
gammaln(x)
,该函数相当于
log(gamma(x))
,但可以避免溢出问题。您编写的函数相当于:

exp(gammaln((nu+D)/2) - gammaln(nu/2))
你的意思是
sum1=sum1*(nu/2+i-1)
这对于
D
偶数是正确的(但我们甚至不知道
D
是整数),但是@Ray有正确的方法。
exp(gammaln((nu+D)/2) - gammaln(nu/2))