die vorgeschlagenen Lösungen aus den früheren Antworten Mit fand ich, dass sympy leider nicht sofort auseinander() der rational nicht berechnen. Es wird irgendwie verwirrt. Außerdem hat die von * Poly.all_coeffs() * zurückgegebene Python-Liste der Koeffizienten eine andere Semantik als eine Mathmatica-Liste. Daher die try-except-Klausel in der Definition von a().
Der folgende Code funktioniert und die Ausgabe für einige getestet Werte, stimmt mit den von der Mathematica Formel Antworten in 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])