log sum exp
- メモ
- 指数関数を使うと値が小さくなりすぎるものの足し合わせの際に、複数の値の相対値がそれほど小さくならないことを利用して、計算の精度を担保する方法
f <- function(a,b){ #log(exp(a)+exp(b)) b + log(exp(a-b)+1) } g <- function(as){ if(length(as)==2){ return(f(as[1],as[2])) }else{ tmpa <- as[1] tmpb <- as[-1] return(f(tmpa,g(tmpb))) } } n <- 100 as <- runif(n) as <- (-1) * runif(n) * 10^2 as[1] <- as[1] * 10^4 out1 <- g(as) out2 <- log(sum(exp(as))) out1 out2 exp(out1) exp(out2)