24 this->_sampling_period = (2 * this->_maximum_sample_value) / this->get_num_samples();
27 std::vector<double> erf_values(this->get_num_samples() + 2);
28 for (
int i = 0; i < this->get_num_samples() + 2; ++i)
29 erf_values[i] = erf(i * this->_sampling_period - this->_maximum_sample_value);
32 BSpline::BSplines1DRegularGrid<double, double> spline(erf_values, BSpline::linear);
33 this->_spline = spline;
35 erf_values_vec = erf_values;
40FastErf::get_erf_BSplines_interpolation(
double xp)
const
43 xp = std::clamp(xp,-this->_maximum_sample_value, this->_maximum_sample_value);
45 xp = std::max(std::min(this->_maximum_sample_value, xp), -this->_maximum_sample_value);
47 return this->_spline.BSplines((xp + this->_maximum_sample_value) / this->_sampling_period);
51FastErf::get_erf_linear_interpolation(
double xp)
const
54 xp = std::clamp(xp,-this->_maximum_sample_value, this->_maximum_sample_value);
56 xp = std::max(std::min(this->_maximum_sample_value, xp), -this->_maximum_sample_value);
59 double xp_in_index = ((xp + this->_maximum_sample_value) / this->_sampling_period);
62 int lower =
static_cast<int>(floor(xp_in_index));
65 return erf_values_vec[lower] + (xp_in_index - lower) * (erf_values_vec[lower + 1] - erf_values_vec[lower]);
69FastErf::get_erf_nearest_neighbour_interpolation(
double xp)
const
72 xp = std::clamp(xp,-this->_maximum_sample_value, this->_maximum_sample_value);
74 xp = std::max(std::min(this->_maximum_sample_value, xp), -this->_maximum_sample_value);
77 return erf_values_vec[
static_cast<int>(std::round((xp + this->_maximum_sample_value) / this->_sampling_period))];
81FastErf::set_num_samples(
const int num_samples)
83 this->_num_samples = num_samples;
87FastErf::get_num_samples()
const
89 return this->_num_samples;
93FastErf::get_maximum_sample_value()
const
95 return this->_maximum_sample_value;
99FastErf::set_maximum_sample_value(
double maximum_sample_value)
101 this->_maximum_sample_value = maximum_sample_value;
105FastErf::operator()(
const double xp)
const
107 return get_erf_linear_interpolation(xp);
Implementation of the B-Splines Interpolation.