hstatistics-0.1.0.1: lib/Numeric/GSL/distribution-aux.c
#include <gsl/gsl_rng.h>
#include <gsl/gsl_randist.h>
#include <gsl/gsl_cdf.h>
int random1(int s, int type, double par, double* r)
{
const gsl_rng_type * T;
gsl_rng * rng;
gsl_rng_env_setup();
T = gsl_rng_default;
rng = gsl_rng_alloc(T);
gsl_rng_set(rng,s);
switch(type) {
case 0: { (*r) = gsl_ran_gaussian(rng,par); break; }
case 1: { (*r) = gsl_ran_exponential(rng,par); break; }
case 2: { (*r) = gsl_ran_laplace(rng,par); break; }
case 3: { (*r) = gsl_ran_cauchy(rng,par); break; }
case 4: { (*r) = gsl_ran_rayleigh(rng,par); break; }
case 5: { (*r) = gsl_ran_chisq(rng,par); break; }
case 6: { (*r) = gsl_ran_tdist(rng,par); break; }
case 7: { (*r) = gsl_ran_logistic(rng,par); break; }
}
gsl_rng_free(rng);
return 0;
}
double random1_pdf(int type, double x, double par)
{
switch (type) {
case 0: return gsl_ran_gaussian_pdf(x,par);
case 1: return gsl_ran_exponential_pdf(x,par);
case 2: return gsl_ran_laplace_pdf(x,par);
case 3: return gsl_ran_cauchy_pdf(x,par);
case 4: return gsl_ran_rayleigh_pdf(x,par);
case 5: return gsl_ran_chisq_pdf(x,par);
case 6: return gsl_ran_tdist_pdf(x,par);
case 7: return gsl_ran_logistic_pdf(x,par);
}
}
double random1_cdf_lower(int type, double x, double par)
{
switch (type) {
case 0: return gsl_cdf_gaussian_P(x,par);
case 1: return gsl_cdf_exponential_P(x,par);
case 2: return gsl_cdf_laplace_P(x,par);
case 3: return gsl_cdf_cauchy_P(x,par);
case 4: return gsl_cdf_rayleigh_P(x,par);
case 5: return gsl_cdf_chisq_P(x,par);
case 6: return gsl_cdf_tdist_P(x,par);
case 7: return gsl_cdf_logistic_P(x,par);
}
}
double random1_cdf_upper(int type, double x, double par)
{
switch (type) {
case 0: return gsl_cdf_gaussian_Q(x,par);
case 1: return gsl_cdf_exponential_Q(x,par);
case 2: return gsl_cdf_laplace_Q(x,par);
case 3: return gsl_cdf_cauchy_Q(x,par);
case 4: return gsl_cdf_rayleigh_Q(x,par);
case 5: return gsl_cdf_chisq_Q(x,par);
case 6: return gsl_cdf_tdist_Q(x,par);
case 7: return gsl_cdf_logistic_Q(x,par);
}
}
double random1_cdf_lower_inv(int type, double X, double par)
{
switch (type) {
case 0: return gsl_cdf_gaussian_Pinv(X,par);
case 1: return gsl_cdf_exponential_Pinv(X,par);
case 2: return gsl_cdf_laplace_Pinv(X,par);
case 3: return gsl_cdf_cauchy_Pinv(X,par);
case 4: return gsl_cdf_rayleigh_Pinv(X,par);
case 5: return gsl_cdf_chisq_Pinv(X,par);
case 6: return gsl_cdf_tdist_Pinv(X,par);
case 7: return gsl_cdf_logistic_Pinv(X,par);
}
}
double random1_cdf_upper_inv(int type, double X, double par)
{
switch (type) {
case 0: return gsl_cdf_gaussian_Qinv(X,par);
case 1: return gsl_cdf_exponential_Qinv(X,par);
case 2: return gsl_cdf_laplace_Qinv(X,par);
case 3: return gsl_cdf_cauchy_Qinv(X,par);
case 4: return gsl_cdf_rayleigh_Qinv(X,par);
case 5: return gsl_cdf_chisq_Qinv(X,par);
case 6: return gsl_cdf_tdist_Qinv(X,par);
case 7: return gsl_cdf_logistic_Qinv(X,par);
}
}
double random1_dist(int df, int type, double x, double par)
{
switch(df) {
case 0: return random1_pdf(type,x,par);
case 1: return random1_cdf_lower(type,x,par);
case 2: return random1_cdf_upper(type,x,par);
case 3: return random1_cdf_lower_inv(type,x,par);
case 4: return random1_cdf_upper_inv(type,x,par);
}
}
//////////////////////////////////////////////////////////////////////
int random2(int s, int type, double par1, double par2, double* r)
{
const gsl_rng_type * T;
gsl_rng * rng;
gsl_rng_env_setup();
T = gsl_rng_default;
rng = gsl_rng_alloc(T);
gsl_rng_set(rng,s);
switch(type) {
case 0: { (*r) = gsl_ran_gaussian_tail(rng,par1,par2); break; }
case 1: { (*r) = gsl_ran_exppow(rng,par1,par2); break; }
case 2: { (*r) = gsl_ran_rayleigh_tail(rng,par1,par2); break; }
case 3: { (*r) = gsl_ran_levy(rng,par1,par2); break; }
case 4: { (*r) = gsl_ran_gamma(rng,par1,par2); break; }
case 5: { (*r) = gsl_ran_flat(rng,par1,par2); break; }
case 6: { (*r) = gsl_ran_lognormal(rng,par1,par2); break; }
case 7: { (*r) = gsl_ran_fdist(rng,par1,par2); break; }
case 8: { (*r) = gsl_ran_beta(rng,par1,par2); break; }
case 9: { (*r) = gsl_ran_pareto(rng,par1,par2); break; }
case 10: { (*r) = gsl_ran_weibull(rng,par1,par2); break; }
case 11: { (*r) = gsl_ran_gumbel1(rng,par1,par2); break; }
case 12: { (*r) = gsl_ran_gumbel2(rng,par1,par2); break; }
}
gsl_rng_free(rng);
return 0;
}
double random2_pdf(int type, double x, double par1, double par2)
{
switch (type) {
case 0: return gsl_ran_gaussian_tail_pdf(x,par1,par2);
case 1: return gsl_ran_exppow_pdf(x,par1,par2);
case 2: return gsl_ran_rayleigh_tail_pdf(x,par1,par2);
case 4: return gsl_ran_gamma_pdf(x,par1,par2);
case 5: return gsl_ran_flat_pdf(x,par1,par2);
case 6: return gsl_ran_lognormal_pdf(x,par1,par2);
case 7: return gsl_ran_fdist_pdf(x,par1,par2);
case 8: return gsl_ran_beta_pdf(x,par1,par2);
case 9: return gsl_ran_pareto_pdf(x,par1,par2);
case 10: return gsl_ran_weibull_pdf(x,par1,par2);
case 11: return gsl_ran_gumbel1_pdf(x,par1,par2);
case 12: return gsl_ran_gumbel2_pdf(x,par1,par2);
}
}
double random2_cdf_lower(int type, double x, double par1, double par2)
{
switch (type) {
case 1: return gsl_cdf_exppow_P(x,par1,par2);
case 4: return gsl_cdf_gamma_P(x,par1,par2);
case 5: return gsl_cdf_flat_P(x,par1,par2);
case 6: return gsl_cdf_lognormal_P(x,par1,par2);
case 7: return gsl_cdf_fdist_P(x,par1,par2);
case 8: return gsl_cdf_beta_P(x,par1,par2);
case 9: return gsl_cdf_pareto_P(x,par1,par2);
case 10: return gsl_cdf_weibull_P(x,par1,par2);
case 11: return gsl_cdf_gumbel1_P(x,par1,par2);
case 12: return gsl_cdf_gumbel2_P(x,par1,par2);
}
}
double random2_cdf_upper(int type, double x, double par1, double par2)
{
switch (type) {
case 1: return gsl_cdf_exppow_Q(x,par1,par2);
case 4: return gsl_cdf_gamma_Q(x,par1,par2);
case 5: return gsl_cdf_flat_Q(x,par1,par2);
case 6: return gsl_cdf_lognormal_Q(x,par1,par2);
case 7: return gsl_cdf_fdist_Q(x,par1,par2);
case 8: return gsl_cdf_beta_Q(x,par1,par2);
case 9: return gsl_cdf_pareto_Q(x,par1,par2);
case 10: return gsl_cdf_weibull_Q(x,par1,par2);
case 11: return gsl_cdf_gumbel1_Q(x,par1,par2);
case 12: return gsl_cdf_gumbel2_Q(x,par1,par2);
}
}
double random2_cdf_lower_inv(int type, double X, double par1, double par2)
{
switch (type) {
case 4: return gsl_cdf_gamma_Pinv(X,par1,par2);
case 5: return gsl_cdf_flat_Pinv(X,par1,par2);
case 6: return gsl_cdf_lognormal_Pinv(X,par1,par2);
case 7: return gsl_cdf_fdist_Pinv(X,par1,par2);
case 8: return gsl_cdf_beta_Pinv(X,par1,par2);
case 9: return gsl_cdf_pareto_Pinv(X,par1,par2);
case 10: return gsl_cdf_weibull_Pinv(X,par1,par2);
case 11: return gsl_cdf_gumbel1_Pinv(X,par1,par2);
case 12: return gsl_cdf_gumbel2_Pinv(X,par1,par2);
}
}
double random2_cdf_upper_inv(int type, double X, double par1, double par2)
{
switch (type) {
case 4: return gsl_cdf_gamma_Qinv(X,par1,par2);
case 5: return gsl_cdf_flat_Qinv(X,par1,par2);
case 6: return gsl_cdf_lognormal_Qinv(X,par1,par2);
case 7: return gsl_cdf_fdist_Qinv(X,par1,par2);
case 8: return gsl_cdf_beta_Qinv(X,par1,par2);
case 9: return gsl_cdf_pareto_Qinv(X,par1,par2);
case 10: return gsl_cdf_weibull_Qinv(X,par1,par2);
case 11: return gsl_cdf_gumbel1_Qinv(X,par1,par2);
case 12: return gsl_cdf_gumbel2_Qinv(X,par1,par2);
}
}
double random2_dist(int df, int type, double x, double par1, double par2)
{
switch(df) {
case 0: return random2_pdf(type,x,par1,par2);
case 1: return random2_cdf_lower(type,x,par1,par2);
case 2: return random2_cdf_upper(type,x,par1,par2);
case 3: return random2_cdf_lower_inv(type,x,par1,par2);
case 4: return random2_cdf_upper_inv(type,x,par1,par2);
}
}
//////////////////////////////////////////////////////////////////////
int random3(int s, int type, double par1, double par2, double par3, double* r)
{
const gsl_rng_type * T;
gsl_rng * rng;
gsl_rng_env_setup();
T = gsl_rng_default;
rng = gsl_rng_alloc(T);
gsl_rng_set(rng,s);
switch(type) {
case 0: { (*r) = gsl_ran_levy_skew(rng,par1,par2,par3); break; }
}
gsl_rng_free(rng);
return 0;
}
double random3_pdf(int type, double x, double par1, double par2, double par3)
{
switch (type) {
default : return 0;
}
}
double random3_cdf_lower(int type, double x, double par1, double par2, double par3)
{
switch (type) {
default : return 0;
}
}
double random3_cdf_upper(int type, double x, double par1, double par2, double par3)
{
switch (type) {
default : return 0;
}
}
double random3_cdf_lower_inv(int type, double X, double par1, double par2, double par3)
{
switch (type) {
default : return 0;
}
}
double random3_cdf_upper_inv(int type, double X, double par1, double par2, double par3)
{
switch (type) {
default : return 0;
}
}
double random3_dist(int df, int type, double x, double par1, double par2, double par3)
{
switch(df) {
case 0: return random3_pdf(type,x,par1,par2,par3);
case 1: return random3_cdf_lower(type,x,par1,par2,par3);
case 2: return random3_cdf_upper(type,x,par1,par2,par3);
case 3: return random3_cdf_lower_inv(type,x,par1,par2,par3);
case 4: return random3_cdf_upper_inv(type,x,par1,par2,par3);
}
}
//////////////////////////////////////////////////////////////////////
int random_biv(int s, int type, double par1, double par2, double par3, double* r1, double* r2)
{
const gsl_rng_type * T;
gsl_rng * rng;
gsl_rng_env_setup();
T = gsl_rng_default;
rng = gsl_rng_alloc(T);
gsl_rng_set(rng,s);
switch(type) {
case 0: { gsl_ran_bivariate_gaussian(rng,par1,par2,par3,r1,r2); break; }
}
gsl_rng_free(rng);
return 0;
}
double random_biv_pdf(int type, double x, double y, double par1, double par2, double par3)
{
switch (type) {
case 0: return gsl_ran_bivariate_gaussian_pdf(x,y,par1,par2,par3);
}
}
double random_biv_cdf_lower(int type, double x, double y, double par1, double par2, double par3)
{
switch (type) {
default : return 0;
}
}
double random_biv_cdf_upper(int type, double x, double y, double par1, double par2, double par3)
{
switch (type) {
default : return 0;
}
}
double random_biv_cdf_lower_inv(int type, double x, double y, double par1, double par2, double par3)
{
switch (type) {
default : return 0;
}
}
double random_biv_cdf_upper_inv(int type, double x, double y, double par1, double par2, double par3)
{
switch (type) {
default : return 0;
}
}
double random_biv_dist(int df, int type, double x, double y, double par1, double par2, double par3)
{
switch(df) {
case 0: return random_biv_pdf(type,x,y,par1,par2,par3);
case 1: return random_biv_cdf_lower(type,x,y,par1,par2,par3);
case 2: return random_biv_cdf_upper(type,x,y,par1,par2,par3);
case 3: return random_biv_cdf_lower_inv(type,x,y,par1,par2,par3);
case 4: return random_biv_cdf_upper_inv(type,x,y,par1,par2,par3);
}
}
//////////////////////////////////////////////////////////////////////
int random_mp(int s, int type, int ps, const double* p, int rs, double* r)
{
if (ps != rs) return 2000; // BAD_SIZE
const gsl_rng_type * T;
gsl_rng * rng;
gsl_rng_env_setup();
T = gsl_rng_default;
rng = gsl_rng_alloc(T);
gsl_rng_set(rng,s);
switch(type) {
case 0: { gsl_ran_dirichlet(rng,ps,p,r); break; }
}
gsl_rng_free(rng);
return 0;
}
double random_mp_pdf(int type, int ps, const double* p, int qs, const double* q)
{
switch (type) {
case 0: return gsl_ran_dirichlet_pdf(ps,p,q);
}
return 0;
}
double random_mp_cdf_lower(int type, int ps, const double* p, int qs, const double* q)
{
switch (type) {
default : return 0;
}
}
double random_mp_cdf_upper(int type, int ps, const double* p, int qs, const double* q)
{
switch (type) {
default : return 0;
}
}
double random_mp_cdf_lower_inv(int type, int ps, const double* p, int qs, const double* q)
{
switch (type) {
default : return 0;
}
}
double random_mp_cdf_upper_inv(int type, int ps, const double* p, int qs, const double* q)
{
switch (type) {
default : return 0;
}
}
int random_mp_dist(int df, int type, double* r, int ps, const double* p, int qs, const double* q)
{
switch(df) {
case 0: { (*r) = random_mp_pdf(type,ps,p,qs,q); break; }
case 1: { (*r) = random_mp_cdf_lower(type,ps,p,qs,q); break; }
case 2: { (*r) = random_mp_cdf_upper(type,ps,p,qs,q); break; }
case 3: { (*r) = random_mp_cdf_lower_inv(type,ps,p,qs,q); break; }
case 4: { (*r) = random_mp_cdf_upper_inv(type,ps,p,qs,q); break; }
}
return 0;
}
//////////////////////////////////////////////////////////////////////
int random_vector(int s, int rs, double* r)
{
const gsl_rng_type * T;
gsl_rng * rng;
gsl_rng_env_setup();
T = gsl_rng_default;
rng = gsl_rng_alloc(T);
gsl_rng_set(rng,s);
gsl_ran_dir_nd(rng,rs,r);
gsl_rng_free(rng);
return 0;
}
//////////////////////////////////////////////////////////////////////
int discrete1(int s, int type, double par, unsigned int* r)
{
const gsl_rng_type * T;
gsl_rng * rng;
gsl_rng_env_setup();
T = gsl_rng_default;
rng = gsl_rng_alloc(T);
gsl_rng_set(rng,s);
switch(type) {
case 0: { (*r) = gsl_ran_poisson(rng,par); break; }
case 1: { (*r) = gsl_ran_bernoulli(rng,par); break; }
case 2: { (*r) = gsl_ran_laplace(rng,par); break; }
case 3: { (*r) = gsl_ran_logarithmic(rng,par); break; }
}
gsl_rng_free(rng);
return 0;
}
double discrete1_pdf(int type, unsigned int x, double par)
{
switch (type) {
case 0: return gsl_ran_poisson_pdf(x,par);
case 1: return gsl_ran_bernoulli_pdf(x,par);
case 2: return gsl_ran_geometric_pdf(x,par);
case 3: return gsl_ran_logarithmic_pdf(x,par);
}
}
double discrete1_cdf_lower(int type, unsigned int x, double par)
{
switch (type) {
case 0: return gsl_cdf_poisson_P(x,par);
case 2: return gsl_cdf_geometric_P(x,par);
}
}
double discrete1_cdf_upper(int type, unsigned int x, double par)
{
switch (type) {
case 0: return gsl_cdf_poisson_Q(x,par);
case 2: return gsl_cdf_geometric_Q(x,par);
}
}
double discrete1_cdf_lower_inv(int type, unsigned int X, double par)
{
switch (type) {
default : return 0;
}
}
double discrete1_cdf_upper_inv(int type, unsigned int X, double par)
{
switch (type) {
default : return 0;
}
}
double discrete1_dist(int df, int type, unsigned int x, double par)
{
switch(df) {
case 0: return discrete1_pdf(type,x,par);
case 1: return discrete1_cdf_lower(type,x,par);
case 2: return discrete1_cdf_upper(type,x,par);
case 3: return discrete1_cdf_lower_inv(type,x,par);
case 4: return discrete1_cdf_upper_inv(type,x,par);
}
}
//////////////////////////////////////////////////////////////////////
int discrete2(int s, int type, double par1, unsigned int par2, unsigned int* r)
{
const gsl_rng_type * T;
gsl_rng * rng;
gsl_rng_env_setup();
T = gsl_rng_default;
rng = gsl_rng_alloc(T);
gsl_rng_set(rng,s);
switch(type) {
case 0: { (*r) = gsl_ran_binomial(rng,par1,par2); break; }
case 1: { (*r) = gsl_ran_negative_binomial(rng,par1,par2*1.0); break; }
case 2: { (*r) = gsl_ran_pascal(rng,par1,par2); break; }
}
gsl_rng_free(rng);
return 0;
}
double discrete2_pdf(int type, unsigned int x, double par1, unsigned int par2)
{
switch (type) {
case 0: return gsl_ran_binomial_pdf(x,par1,par2);
case 1: return gsl_ran_negative_binomial_pdf(x,par1,par2*1.0);
case 2: return gsl_ran_pascal_pdf(x,par1,par2);
}
}
double discrete2_cdf_lower(int type, unsigned int x, double par1, unsigned int par2)
{
switch (type) {
case 0: return gsl_cdf_binomial_P(x,par1,par2);
case 1: return gsl_cdf_negative_binomial_P(x,par1,par2*1.0);
case 2: return gsl_cdf_pascal_P(x,par1,par2*1.0);
}
}
double discrete2_cdf_upper(int type, unsigned int x, double par1, unsigned int par2)
{
switch (type) {
case 0: return gsl_cdf_binomial_Q(x,par1,par2);
case 1: return gsl_cdf_negative_binomial_Q(x,par1,par2*1.0);
case 2: return gsl_cdf_pascal_Q(x,par1,par2*1.0);
}
}
double discrete2_cdf_lower_inv(int type, unsigned int X, double par1, unsigned int par2)
{
switch (type) {
default : return 0;
}
}
double discrete2_cdf_upper_inv(int type, unsigned int X, double par1, unsigned int par2)
{
switch (type) {
default : return 0;
}
}
double discrete2_dist(int df, int type, unsigned int x, double par1, unsigned int par2)
{
switch(df) {
case 0: return discrete2_pdf(type,x,par1,par2);
case 1: return discrete2_cdf_lower(type,x,par1,par2);
case 2: return discrete2_cdf_upper(type,x,par1,par2);
case 3: return discrete2_cdf_lower_inv(type,x,par1,par2);
case 4: return discrete2_cdf_upper_inv(type,x,par1,par2);
}
}
//////////////////////////////////////////////////////////////////////
int discrete3(int s, int type, unsigned int par1, unsigned int par2, unsigned int par3, double* r)
{
const gsl_rng_type * T;
gsl_rng * rng;
gsl_rng_env_setup();
T = gsl_rng_default;
rng = gsl_rng_alloc(T);
gsl_rng_set(rng,s);
switch(type) {
case 0: { (*r) = gsl_ran_hypergeometric(rng,par1,par2,par3); break; }
}
gsl_rng_free(rng);
return 0;
}
double discrete3_pdf(int type, double x, unsigned int par1, unsigned int par2, unsigned int par3)
{
switch (type) {
case 0: return gsl_ran_hypergeometric_pdf(x,par1,par2,par3);
}
}
double discrete3_cdf_lower(int type, double x, unsigned int par1, unsigned int par2, unsigned int par3)
{
switch (type) {
case 0: return gsl_cdf_hypergeometric_P(x,par1,par2,par3);
}
}
double discrete3_cdf_upper(int type, double x, unsigned int par1, unsigned int par2, unsigned int par3)
{
switch (type) {
case 0: return gsl_cdf_hypergeometric_Q(x,par1,par2,par3);
}
}
double discrete3_cdf_lower_inv(int type, double X, unsigned int par1, unsigned int par2, unsigned int par3)
{
switch (type) {
default : return 0;
}
}
double discrete3_cdf_upper_inv(int type, double X, unsigned int par1, unsigned int par2, unsigned int par3)
{
switch (type) {
default : return 0;
}
}
double discrete3_dist(int df, int type, double x, unsigned int par1, unsigned int par2, unsigned int par3)
{
switch(df) {
case 0: return discrete3_pdf(type,x,par1,par2,par3);
case 1: return discrete3_cdf_lower(type,x,par1,par2,par3);
case 2: return discrete3_cdf_upper(type,x,par1,par2,par3);
case 3: return discrete3_cdf_lower_inv(type,x,par1,par2,par3);
case 4: return discrete3_cdf_upper_inv(type,x,par1,par2,par3);
}
}
//////////////////////////////////////////////////////////////////////
int discrete_mp(int s, int type, unsigned int n, int ps, const double* p, int rs, unsigned int* r)
{
if (ps != rs) return 2000; // BAD_SIZE
const gsl_rng_type * T;
gsl_rng * rng;
gsl_rng_env_setup();
T = gsl_rng_default;
rng = gsl_rng_alloc(T);
gsl_rng_set(rng,s);
switch(type) {
case 0: { gsl_ran_multinomial(rng,ps,n,p,r); break; }
}
gsl_rng_free(rng);
return 0;
}
double discrete_mp_pdf(int type, int ps, const double* p, int qs, const unsigned int* q)
{
switch (type) {
case 0: return gsl_ran_multinomial_pdf(ps,p,q);
}
return 0;
}
double discrete_mp_cdf_lower(int type, int ps, const double* p, int qs, const unsigned int* q)
{
switch (type) {
default : return 0;
}
}
double discrete_mp_cdf_upper(int type, int ps, const double* p, int qs, const unsigned int* q)
{
switch (type) {
default : return 0;
}
}
double discrete_mp_cdf_lower_inv(int type, int ps, const double* p, int qs, const unsigned int* q)
{
switch (type) {
default : return 0;
}
}
double discrete_mp_cdf_upper_inv(int type, int ps, const double* p, int qs, const unsigned int* q)
{
switch (type) {
default : return 0;
}
}
int discrete_mp_dist(int df, int type, double* r, int ps, const double* p, int qs, const unsigned int* q)
{
switch(df) {
case 0: { (*r) = discrete_mp_pdf(type,ps,p,qs,q); break; }
case 1: { (*r) = discrete_mp_cdf_lower(type,ps,p,qs,q); break; }
case 2: { (*r) = discrete_mp_cdf_upper(type,ps,p,qs,q); break; }
case 3: { (*r) = discrete_mp_cdf_lower_inv(type,ps,p,qs,q); break; }
case 4: { (*r) = discrete_mp_cdf_upper_inv(type,ps,p,qs,q); break; }
}
return 0;
}
//////////////////////////////////////////////////////////////////////