Matlab gamma函数:我获得了大值的Inf

时间:2013-04-01 22:05:57

标签: matlab

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

gamma((nu+D)/2) / gamma(nu/2)

问题是nu = 1000,所以我从gamma函数得到了Inf。 似乎我将不得不使用伽玛的一些数学属性 功能以不同的方式重写它。

感谢您的任何建议

2 个答案:

答案 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将是您想要的结果。