如何用Python计算多元函数的单积分';是scipy.integrate.quad吗?
我正试图使用如何用Python计算多元函数的单积分';是scipy.integrate.quad吗?,python,scipy,Python,Scipy,我正试图使用scipy.integrate.quad在Python中集成一个函数。此特定函数具有两个参数。我只想对一个论点进行积分。下面是一个例子 from scipy import integrate as integrate def f(x,a): #a is a parameter, x is the variable I want to integrate over return a*x result = integrate.quad(f,0,1) 这个示例不起作用(您可能
scipy.integrate.quad
在Python中集成一个函数。此特定函数具有两个参数。我只想对一个论点进行积分。下面是一个例子
from scipy import integrate as integrate
def f(x,a): #a is a parameter, x is the variable I want to integrate over
return a*x
result = integrate.quad(f,0,1)
这个示例不起作用(您可能很清楚),因为正如Python在我尝试它时提醒我的那样:
TypeError: f() takes exactly 2 arguments (1 given)
我想知道当给定的函数通常是多变量函数时,如何使用
integrate.quad()
在单变量意义上进行集成,而额外的变量为函数提供参数。使用args
参数(请参阅):
args=(a,)
中的逗号是必需的,因为必须传递元组。在中找到了答案
您可以执行以下操作:
from scipy import integrate as integrate
def f(x,a): #a is a parameter, x is the variable I want to integrate over
return a*x
result = integrate.quad(f,0,1,args=(1,))
quad
方法中的args=(1,)
参数将使积分计算成为a=1
这也可以用于具有两个以上变量的函数:
from scipy import integrate as integrate
def f(x,a,b,c): #a is a parameter, x is the variable I want to integrate over
return a*x + b + c
result = integrate.quad(f,0,1,args=(1,2,3))
这将使积分计算的a=1、b=2、c=3
对于要以这种方式进行积分的函数,需要记住的重要一点是使要在函数的第一个参数上进行积分的变量。我让它在不包含逗号的情况下工作。这似乎很奇怪。是的:源代码包含以下行:
如果不是isinstance(args,tuple):args=(args,)
,那么一个值就可以了。如果没有文档记录,则不能保证将来不会更改,尽管…args=(1)
与args=1
相同;i、 如果没有尾随逗号强制表达式成为元组,那么这些括号就没有任何用处。根据quad
docstring,args
应该是一个元组,但它似乎只处理一个值。要使args
成为长度为1的元组,请使用args=(1,)
。您认为将单个参数传递给args
的“最正确”方法是基于文档的元组args=(1,)
。但是,如果您检查源代码,您会发现如果args
不是元组,那么代码确实是args=(args,)
,因此我猜使用args=1
是“安全的”,因为这个未记录的特性。(请注意,这意味着您不能使用元组以外的任何序列来保存多个参数。例如,对于具有四个参数的第二个f
,您不能使用args=[1,2,3]
,因为在内部它将被视为([1,2,3],)
),如果我们集成两个函数的乘积,会发生什么情况,一个说f(x,a,b)
,另一个说g(x,c)
。在这种情况下,args是如何工作的?如果我有一个函数f(x,y,z)
,我需要在x
范围内进行积分,在y
范围内进行积分,那该怎么办。这是不可能的,因为我只能在第一个参数上积分吗?
from scipy import integrate as integrate
def f(x,a,b,c): #a is a parameter, x is the variable I want to integrate over
return a*x + b + c
result = integrate.quad(f,0,1,args=(1,2,3))