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没有这个问题)