如何将这段Mathematica代码移植到Python中?我不知道Mathematica的语法,我很难理解如何用一种更传统的语言来描述它。

来源(第5页):http://subjoin.net/misc/m496pres1.nb.pdf
发布于 2011-11-25 08:52:07
使用前面答案中提出的解决方案,我发现,不幸的是,渐近并不能立即计算rational的doesn()。不知何故,它会变得混乱。此外,*Poly.all_coeffs()*返回的python系数列表具有与Mathmatica列表不同的语义。因此,在a()的定义中使用try-except子句。
以下代码可以工作,并且对于某些测试值,输出与Mathematica 7中的Mathematica公式给出的答案一致:
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])发布于 2010-10-18 20:00:15
符号可以用sympy来完成。结合KennyTM的答案,可能就是你想要的:
from __future__ import division
from sympy import Symbol, apart, binomial
x = Symbol('x')
poly = (1-x**20)**5 / ((1-x)**2 * (1-x**2) * (1-x**5) * (1-x**10))
poly2 = apart(poly,x)
def a(j):
return poly2.coeff(x**j)
def f(n):
v = n // 5
q = v // 20
r = v % 20
return sum(binomial(q+5-j, 5)*a(r+20*j) for j in range(5))尽管我不得不承认f(n)不起作用(我对Python不是很在行)。
https://stackoverflow.com/questions/3957087
复制相似问题