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