2016-04-05 12 views
1

Ich arbeite mit linearer Interpolation, wo ich berechnen muss:
p' = \lambda_1*p_1 + \lambda_2*p_2 + \lambda_3*p_3.Vermeidung von Unterlauf durch Arbeiten im Protokollbereich, wie bewerten Sie Summen?

p_1, p_2 und p_3 sind jedoch gemeinsame Wahrscheinlichkeiten und können daher nicht als Float aufgrund von Unterlauf ausgedrückt werden. Ich arbeite also im Log-Bereich und nehme log2(p_1), log2(p_2) und log2(p_3).

Angesichts der Protokolle der Wahrscheinlichkeiten bin ich mir nicht sicher, wie man p' oder berechnet. Ich kann auch log2(p_1* \lambda_1), etc. berechnen, wenn nötig.

+0

Könnte diese Identität helfen? http://stackoverflow.com/a/3975283/864696 –

Antwort

0

Der übliche Ansatz ist es, den größten der Begriffe zu finden, und berechnen Sie die Summe als das mal eine Korrektur. Im einzelnen

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]) + ..) 

im zweiten Term Auswertung all Q [i] -q [j] sind negativ, so Überlauf nicht auftreten kann. Wenn irgendwelche so negativ sind, dass der Unterlauf auftritt, ignoriere sie einfach, weil einer der Terme (exp (q [j] -q [j])) eins sein wird.