Используя предложенные решения из предыдущих ответов, я обнаружил, что sympy , к сожалению, не вычисляет отдельно () от рационального сразу.Это как-то запутано.Более того, список коэффициентов в Python, возвращаемый функцией * Poly.all_coeffs () *, имеет семантику, отличную от списка Mathmatica.Отсюда и предложение try-исключением в определении a () .
Следующий код работает, и вывод для некоторых проверенных значений совпадает с ответами, данными формулой Mathematica в Mathematica 7:
from __future__ import division
from sympy import expand, Poly, binomial, apart
from sympy.abc import x
A = Poly(apart(expand(((1-x**20)**5)) / expand((((1-x)**2)*(1-x**2)*(1-x**5)*(1-x**10))))).all_coeffs()
def a(n):
try:
return A[n]
except IndexError:
return 0
def f(n):
v = n // 5
q = v // 20
r = v % 20
return sum(a[r+20*j]* binomial(q+5-j, 5) for j in range(5))
print map(f, [100, 50, 1000, 150])