我正在为Matlab中的多变量t分布的pdf编写自己的代码。 有一段代码包含伽玛函数。
gamma((nu+D)/2) / gamma(nu/2)
问题是nu = 1000,所以我从gamma函数得到了Inf。 似乎我将不得不使用伽玛的一些数学属性 功能以不同的方式重写它。
感谢您的任何建议
答案 0 :(得分:4)
您可以使用gammaln(x)
函数,它相当于log(gamma(x))
,但可以避免溢出问题。您编写的函数等同于:
exp(gammaln((nu+D)/2) - gammaln(nu/2))
答案 1 :(得分:0)
数字gamma(1000/2)
大于MATLAB支持的最大数量。因此它显示'inf'。要查看MATLAB中的最大数量,请选中realmax
。对于您的情况,如果D不是很大,您将不得不重写您的公式。让我们假设在你的情况下'D'是偶数。那么你的公式将是:nu / 2 *(nu / 2 -1)* .... *(nu / 2 - D / 2 + 1)。
sum1 = 1
for i = 1:D/2
sum1 = sum1*(nu/2 - i+1);
end
然后sum1
将是您想要的结果。