25#ifndef quantlib_trapezoid_integral_hpp
26#define quantlib_trapezoid_integral_hpp
28#include <ql/math/integrals/integral.hpp>
29#include <ql/utilities/null.hpp>
30#include <ql/errors.hpp>
51 template <
class IntegrationPolicy>
63 Real I = (f(a)+f(b))*(b-a)/2.0, newI;
67 newI = IntegrationPolicy::integrate(f,a,b,I,N);
68 N *= IntegrationPolicy::nbEvalutions();
77 QL_FAIL(
"max number of iterations reached");
92 for (
Size i=0; i<N; x += dx, ++i)
94 return (I + dx*sum)/2.0;
110 for (
Size i=0; i<N; x += dx, ++i)
111 sum += f(x) + f(x+D);
112 return (I + dx*sum)/3.0;
Real absoluteAccuracy() const
Size maxEvaluations() const
Integral of a one-dimensional function.
TrapezoidIntegral(Real accuracy, Size maxIterations)
Real integrate(const ext::function< Real(Real)> &f, Real a, Real b) const override
std::size_t Size
size of a container
static Real integrate(const ext::function< Real(Real)> &f, Real a, Real b, Real I, Size N)
static Size nbEvalutions()
static Real integrate(const ext::function< Real(Real)> &f, Real a, Real b, Real I, Size N)
static Size nbEvalutions()