2015-11-22 46 views
1

a = 3/2使用scipy.integrate.quad时,如何从0找到Gamma(x) = x^(a-1) * e^-x的积分?使用scipy.integrate.quad集成伽玛函数

到目前为止,我已经尝试了一些代码,但我被告知“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) 

回答

1

您可以定义f采取的论据a如下:

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

注意,有必要为f有第一参数为x,因为这是我们将要整合的变量。

进行整合,那么你就可以的a值传递给f使用args

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