diff --git a/elliptical/dw_elliptical.c b/elliptical/dw_elliptical.c index 6299847ff9b42ff27349a079fa67f712c15e7b81..11cfd663cebeaf86c3170bc703b957a145a7b78c 100644 --- a/elliptical/dw_elliptical.c +++ b/elliptical/dw_elliptical.c @@ -86,6 +86,16 @@ PRECISION RadiusElliptical(PRECISION *draw, TElliptical *elliptical) return sqrt(InnerProduct(elliptical->draw,elliptical->draw,elliptical->quadratic_form)); } +void PrintEllipticalInfo_full(FILE *f_out, TElliptical *elliptical) +{ + PrintEllipticalInfo(f_out,elliptical); + fprintf(f_out,"Variance scale: %lg\n",elliptical->variance_scale); + fprintf(f_out,"Center:\n"); + dw_PrintVector(f_out,elliptical->center,"%lg "); + fprintf(f_out,"Scale:\n"); + dw_PrintMatrix(f_out,elliptical->scale,"%lg "); +} + static PRECISION logdensity_draw(PRECISION *draw, TElliptical *elliptical) { return elliptical->logdensity_radius(RadiusElliptical(draw,elliptical),elliptical); @@ -155,7 +165,7 @@ static PRECISION draw_truncated_gaussian(PRECISION *draw, TElliptical *elliptica static void print_info_truncated_gaussian(FILE *f_out, TElliptical *elliptical) { TElliptical_gaussian *d=(TElliptical_gaussian*)elliptical->data; - if (f_out) fprintf(f_out,"%s\n dim=%d \n lower bound=%lg\n upper bound=%lg\n s^2=%lg\n", + if (f_out) fprintf(f_out,"%s\n dim=%d\n lower bound=%lg\n upper bound=%lg\n s^2=%lg\n", elliptical->type,elliptical->dim,d->lower_bound,d->upper_bound,d->s_square); } @@ -328,7 +338,7 @@ static PRECISION draw_truncated_power(PRECISION *draw, TElliptical *elliptical) static void print_info_truncated_power(FILE *f_out, TElliptical *elliptical) { TElliptical_power *d=(TElliptical_power*)elliptical->data; - if (f_out) fprintf(f_out,"%s\n dim=%d\n lower bound=%lg\n upper bound=%lg\n power=%lg\n", + if (f_out) fprintf(f_out,"%s\n dim=%d\n lower bound=%lg\n upper bound=%lg\n power=%lg\n", elliptical->type,elliptical->dim,d->lower_bound,d->upper_bound,d->power); } @@ -414,7 +424,7 @@ TElliptical* CreateElliptical_TruncatedPower(int dim, TVector center, TMatrix sc static void print_info_power(FILE *f_out, TElliptical *elliptical) { TElliptical_power *d=(TElliptical_power*)elliptical->data; - if (f_out) fprintf(f_out,"%s\n dim=%d\n upper bound=%lg\n power=%lg\n", + if (f_out) fprintf(f_out,"%s\n dim=%d\n upper bound=%lg\n power=%lg\n", elliptical->type,elliptical->dim,d->upper_bound,d->power); } @@ -439,7 +449,7 @@ TElliptical* CreateElliptical_Power(int dim, TVector center, TMatrix scale, PREC static void print_info_uniform(FILE *f_out, TElliptical *elliptical) { TElliptical_power *d=(TElliptical_power*)elliptical->data; - if (f_out) fprintf(f_out,"%s\n dim=%d\n lower bound=%lg\n upper bound=%lg\n", + if (f_out) fprintf(f_out,"%s\n dim=%d\n lower bound=%lg\n upper bound=%lg\n", elliptical->type,elliptical->dim,d->lower_bound,d->upper_bound); } @@ -533,7 +543,7 @@ static PRECISION draw_step(PRECISION *draw, TElliptical *elliptical) static void print_info_step(FILE *f_out, TElliptical *elliptical) { TElliptical_step *d=(TElliptical_step*)(elliptical->data); - if (f_out) fprintf(f_out,"%s\n dim=%d\n lower bound=%lg\n upper bound=%lg\n", + if (f_out) fprintf(f_out,"%s\n dim=%d\n lower bound=%lg\n upper bound=%lg\n", elliptical->type,elliptical->dim,d->t[0],d->t[d->m]); } diff --git a/include/dw_elliptical.h b/include/dw_elliptical.h index 6516953bce24d26d1d7c424292c3e796b94c065c..d6c3b7e035c468f5e2df15700dfa7862bf5b20d9 100644 --- a/include/dw_elliptical.h +++ b/include/dw_elliptical.h @@ -23,7 +23,7 @@ typedef struct TElliptical_tag { - PRECISION logabsdet; // = ln(abs(det(scale)))) + PRECISION logabsdet; // = -ln(abs(det(scale)))) int dim; // = dimension of elliptical random vector PRECISION variance_scale; // variance = variance_scale * (scale * scale') TVector center; // mean = center @@ -80,6 +80,7 @@ PRECISION RadiusElliptical(PRECISION *draw, TElliptical *elliptical); #define CummulativeDensityElliptical_Radius(radius,elliptical) ((elliptical)->cummulative_radius(radius,elliptical)) #define PrintEllipticalInfo(f_out,elliptical) ((elliptical)->print_info(f_out,elliptical)) #define EllipticalType(elliptical) ((elliptical)->type) +void PrintEllipticalInfo_full(FILE *f_out, TElliptical *elliptical); PRECISION VarianceScale_TruncatedPower(int dim, PRECISION lower_bound, PRECISION upper_bound, PRECISION power); PRECISION VarianceScale_TruncatedGaussian(int dim, PRECISION lower_bound, PRECISION upper_bound, PRECISION s); @@ -152,7 +153,7 @@ The mapping to the data structure is: center = c scale = S quadratic_form = Inverse(S*S') - logconstant = -log(abs(det(S))) + logabsdet = -log(abs(det(S))) dim = n ---------------------------------------------------------------------------------