33 double max,
int order) {
36 <<
"Simpson's Rule integration is define only for order bigger than 2";
39 int N = pow(2, order);
40 double h = (max - min) / N;
42 double partial_sum = 0;
43 for (
int i = 3; i < N - 2; i++) {
44 partial_sum +=
function(min + i * h);
47 partial_sum += 0.375 * (
function(min) +
function(max));
48 partial_sum += 7. * (
function(min + h) +
function(max - h)) / 6.;
49 partial_sum += 23. * (
function(min + 2. * h) +
function(max - 2 * h)) / 24.;
51 return partial_sum * h;
56 double max,
double previous_value,
int order) {
59 <<
"Simpson's Rule integration with recursion is define only for order bigger than 3";
62 int N = pow(2, order);
63 double h = (max - min) / N;
65 double partial_sum = 0;
67 for (
int j = 1; j < N / 2 - 1; j++) {
69 partial_sum +=
function(min + i * h);
72 partial_sum += 7. * (
function(min + h) +
function(max - h)) / 6.;
73 partial_sum -= 5. * (
function(min + 2. * h) +
function(max - 2. * h)) / 24.;
74 partial_sum += (
function(min + 4. * h) +
function(max - 4. * h)) / 24.;
75 return partial_sum * h + previous_value / 2.;
Interface class representing a function.
double operator()(const Function &function, double min, double max, int order)
Integrate a function between min and max using a mesh of 2^order steps. order>=3.