Python: интеграция по нескольким измерениям функции, принимающей входной массив

У меня возникают трудности с вычислением нескольких интегралов функций с входными данными массива. я хотел бы использовать scipy.integrate's nquad functionпотому что мне нужно иметь возможность интегрироваться из -np.inf to np.inf(Я работаю с функциями плотности вероятности). Проблема в том, что nquad ожидает, что функция будет сформулирована следующим образом:

function(x_1, x_2, ..., x_n)

Функции, которые мне нужно интегрировать, имеют следующую форму:

function(np.array([x_1, x_2, ..., x_n]))

Есть ли способ изменить функцию, которая принимает массив, чтобы принимать несколько аргументов? Если нет, то есть ли альтернатива nquad? Я пытался использовать quadpy, но он сказал, что мой интеграл больше 31, когда фактическое значение было 1.

Спасибо за помощь.

1 ответ

Я нашел решение. Я исправил проблему, создав функцию-оболочку, принимающую *args, преобразуя args в массив numpy и интегрируя функцию-оболочку.

Вот пример:

      from scipy.integrate import nquad
from scipy.stats import multivariate_normal

mean = [0., 0.]
cov = np.array([[1., 0.],
                [0., 1.]])

bivariate_normal = multivariate_normal(mean=mean, cov=cov)

def pdf(*args):
    x = np.array(args)
    return bivariate_normal.pdf(x)

integration_range = [[-18, 18], [-18, 18]]

nquad(pdf, integration_range)

Output: (1.000000000000001, 1.3429066352690133e-08)
Другие вопросы по тегам