Мне нужно вычислить значение многомерного интеграла в С++. Я нашел множество библиотек, способных решить эту задачу для фиксированных предельных интегралов,
\int_{0}^{L} \int_{0}^{L} dx dy f(x,y) .
Однако интегралы, на которые я смотрю, имеют переменные пределы,
\int_{0}^{L} \int_{x}^{L} dx dy f(x,y) .
Чтобы прояснить, что я имею в виду, вот наивная реализация 2D-суммы Римана в 2D, которая возвращает желаемый результат,
int steps = 100;
double integral = 0;
double dl = L/((double) steps);
double x[2] = {0};
for(int i = 0; i < steps; i ++){
x[0] = dl*i;
for(int j = i; j < steps; j ++){
x[1] = dl*j;
double val = f(x);
integral += val*val*dl*dl;
}
}
где f — некоторая произвольная функция, а L — общий верхний предел интегрирования. Хотя эта реализация работает, она медленная и, следовательно, непрактичная для более высоких измерений.
Существуют эффективные алгоритмы для более высоких измерений, но, насколько мне известно, реализации библиотек (например, Куба) принимают фиксированный вектор значений в качестве предельного аргумента, что делает их бесполезными для моей проблемы.
Есть ли какая-то причина для этого и / или есть ли какой-нибудь трюк, чтобы обойти проблему?