Python 使用scipy.integrate.quad对gamma函数进行积分

Python 使用scipy.integrate.quad对gamma函数进行积分,python,scipy,integration,gamma-function,Python,Scipy,Integration,Gamma Function,当a=3/2使用scipy.integrate.quad时,如何找到从0到无穷大的Gamma(x)=x^(a-1)*e^-x的积分 到目前为止,我已经尝试了一些代码,但我被告知“quad:第一个参数不可调用” 这是我使用的代码: import numpy as np import math as m import matplotlib.pyplot as plt from math import exp from scipy import * import scipy.integrate

a=3/2
使用
scipy.integrate.quad
时,如何找到从0到无穷大的
Gamma(x)=x^(a-1)*e^-x的积分

到目前为止,我已经尝试了一些代码,但我被告知“quad:第一个参数不可调用”

这是我使用的代码:

import numpy as np 
import math as m 
import matplotlib.pyplot as plt
from math import exp
from scipy import *
import scipy.integrate

def f(a):
    return x**(a-1)*exp(-x)

a = 3/2

print scipy.integrate.quad(f(a), 0, inf)

您可以定义
f
以获取
a
的参数,如下所示:

def f(x, a):
    return x**(a-1) * np.exp(-x)
请注意,
f
必须将第一个参数设置为
x
,因为这是我们要对其进行积分的变量

要进行集成,可以使用
args
a
的值传递给
f

>>> a = 3./2
>>> scipy.integrate.quad(f, 0, np.inf, args=a)
(0.8862269254536111, 9.077554263825505e-10)
还有几点:

  • 最初的错误是由于
    quad
    需要一个函数(或可调用)对象作为其第一个参数。写入
    f(…)
    传递函数返回的值,而不是函数对象本身
  • 在Python 2中,表达式
    3/2
    将给出整数1,而不是浮点1.5。您需要将其中一个数字设为浮点以触发真除法(Python3没有这个问题)