Ejemplo n.º 1
0
double opt_alpha(double ss, double &alpha_sum, int D, int K)
{
    double a, log_a, init_a = 100, old_a = 0;
    double f = 0, df, d2f, f_old = 0;
    int iter = 0;

    log_a = log(init_a);
    do
    {
        iter++;
		f_old = f;
        a = exp(log_a);
		alpha_sum += a - old_a;
		old_a = a;
        if (/*isnan(a)*/a>1e300 || a<1e-300)
        {
            init_a = init_a * 10;
            printf("warning : alpha is nan; new init = %5.5f\n", init_a);
            a = init_a;
            log_a = log(a);
        }
        f = alhood(a, alpha_sum, ss, D, K);
        df = d_alhood(a, alpha_sum, ss, D, K);
        d2f = d2_alhood(a, alpha_sum, D, K);
        log_a = log_a - df/(d2f * a + df);
        //printf("alpha maximization : %5.5f   %5.5f\n", f, df);
    }
    while ((fabs(df) > NEWTON_THRESH) && (iter < MAX_ALPHA_ITER));
    return(exp(log_a));
}
Ejemplo n.º 2
0
double opt_alpha(double ss, int D, int K)
{
    double a, log_a, init_a = 100;
    double df, d2f;
    int iter = 0;

    log_a = log(init_a);
    do
    {
        iter++;
        a = exp(log_a);
        if (isnan(a))
        {
            init_a = init_a * 10;
            Rprintf("warning : alpha is nan; new init = %5.5f\n", init_a);
            a = init_a;
            log_a = log(a);
        }
        df = d_alhood(a, ss, D, K);
        d2f = d2_alhood(a, D, K);
        log_a = log_a - df/(d2f * a + df);
    }
    while ((fabs(df) > NEWTON_THRESH) && (iter < MAX_ALPHA_ITER));
    return(exp(log_a));
}