Jak ten kod Mathematica można przenieść do Pythona? Nie znam składni języka Mathematica i trudno mi zrozumieć, jak to jest opisane w bardziej tradycyjnym języku.Mathematica do Python
Źródło (str 5): http://subjoin.net/misc/m496pres1.nb.pdf
Jak ten kod Mathematica można przenieść do Pythona? Nie znam składni języka Mathematica i trudno mi zrozumieć, jak to jest opisane w bardziej tradycyjnym języku.Mathematica do Python
Źródło (str 5): http://subjoin.net/misc/m496pres1.nb.pdf
To nie może być przeniesione do Python bezpośrednio jak definicja a[j]
używa symbolicznego arytmetyczne cechę Mathematica.
a[j]
jest w zasadzie współczynnikiem x j w rozszerzeniu serii tej racjonalnej funkcji wewnątrz Apart.
Załóżmy, że masz a[j]
, a następnie f[n]
jest łatwe. Blok w Mathematica zasadniczo wprowadza zakres zmiennych. Pierwsza lista inicjuje zmienną, a reszta to wykonanie kodu. Więc
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
jest Binomial coefficient).
W symboliką można zrobić z sympy. W połączeniu z odpowiedzią KennyTM za coś takiego może być to, co chcesz:
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))
Chociaż muszę przyznać, że f (n) nie działa (nie jestem bardzo dobry w Pythonie).
Stosując proponowane rozwiązania z poprzednich odpowiedziach odkryłem, że sympy niestety nie obliczyć siebie() racjonalnego natychmiast. Jakoś się myli. Co więcej, lista współczynników zwracanych przez * Poly.all_coeffs() * na pythonie ma inną semantykę niż lista Mathmatica. Stąd klauzula try-except w definicji a().
Następujący kod działa oraz wyjście dla niektórych badanych wartości zgadza się z odpowiedzi podane przez wzór Mathematica w Mathematicą 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])