1 /* Mixture generalized extreme value distributions. 2 * 3 * SRE, Mon Aug 15 08:33:57 2005 [St. Louis] 4 */ 5 #ifndef eslMIXGEV_INCLUDED 6 #define eslMIXGEV_INCLUDED 7 #include "esl_config.h" 8 #include <stdio.h> 9 #include "esl_random.h" 10 11 typedef struct { 12 double *q; /* mixture coefficients [0..K-1]*/ 13 double *mu; /* location parameters [0..K-1]*/ 14 double *lambda; /* scale parameters [0..K-1]*/ 15 double *alpha; /* shape parameters [0..K-1]*/ 16 double *wrk; /* tmp vector needed for logpdf calc */ 17 int *isgumbel; /* flag:TRUE to constrain k to Gumbel*/ 18 int K; /* # of components */ 19 } ESL_MIXGEV; 20 21 22 23 extern ESL_MIXGEV *esl_mixgev_Create(int K); 24 extern void esl_mixgev_Destroy(ESL_MIXGEV *mg); 25 extern int esl_mixgev_Copy(ESL_MIXGEV *dest, ESL_MIXGEV *src); 26 extern int esl_mixgev_ForceGumbel(ESL_MIXGEV *mg, int which); 27 28 extern double esl_mixgev_pdf (double x, ESL_MIXGEV *mg); 29 extern double esl_mixgev_logpdf (double x, ESL_MIXGEV *mg); 30 extern double esl_mixgev_cdf (double x, ESL_MIXGEV *mg); 31 extern double esl_mixgev_logcdf (double x, ESL_MIXGEV *mg); 32 extern double esl_mixgev_surv (double x, ESL_MIXGEV *mg); 33 extern double esl_mixgev_logsurv(double x, ESL_MIXGEV *mg); 34 extern double esl_mixgev_invcdf (double p, ESL_MIXGEV *mg); 35 36 extern double esl_mixgev_generic_pdf (double x, void *params); 37 extern double esl_mixgev_generic_cdf (double x, void *params); 38 extern double esl_mixgev_generic_surv (double x, void *params); 39 extern double esl_mixgev_generic_invcdf(double p, void *params); 40 41 extern int esl_mixgev_Plot(FILE *fp, ESL_MIXGEV *mg, 42 double (*func)(double x, ESL_MIXGEV *mg), 43 double xmin, double xmax, double xstep); 44 45 extern double esl_mixgev_Sample(ESL_RANDOMNESS *r, ESL_MIXGEV *mg); 46 extern int esl_mixgev_FitGuess(ESL_RANDOMNESS *r, double *x, int n, 47 ESL_MIXGEV *mg); 48 49 extern int esl_mixgev_FitComplete(double *x, int n, ESL_MIXGEV *mg); 50 51 52 #endif /*eslMIXGEV_INCLUDED*/ 53 54