0

我在 Python 中实现一些数学公式,使用时出现以下错误mpmath.nsum()

TypeError: 输入类型不支持 ufunc 'gamma',并且根据转换规则 ''safe'' 无法安全地将输入强制转换为任何支持的类型

主文件

import math
from mpmath import nsum
H_n = - nsum(lambda n: P_n(a,b,c,n)*math.log(P_n(a,b,c,n)), [0, math.inf])

函数文件

import math
from scipy.special import gamma, hyp1f1
def P_n(a,b,c,n):
    P = ((gamma(b)*gamma(a+n))/(gamma(a)*gamma(b+n)))*(hyp1f1(a+n,b+n,-c))
    return P

当我使用下面的 for 循环时,我得到了我想要的答案。

sum = 0.0
for n in range(100):
    sum += rna.P_n(a,b,c,n)*math.log(rna.P_n(a,b,c,n))

请问有什么帮助吗?(注意:我是 Python 的绝对初学者,所以我不知道如何解决这个问题)

4

1 回答 1

0

Scipy.special.gamma 仅适用于整数或浮点参数,不适用于 mpmath 的无限精度值。使用mpmath.gamma或避免使用 mpmath 并手动进行求和,直至达到较大的有限截止值。

于 2019-01-25T10:06:03.663 回答