使用scipy.integrate.quad积分伽玛函数

Using scipy.integrate.quad to integrate gamma function

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

到目前为止,我已经尝试了一些代码,但有人告诉我 "quad: The first argument is not callable"。

这是我用过的代码:

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)

您可以定义 fa 取一个参数,如下所示:

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。您需要将其中一个数字设置为浮点数才能触发真正的除法(Python 3 没有这个问题)。