如何用Python的scipy.integrate.quad评估多元函数的单积分?

Neu*_*tar 7 python scipy

我正在尝试使用Python集成一个函数scipy.integrate.quad.这个特殊的函数有两个参数.我想要整合一个论点.一个例子如下所示.

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)
Run Code Online (Sandbox Code Playgroud)

这个例子不起作用(你可能很清楚),因为Python在我尝试时提醒我:

TypeError: f() takes exactly 2 arguments (1 given)
Run Code Online (Sandbox Code Playgroud)

我想知道integrate.quad()当给定的函数通常是多变量函数时,如何使用集成在单个变量意义中,额外的变量为函数提供参数.

Neu*_*tar 10

scipy文档中找到了答案.

您可以执行以下操作:

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,))
Run Code Online (Sandbox Code Playgroud)

方法中的args=(1,)参数quada=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))
Run Code Online (Sandbox Code Playgroud)

这将进行a=1, b=2, c=3整体评估.

要以这种方式集成的函数要记住的重要事项是将要集成的变量放在函数的第一个参数上.

  • 如果我们整合两个函数的乘积会发生什么,一个函数是“f(x,a,b)”,另一个函数是“g(x,c)”。在这种情况下 args 将如何工作? (2认同)

xnx*_*xnx 6

使用args参数(请参阅scipy 文档):

result = integrate.quad(f,0,1, args=(a,))
Run Code Online (Sandbox Code Playgroud)

逗号 inargs=(a,)是必需的,因为必须传递一个元组。

  • 是的:源代码包括以下行:`if not isinstance(args, tuple): args = (args,)`,所以单个值就可以了。如果它没有记录在案,就不能保证它将来不会改变,但是...... (2认同)