void
vdp_mk_log_lambda(double *Mu_mu, double *S2_mu, double *Mu_bar, double *Mu_tilde, 
		  double *Alpha_ksi, double *Beta_ksi, 
		  double *Ksi_alpha, double *Ksi_beta, 
		  double *post_gamma, double *log_lambda, double *prior_alpha,
		  double *U_p, SEXP *U_hat,
		  long datalen, int dim1, int dim2, double *data1, double *data2, 
		  double *Ns, int ncentroids, 
		  double implicit_noisevar) {
  register long i, j, t;
  register int k;
  double  *U_hat_j;
  SEXP U_hat_j_SEXP;
  double       **W, **Temp, **S2_x,**Ksi_log,***U_hat_table;
  int          **data2_int;

  allocate_memoryB(datalen, ncentroids, dim1,dim2, &S2_x, &Ksi_log, &Temp,
		  &U_hat_table,&data2_int,Ns );

  for (j=0;j<dim2;j++){
    for(t=0;t<datalen;t++)
      data2_int[j][t]=((int)(data2[j*datalen+t]))-1;

    U_hat_j_SEXP = VECTOR_ELT(*U_hat, (int)j);
    U_hat_j=NUMERIC_POINTER(U_hat_j_SEXP);

    for(i=0;i<ncentroids;i++)
      for(k=0;k<Ns[j];k++)
        U_hat_table[j][i][k]=U_hat_j[k*ncentroids+i];
  }

  
  if (dim1) 
    compute_variance(ncentroids, dim1, Ksi_alpha, Ksi_beta, S2_x, Ksi_log);

  log_p_of_z_given_other_z_c(datalen, ncentroids, post_gamma, log_lambda);

  compute_tempmat(datalen,dim1,dim2,ncentroids,Temp,data1,data2_int,
		  Mu_bar,Mu_tilde,S2_x,Ksi_log,U_hat_table,Ns,
		  implicit_noisevar, log_lambda);
    
  fix_lambda(ncentroids, datalen, prior_alpha, log_lambda);
    
  free_memoryB(ncentroids, dim1,dim2, &Temp, &W, &S2_x, &Ksi_log, &U_hat_table, &data2_int);
  return;
}
示例#2
0
 T compute_std_dev() const
 {
     return sqrt(compute_variance());
 }
示例#3
0
double compute_ecart_type (double moyenne, double sq_sum, int n)
{
    double variance = compute_variance (sq_sum, moyenne, n);
    return lookup_table_get_safe (sqrt_table, variance);
}
示例#4
0
int update_operations_summary (mmdat_t *plong_hist, opsum_t *summary) 
{
    //printf ("------------Update summary\n");
    int rc = -1;
    int count = 0;
    int i, j;
    double temp_sum = 0, humd_sum = 0, pres_sum = 0, rho_sum = 0;
    double temp_avg = 0, humd_avg = 0, pres_avg = 0, rho_avg = 0;
    double cur_sum = 0, ratio_sum;
    
    double **ratios = (double **)malloc (sizeof(double*) * CMP_END);
    for (i = 0; i < CMP_END; i++) {
        ratios[i] = (double *)malloc (sizeof(double) * plong_hist->size);
    }
    double **currents = (double **)malloc (sizeof(double*) * CMP_END);
    for (i = 0; i < CMP_END; i++) {
        currents[i] = (double *)malloc (sizeof(double) * plong_hist->size);
    }
    double *rho_collect = (double *) malloc (sizeof (double) * plong_hist->size);
    
 
    llist_t *head = plong_hist->head;   
    while (head) {
        for (i = 0; i < CMP_END; i++) {
            ratios[i][count] = head->data->rho_cur_ratio[i];
            currents[i][count] = head->data->avg_current[i];
        }
        temp_sum += head->data->avg_temperature;
        humd_sum += head->data->avg_humidity;
        pres_sum += head->data->avg_pressure;
        rho_sum += head->data->rho;
        rho_collect[count] = head->data->rho;
        count++;
        head = head->next;
    }

    summary->avg_temp = temp_sum / plong_hist->size;
    summary->avg_humd = humd_sum / plong_hist->size;
    summary->avg_pres = pres_sum / plong_hist->size;
    summary->avg_rho = rho_sum / plong_hist->size;

    for (i = 0; i < CMP_END; i++) {
        compute_variance (ratios[i], plong_hist->size, &summary->variance[i]);
        cur_sum = 0;
        for (j = 0; j < plong_hist->size; j++) {
            cur_sum += currents[i][j];
        }
        summary->avg_current[i] = cur_sum / plong_hist->size;
        ratio_sum = 0;
        for (j = 0; j < plong_hist->size; j++) {
            ratio_sum += ratios[i][j];
        }
        summary->avg_ratio[i] = ratio_sum / plong_hist->size;
    }
    compute_variance (rho_collect, count, &summary->rho_variance);

    for (i = 0; i < CMP_END; i++) {
        free (ratios[i]);
        free (currents[i]);
    }
    free (ratios);
    free (currents);
    free (rho_collect);

    rc = 0;
    return rc;
}