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
获得输出num
和args
?
说args=(numbers,))
中的数字是什么,它们永远不会改变是正确的吗?如果是这样,是否可以传递两组args
;第一组由不可变输入和第二组可变args
组成(可能是可积参数a
和b
在可积高斯分布函数中?
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]
作为可变输入。