【问题标题】:Matlab gamma function: I get Inf for large valuesMatlab gamma 函数:我得到大值的 Inf
【发布时间】:2013-04-01 22:05:57
【问题描述】:

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

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

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

感谢您的任何建议

【问题讨论】:

    标签: matlab


    【解决方案1】:

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

    exp(gammaln((nu+D)/2) - gammaln(nu/2))
    

    【讨论】:

      【解决方案2】:

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

      【讨论】:

      • 你的意思是sum1 = sum1*(nu/2 + i-1); 甚至对D 也是正确的(但我们甚至不知道D 是一个整数),但@Ray 有正确的方法。跨度>
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-09-02
      • 2022-11-17
      • 2022-12-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多