被集成为动态产生的功能

时间:2019-03-25 23:27:05

标签: python computation

我想集成一个由函数的乘积组成的被积,函数的数量是动态的。

我有一个统计数据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的四边形)的解决方案

感谢您的帮助!

0 个答案:

没有答案