20#include <ql/math/integrals/discreteintegrals.hpp>
21#include <boost/accumulators/accumulators.hpp>
22#include <boost/accumulators/statistics/sum.hpp>
24using namespace boost::accumulators;
31 const Size n = f.size();
32 QL_REQUIRE(n == x.
size(),
"inconsistent size");
34 accumulator_set<Real, features<tag::sum> > acc;
36 for (
Size i=0; i < n-1; ++i) {
37 acc((x[i+1]-x[i])*(f[i]+f[i+1]));
46 const Size n = f.size();
47 QL_REQUIRE(n == x.
size(),
"inconsistent size");
49 accumulator_set<Real, features<tag::sum> > acc;
51 for (
Size j=0; j < n-2; j+=2) {
52 const Real dxj = x[j+1]-x[j];
53 const Real dxjp1 = x[j+2]-x[j+1];
55 const Real alpha = -dxjp1*(2*x[j]-3*x[j+1]+x[j+2]);
56 const Real dd = x[j+2]-x[j];
57 const Real k = dd/(6*dxjp1*dxj);
58 const Real beta = dd*dd;
59 const Real gamma = dxj*(x[j]-3*x[j+1]+2*x[j+2]);
61 acc(k*alpha*f[j]+k*beta*f[j+1]+k*gamma*f[j+2]);
64 acc(0.5*(x[n-1]-x[n-2])*(f[n-1]+f[n-2]));
1-D array used in linear algebra.
const_iterator end() const
Size size() const
dimension of the array
const_iterator begin() const
Real operator()(const Array &x, const Array &f) const
Real integrate(const ext::function< Real(Real)> &f, Real a, Real b) const override
Real operator()(const Array &x, const Array &f) const
Real integrate(const ext::function< Real(Real)> &f, Real a, Real b) const override
Size maxEvaluations() const
void increaseNumberOfEvaluations(Size increase) const
std::size_t Size
size of a container