-->

计算马尔可夫链的概率与值过大,exponentiate(Calculating Markov cha

2019-09-21 07:55发布

我用式EXP(X)作为用于马尔可夫链的速率。 所以选择一种优于另一种链路的比例为EXP(X1)/ EXP(X2)。 我的问题是,有时X是非常大的,因此EXP(X)将超过范围double

可替换地:给定X [I]的阵列,一些X [I]如此之大,EXP(X [1])溢出的范围内double ,计算,对于每个i,实验值(X [1])/ S,其中S是所有exp的总和(X [1])。

Answer 1:

这个伪代码应工作:

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]将是如此小(具有大的负值),他们的实验值(X [1])将在双精度评价为零。 然而,这些项目的实际概率是如此微不足道,有自己的实际概率和零之间没有实际区别,所以它是好的,是EXP(X [1])下溢到零。

除了下溢和舍入误差,概率应该是减法改造后是相同的,这是因为:

  • EXP(XM)= EXP(X)/ EXP(M)。
  • 这种划分影响分子和以同样的方式的概率的分母,因此比保持不变。


文章来源: Calculating Markov chain probabilities with values too large to exponentiate