Python:如何用十进制格式表示阶乘的除法?

2024-04-19 03:40:50 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图得到拉盖尔多项式的系数,这涉及到因式分解,这是我的代码:

Coeficientes=[]
def Ln(n):
    for m in xrange(n+1):
        Coeficientes.append(((-1)**m *factorial(n))/(factorial(n-m)*factorial(m)*factorial(m)))
    print "Coeficiente de grado", m, ":", Coeficientes[m]

问题是当我必须得到0.5的系数时,我得到了0。在

示例

^{pr2}$

结果:

Coeficiente de grado 0 : 1
Coeficiente de grado 1 : -2
Coeficiente de grado 2 : 0

但必须说:

Coeficiente de grado 2 : 0.5

如果我写Ln(2.),它会返回一个错误:需要整型参数,得到float


Tags: 代码in示例fordefdeprintln
3条回答

你得到了Coeficiente de grado 2 : 0而不是{},因为factorial只接受整数,另一种方法是使用math.gamma(x)

gamma是阶乘函数对实数的扩展。(如果您使用的是python2.7或3.2)

pydoc here

您需要将其中一个数字强制转换为float,以防止所有内容都被视为整数:(-1)**float(m)或{}

Coeficientes=[]
def Ln(n):
    for m in xrange(n+1):
        Coeficientes.append(((-1)**float(m) *factorial(n))/(factorial(n-m)*factorial(m)*factorial(m)))
        print "Coeficiente de grado", m, ":", Coeficientes[m]

当对整数进行除法时,Python会将结果强制转换为int。例如,7/5将产生{}。但是7.0/5导致{}。在

十进制更精确,避免了舍入误差。见https://docs.python.org/2/tutorial/floatingpoint.html

您的问题出在函数factorial。这只能对正整数求值。您应该使用math.gamma(n)来计算任何实数(非整数或整数)。在

from math import gamma print (((-1)**m *gamma(n))/(gamma(n-m)*gamma(m)*gamma(m)))

相关问题 更多 >