计算马尔可夫链概率的值太大而不能取幂

时间:2012-08-17 19:10:40

标签: java estimation double-precision markov-chains exp

我使用公式exp(X)作为马尔可夫链的比率。因此,选择一个链接与另一个链接的比率是exp(X1)/ exp(X2)。我的问题是,有时X非常大,因此exp(X)将超出double的范围。

或者:给定一个X [i]数组,其中一些X [i]如此之大以至于exp(X [i])溢出double的范围,为每个i计算exp(X [ i])/ S,其中S是所有exp(X [i])的总和。

1 个答案:

答案 0 :(得分:3)

这个伪代码应该有效:

Let M = the largest X[i].

For each i:
    Subtract M from X[i].

Let S = the sum of exp(X[i]) for all i.

For each i:
    The probability for this i is exp(X[i]) / S.

如果M很大,则在减法步骤之后,一些X [i]将如此小(具有大的负值),使得它们的exp(X [i])将以双精度计算为零。然而,这些项目的实际概率是如此微小,以至于它们的实际概率和零之间没有实际差异,所以exp(X [i])下溢为零是可以的。

除了下溢和舍入误差之外,减法变换后的概率应该相同,因为:

  • exp(x-M)= exp(x)/ exp(M)。
  • 这种划分以相同的方式影响概率的分子和分母,因此比率保持不变。