28 const std::size_t num_samples = f.size();
29 elemT integral_result = 0;
30 assert(num_samples > 1);
31 if (num_samples != t.size())
32 error(
"integrate_discrete_function requires equal size of the two input vectors!!!");
34 switch (interpolation_order)
41 integral_result = f[0] * (t[1] - t[0]) * 0.5F;
42 for (std::size_t i = 1; i < num_samples - 1; ++i)
43 integral_result += f[i] * (t[i + 1] - t[i - 1]) * 0.5F;
44 integral_result += f[num_samples - 1] * (t[num_samples - 1] - t[num_samples - 2]) * 0.5F;
51 for (std::size_t i = 0; i < num_samples - 1; ++i)
52 integral_result += (f[i] + f[i + 1]) * (t[i + 1] - t[i]) * 0.5F;
56 error(
"integrate_discrete_function need interpolation order 0 or 1");
58 return integral_result;
void error(const char *const s,...)
Print error with format string a la printf and throw exception.
Definition error.cxx:42
elemT integrate_discrete_function(const std::vector< elemT > &coordinates, const std::vector< elemT > &values, const int interpolation_order=1)
numerical integration of a 1D function
Definition integrate_discrete_function.inl:26