5

この投稿のように定義された上部不完全ガンマ関数を計算しようとしています。私が使用する場合

from scipy.special import gamma,gammainc
from numpy import linspace

a = 0
z = (2+3j)*np.linspace(0,10)
gamma(a)*(1-gammainc(a,z))

z複素数ベクトルです エラーが発生します

TypeError: ufunc 'gammainc' not supported for the input types, and the inputs could not be safely coerced to any supported types according to the casting rule ''safe''

計算を行うための代替関数はありますか? GammaこれをWolframAlphaの関数でやってみると問題なさそうです。

4

1 に答える 1

4

トリッキーな特殊関数を処理するのに SciPy では不十分な場合、通常はmpmathが役に立ちます。比較

>>> mpmath.gammainc(0, 2+3j)
mpc(real='-0.024826207944199364', imag='0.020316674911044622')

Wolfram Alphaからも同じです。

Python で書かれているため、SciPy よりも低速です。また、ベクトル化されません。したがって、あなたのデータでは次のように機能します

import mpmath
result = np.array([mpmath.gammainc(w) for w in z[1:]], dtype=np.complex)

引数として渡さないことに注意してください0(これは極です)。の戻り値の型mpmath.gammaincは独自のmpcオブジェクト型ですが、上記のように NumPy に戻すことができます。

于 2018-07-31T15:50:36.377 に答える