1

を使用Gamma(x) = x^(a-1) * e^-xする場合、0 から無限大までの積分を見つけるにはどうすればよいですか?a = 3/2scipy.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)
4

1 に答える 1

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は float 1.5 ではなく整数 1 を返します。真の除算をトリガーするには、数値の 1 つを float にする必要があります (Python 3 にはこの問題はありません)。
于 2015-11-22T18:08:20.677 に答える