【发布时间】:2014-10-18 04:12:30
【问题描述】:
我想计算 log(exp(A1) + exp(A2))。
下面的公式
log(exp(A1) + exp(A2) ) = log[exp(A1)(1 + exp(A2)/exp(A1))] = A1 + log(1+exp(A2-A1))
在 A1 和 A2 很大并且数值为 exp(A1)=Inf(或 exp(A2)=Inf)时很有用。 (这个公式在这个线程中讨论-> How to calculate log(sum of terms) from its component log-terms)。当A1和A2的角色被替换时,公式为真。
我对这个公式的关注是当 A1 和 A2 非常小时。例如,当 A1 和 A2 是:
A1 <- -40000
A2 <- -45000
那么 log(exp(A1) + exp(A2) ) 的直接计算为:
log(exp(A1) + exp(A2))
[1] -Inf
使用上面的公式给出:
A1 + log(1 + exp(A2-A1))
[1] -40000
这是A1的值。 将上面的公式与 A1 和 A2 的翻转角色相结合,得到:
A2 + log(1 + exp(A1-A2))
[1] Inf
三个值中哪个最接近 log(exp(A1) + exp(A2)) 的真实值?是否有稳健的方法来计算 log(exp(A1) + exp(A2)) 可以在 A1、A2 较小且 A1、A2 较大时使用。
提前谢谢你
【问题讨论】:
标签: math sum precision largenumber natural-logarithm