Я пытаюсь вычислить нормальное логарифмическое правдоподобие, который определяется по формуле:Численно стабильный способ вычислить нормальное логарифмическое правдоподобие
L = l1+l2+l3+...+ln,
где
lk = log(1/(sqrt(2*PI)*sigma_k))-0.5*e_k*e_k
Сигмы вокруг 0.2
и e_k
нормально распределены со средним значением 0 и единичной дисперсией, поэтому большинство из них находятся между -2 и 2;
Я попытался следующий код Java (sigma_k упоминалось выше = sigmas.get (к) * Math.sqrt (дт)):
private double new1(List<Double> residuals, List<Double> sigmas, double dt) {
double a = 0;
for(int i=0; i<sigmas.size(); i++) {
a += Math.log(1.0/(Math.sqrt(2*Math.PI*dt)*sigmas.get(i)));
}
double b = 0;
for(int i=0; i<residuals.size(); i++) {
b += residuals.get(i)*residuals.get(i);
}
return a-0.5*b;
}
но теоретический максимум ниже максимума меня, делая численная оптимизация, поэтому у меня есть некоторые подозрения, что мой метод субоптимален.