#include <gsl/gsl_linalg.h>
// TODO: don't recompute indexes ai(...) and mi(...) when possible
-void EMGLLH_core(
+void EMGLLF_core(
// IN parameters
const Real* phiInit, // parametre initial de moyenne renormalisé
const Real* rhoInit, // parametre initial de variance renormalisé
Real* Rho = (Real*)malloc(m*m*k*sizeof(Real));
Real* Pi = (Real*)malloc(k*sizeof(Real));
- for (int ite=0; ite<maxi; ite++)
+ for (int ite=1; ite<=maxi; ite++)
{
copyArray(phi, Phi, p*m*k);
copyArray(rho, Rho, m*m*k);
/////////////
// Precompute det(rho[,,r]) for r in 1...k
+ int signum;
for (int r=0; r<k; r++)
{
for (int u=0; u<m; u++)
detRho[r] = gsl_linalg_LU_det(matrix, signum);
}
- int signum;
Real sumLogLLH = 0.;
for (int i=0; i<n; i++)
{
Real last_llh = *llh;
//llh = -sumLogLLH/n + lambda*sumPen
*llh = -invN * sumLogLLH + lambda * sumPen;
- Real dist = ite==0 ? *llh : (*llh - last_llh) / (1. + fabs(*llh));
+ Real dist = ite==1 ? *llh : (*llh - last_llh) / (1. + fabs(*llh));
//Dist1 = max( abs(phi-Phi) / (1+abs(phi)) )
Real Dist1 = 0.;
free(Pi);
free(Gram2);
free(ps2);
+ free(detRho);
gsl_matrix_free(matrix);
gsl_permutation_free(permutation);
free(XiPhiR);