首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Mathematica to Python

Mathematica to Python
EN

Stack Overflow用户
提问于 2010-10-18 14:58:07
回答 2查看 5.7K关注 0票数 8

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

来源(第5页):http://subjoin.net/misc/m496pres1.nb.pdf

EN

回答 2

Stack Overflow用户

发布于 2011-11-25 08:52:07

使用前面答案中提出的解决方案,我发现,不幸的是,渐近并不能立即计算rational的doesn()。不知何故,它会变得混乱。此外,*Poly.all_coeffs()*返回的python系数列表具有与Mathmatica列表不同的语义。因此,在a()的定义中使用try-except子句。

以下代码可以工作,并且对于某些测试值,输出与Mathematica 7中的Mathematica公式给出的答案一致:

代码语言:javascript
复制
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])
票数 4
EN

Stack Overflow用户

发布于 2010-10-18 20:00:15

符号可以用sympy来完成。结合KennyTM的答案,可能就是你想要的:

代码语言:javascript
复制
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不是很在行)。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3957087

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档