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