如何解释SCIPY文档中的集成示例的这个错误?

时间:2017-03-18 13:10:36

标签: python-3.x scipy parameter-passing

This SCIPY doc显示如何集成一个函数并返回5个输出:

scipy.integrate.quad(func, a, b, args=(), full_output=0, epsabs=1.49e-08, epsrel=1.49e-08, limit=50, points=None, weight=None, wvar=None, wopts=None, maxp1=50, limlst=50)

在页面底部附近是一个示例,其中函数e ^( - x)从0到无穷大相对于x进行积分:

>>> invexp = lambda x: np.exp(-x)
>>> integrate.quad(invexp, 0, np.inf)

(1.0, 5.842605999138044e-11)

这部分是有道理的。然后示例继续如下:

>>> f = lambda x,a : a*x
>>> y, err = integrate.quad(f, 0, 1, args=(1,))
>>> y
0.5
>>> y, err = integrate.quad(f, 0, 1, args=(3,))
>>> y
1.5

args=(numbers,))中的数字代表什么?它是如何在函数中使用的,函数如何知道如何使用它?如何使用0.5中的1.5获得输出numargs

args=(numbers,))中的数字是什么,它们永远不会改变是正确的吗?如果是这样,是否可以传递两组args;第一组由不可变输入和第二组可变args组成(可能是可积参数ab在可积高斯分布函数中?

PS - 我可以删除下面的代码和额外的想法,如果它太长且无关紧要。

我认为这个方法可以帮助我推广我的代码,以便可以在我的函数中添加一个不可更改的参数,以选择在定义多个分布函数时要集成哪种类型的分布。虽然他们有一种方法可以在分发函数中传递不可更改的args

from scipy.integrate import quad

def distribution( x , a , b ): ## GAUSSIAN
    ## add unchangeable input pick_distribution to specify which distribution if multiple distributions are definable
    a = abs(a) ## mu
    b = abs(b) ## sigma
    cnorm = 1 / ( b * ( 2*pi )**(1/2) )
    return cnorm * exp( (-1) * (x - a)**2 / ( 2 * (b **2) ) )

def integratesubs( args ):
    ## args[0] = a
    ## args[1] = b
    ## if the interval is 0 to 5, the subintervals could be 0 to 1, 1 to 2, 2 to 3, etc; these are generalizable
    ## integral over one subinterval is equal to area under Gaussian curve between the subinterval bounds
    ## numobs is a pre-defined sample size
    res = []
    for i in range(len(subintervalbounds)-1): ## ith i does not exist for rightmost boundary
        res.append( quad( distribution , subintervalbounds[ i ] , subintervalbounds[ i + 1 ],
                         args = ( args[0] , args[1] ))[0] * numobs )
    return res

从链的上方调用integratesubs(未显示)的另一个函数将输入parameters = [a,b]作为可变输入。

0 个答案:

没有答案