我很难用数组输入计算函数的多个积分。我想用scipy.integrate's nquad function
因为我需要能够从-np.inf to np.inf
中积分(我在用概率密度函数)问题是,我们期望一个函数是这样表述的:
function(x_1, x_2, ..., x_n)
我需要积分的函数采用这种形式:
function(np.array([x_1, x_2, ..., x_n]))
是否有一种方法来改变一个函数,接受多个参数的数组?如果没有,有没有替代quad的方法?我试着使用四元,但它说我的积分超过31,而实际值是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)