计算马尔可夫链概率,其值太大而无法求指数



我使用公式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]) 的总和。

这个伪代码应该可以工作:

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)。
  • 这种划分以相同的方式影响概率的分子和分母,因此比率保持不变。

最新更新