8 : xmin(xmin), xmax(xmax), n(n), iter(iter) {
18 std::vector<double>
a,
y,
z, xnew;
29 for (
int i = 1;
i <
n; ++
i)
33 for (
int it = 0; it <
iter; ++it) {
35 for (
int i = 0;
i <
n; ++
i)
39 for (
int i = 0; i <
m; ++
i)
44 for (
int i = 1; i <
n; ++
i)
45 y[i] = y[i - 1] + a[i - 1];
48 double dz = y[n - 1] / (float)m;
50 for (
int i = 1; i <
n; ++
i)
58 for (
int i = 1; i <
m; ++
i) {
59 while (y[k + 1] < z[i])
61 double r = (z[
i] - y[
k]) / (y[k + 1] - y[k]);
65 for (
int i = 0; i <
n; ++
i)
78 double s = r - (double)i;
93 double u = (umax - umin) * random->
flatShoot() + umin;
106 double umin = a * sampling[
i] * sampling[
i] / 2. + b * sampling[
i];
107 double umax = a * sampling[i + 1] * sampling[i + 1] / 2. + b * sampling[i + 1];
108 double u = (umax - umin) * random->
flatShoot() + umin;
110 return (-b +
std::sqrt(b * b + 2. * a * u)) /
a;
114 if (x1 < xmin || x2 >
xmax)
123 for (; ibin < (unsigned)n && x1 >
sampling[ibin]; ++ibin)
125 unsigned ibin1 = ibin;
126 for (; ibin < (unsigned)n && x2 > sampling[ibin]; ++ibin)
128 unsigned ibin2 = ibin;
133 rmin = ibin1 + (x1 - sampling[ibin1]) / (sampling[ibin1] - sampling[ibin1 - 1]);
134 deltar = ibin2 + (x2 - sampling[ibin2]) / (sampling[ibin2] - sampling[ibin2 - 1]) -
rmin;
double generate(RandomEngineAndDistribution const *) const
The random generation according to function()
static std::vector< std::string > checklist log
double flatShoot(double xmin=0.0, double xmax=1.0) const
double generateLin(RandomEngineAndDistribution const *) const
BaseNumericalRandomGenerator(double xmin=0., double xmax=1., int n=1000, int iter=6)
Exp< T >::type exp(const T &t)
void initialize()
The initialization (numerical integarion, inversion)
double generateExp(RandomEngineAndDistribution const *) const
std::vector< double > sampling
bool setSubInterval(double x1, double x2)
To shoot in a given interval.