我想集成一个由函数的乘积组成的被积,函数的数量是动态的。
我有一个统计数据problem,我一直在努力通过集成多个函数的乘积来给出所需的数量。我希望乘积中的元素数量取决于参数输入向量的元素数量。
非动态版本为:
import numpy as np
from scipy.integrate import quad
from scipy.special import erf
def normal_pdf(x, mu, sigma):
return np.exp(-(x-mu)**2/(2*sigma**2)) / (2*np.pi*sigma**2)**0.5
def normal_cdf(x, mu, sigma):
return 0.5*(1+erf((x-mu)/(2**0.5*sigma)))
def Int(p0, mode):
if mode == '2':
def integrand(x, mu_a, sigma_a, mu_b, sigma_b):
return normal_pdf(x, mu_a, sigma_a)*normal_cdf(x, mu_b, sigma_b)
elif mode == '3':
def integrand(x, mu_a, s_a, mu_b, s_b, mu_c, s_c):
return normal_pdf(x, mu_a, s_a)*normal_cdf(x, mu_b, s_b)*normal_cdf(x, mu_c, s_c)
return quad( integrand, -np.inf, np.inf, args=(p0) )[0]
p0 = (0, 1, 1, 1, 1, 1)
mode = '3'
I = Int(p0, mode)
print(I)
cdf函数的倍数由
给出n = len(p0)/2 - 1
因为它的功能需要两个参数,而负号是因为pdf还需要两个参数。
我需要一个动态的解决方案,因为我不提前知道产品中的元素数量,但是会有大约50个元素,因此不希望扩展上面的硬编码解决方案。
我可以在确定(例如)积分域的np.linspace()的情况下手动计算积分,但是我宁愿使用标准积分函数(例如scipy的四边形)的解决方案>
感谢您的帮助!