pf_pdf.h
00001
00002
00003
00004
00005
00006
00007
00008
00009 #ifndef PF_PDF_H
00010 #define PF_PDF_H
00011
00012 #include "pf_vector.h"
00013
00014 #include <gsl/gsl_rng.h>
00015 #include <gsl/gsl_randist.h>
00016
00017 #ifdef __cplusplus
00018 extern "C" {
00019 #endif
00020
00021
00022
00023
00024
00025
00026 typedef struct
00027 {
00028
00029 pf_vector_t x;
00030 pf_matrix_t cx;
00031 pf_matrix_t cxi;
00032 double cxdet;
00033
00034
00035 pf_matrix_t cr;
00036 pf_vector_t cd;
00037
00038
00039 gsl_rng *rng;
00040
00041 } pf_pdf_gaussian_t;
00042
00043
00044
00045 pf_pdf_gaussian_t *pf_pdf_gaussian_alloc(pf_vector_t x, pf_matrix_t cx);
00046
00047
00048 void pf_pdf_gaussian_free(pf_pdf_gaussian_t *pdf);
00049
00050
00051 double pf_pdf_gaussian_value(pf_pdf_gaussian_t *pdf, pf_vector_t z);
00052
00053
00054 pf_vector_t pf_pdf_gaussian_sample(pf_pdf_gaussian_t *pdf);
00055
00056
00057
00058
00059
00060
00061
00062 typedef struct
00063 {
00064
00065 int prob_count;
00066 double *probs;
00067
00068
00069 gsl_rng *rng;
00070
00071
00072 gsl_ran_discrete_t *ran;
00073
00074 } pf_pdf_discrete_t;
00075
00076
00077
00078 pf_pdf_discrete_t *pf_pdf_discrete_alloc(int count, double *probs);
00079
00080
00081 void pf_pdf_discrete_free(pf_pdf_discrete_t *pdf);
00082
00083
00084 double pf_pdf_discrete_value(pf_pdf_discrete_t *pdf, int i);
00085
00086
00087 int pf_pdf_discrete_sample(pf_pdf_discrete_t *pdf);
00088
00089 #ifdef __cplusplus
00090 }
00091 #endif
00092
00093 #endif