2016-04-05 2 views
1

Я работаю с линейной интерполяцией, где мне нужно вычислить:
p' = \lambda_1*p_1 + \lambda_2*p_2 + \lambda_3*p_3., избегая недоработки, работая в пространстве журнала, как вы оцениваете суммы?

Однако p_1, p_2 и p_3 являются совместными вероятностями и поэтому не могут быть выражены как поплавок из-за недостаточного потока. Поэтому я работаю в бревенчатом пространстве, принимая log2(p_1), log2(p_2) и log2(p_3).

Учитывая журналы вероятностей, я не слишком уверен, как рассчитать p' или log2(p'). Я также могу рассчитать log2(p_1* \lambda_1) и т. Д., Если это необходимо.

+0

Могла ли эта идентификация помочь? http://stackoverflow.com/a/3975283/864696 –

ответ

0

Обычный подход заключается в том, чтобы найти самый большой из терминов и вычислить сумму как раз поправку. Более подробно

q[i] = log(lambda[i]) + log(p[i])) i = 1.. 
we want Q = log(exp(q[1]) + exp(q[2]) + ..) 
let the largest q[i] be q[j], then we get 
Q = log((exp(q[1]-q[j]) + exp(q[1]-q[j]) + ..) * exp(q[j])) 
    = q[j] + log(exp(q[1]-q[j]) + exp(q[1]-q[j]) + ..) 

При оценке второго члена, все д [я] -q [J] являются отрицательными, так переполнения не может произойти. Если какой-либо из них настолько отрицателен, что underflow просто игнорирует его, потому что одно из терминов (exp (q [j] -q [j])) будет одним.

Смежные вопросы