2010-10-18 8 views
7

यह गणित कोड पाइथन को कैसे भेजा जा सकता है? मुझे गणित वाक्यविन्यास नहीं पता है और मुझे यह समझने में कठिनाई हो रही है कि इसे एक और पारंपरिक भाषा में कैसे वर्णित किया गया है।मैथमैटिका से पायथन

mathematica code

स्रोत (पृष्ठ 5): http://subjoin.net/misc/m496pres1.nb.pdf

उत्तर

5

इस परिभाषा a[j] के रूप में सीधे अजगर वापस पोर्ट नहीं किया जा सकता है मेथेमेटिका के प्रतीकात्मक अंकगणित सुविधा का उपयोग करता।

a[j] मूल रूप से है कि तर्कसंगत समारोह की श्रृंखला के विस्तार के अंदर अलावा में एक्स जे का गुणांक है।

मान लें कि आपके पास a[j] है, तो f[n] आसान है। गणित में एक ब्लॉक मूल रूप से चर के लिए एक गुंजाइश पेश करता है। पहली सूची चर को प्रारंभ करती है, और बाकी कोड का निष्पादन है। तो

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)) 

(binomialBinomial coefficient है।)

2

Symbolics 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)) 

हालांकि मुझे लगता है कि च स्वीकार करना होगा (एन) काम नहीं करता है (मैं अजगर पर बहुत अच्छा नहीं कर रहा हूँ)।

4

पिछले जवाब मैंने पाया से प्रस्तावित समाधान का उपयोग कि sympy उदासी immediatly गणना नहीं करता तर्कसंगत की अलग()। यह किसी भी तरह उलझन में आता है। इसके अलावा, * poly.all_coeffs() * द्वारा लौटे गुणांक की अजगर सूची में गणित सूची की तुलना में एक अलग अर्थशास्त्र है। इसलिए ए() की परिभाषा में प्रयास-छोड़कर खंड।

निम्नलिखित कोड काम और उत्पादन, कुछ परीक्षण किया मूल्यों के लिए करता है, जवाब 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]) 
संबंधित मुद्दे