Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何用Python计算多元函数的单积分';是scipy.integrate.quad吗?_Python_Scipy - Fatal编程技术网

如何用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))