簡體   English   中英

Mathematica到Python

[英]Mathematica to Python

如何將這個Mathematica代碼移植到Python? 我不知道Mathematica語法,並且很難理解如何用更傳統的語言描述它。

mathematica代碼

來源(第5頁): http//subjoin.net/misc/m496pres1.nb.pdf

這不能直接移植到Python,因為定義a[j]使用Mathematica的符號算術功能。

a[j]基本上是在Apart內部的有理函數的級數展開中的x j的系數。

假設你有a[j] ,那么f[n]很容易。 Mathematica中的Block基本上引入了變量的范圍。 第一個列表初始化變量,其余的是代碼的執行。 所以

from __future__ import division
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))

binomial二項式系數 。)

使用前面答案中提出的解決方案,我發現, 很少有人能夠直接計算理性的分離() 它有點混淆。 此外,* 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])

符號可以用同情來完成。 結合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)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM