26#include <boost/math/special_functions/log1p.hpp>
27#include <boost/math/special_functions/expm1.hpp>
28using namespace boost::math;
38 copysign (log1p(fabs(x)*grid->
aInv)*grid->
bInv, x);
47 int index = (int) floor(grid->
ainv*log(x*grid->
startinv));
61 double *points = grid->
points;
64 else if (x >= points[N-1])
91 grid->
center = 0.5*(start + end);
94 grid->
odd = ((num_points % 2) == 1);
96 grid->
bInv = 1.0/grid->
b;
97 grid->
points =
new double[num_points];
102 grid->
aInv = 1.0/grid->
a;
117 0.5*(end-start)/expm1(grid->
b*(-0.5+grid->
half_points));
118 grid->
aInv = 1.0/grid->
a;
121 if (i<0)
sign = -1.0;
124 sign * grid->
a*expm1(grid->
b*fabs(0.5+i)) + grid->
center;
143 grid->
points =
new double[num_points];
144 grid->
a = 1.0/(double)(num_points-1)*log(end/start);
145 grid->
ainv = 1.0/grid->
a;
147 for (
int i=0; i<num_points; i++)
148 grid->
points[i] = start*exp(grid->
a*(
double)i);
161 grid->
points =
new double[num_points];
162 grid->
start = points[0];
163 grid->
end = points[num_points-1];
165 for (
int i=0; i<num_points; i++)
166 grid->
points[i] = points[i];
int general_grid_reverse_map(void *gridptr, double x)
NUgrid * create_log_grid(double start, double end, int num_points)
NUgrid * create_center_grid(double start, double end, double ratio, int num_points)
int log_grid_reverse_map(void *gridptr, double x)
void destroy_grid(NUgrid *grid)
NUgrid * create_general_grid(double *points, int num_points)
int center_grid_reverse_map(void *gridptr, double x)
int(* reverse_map)(void *grid, double x)
int(* reverse_map)(void *grid, double x)
int(* reverse_map)(void *grid, double x)