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)