我试图获得拉盖尔多项式的系数,这涉及到阶乘的除法,这是我的代码:
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。
例子Ln(2)
结果:Coeficiente de grado 0 : 1
Coeficiente de grado 1 : -2
Coeficiente de grado 2 : 0
但必须说:
Coeficiente de grado 2 : 0.5
如果我写Ln(2.),它会返回一个错误:期望整数参数,得到float
您得到的是Coeficiente de grado 2 : 0
而不是Coeficiente de grado 2 : 0.5
,因为factorial
只接受整数,另一种方法是使用math.gamma(x)
gamma
是阶乘函数对实数的扩展。(如果你正在使用python 2.7或3.2)
查看此处的pydoc
您的问题是在功能factorial
。它只能在正整数上求值。您应该使用math.gamma(n)
来计算任何实数(非整数或整数)。
from math import gamma
print (((-1)**m *gamma(n))/(gamma(n-m)*gamma(m)*gamma(m)))
您需要将其中一个数字转换为float,以防止所有数字都被视为整数:(-1)**float(m)
或(-1.0)**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
将得到1
。但是7.0/5
会得到1.4
。
Decimal更精确,避免了舍入错误。见https://docs.python.org/2/tutorial/floatingpoint.html