मुझे एक उदाहरण है कि मुझे here मिला है, मैं एक फोरट्रान कोड उत्पन्न करने का प्रयास करता हूं जो कि एक विशिष्ट रूप से मेल खाने के लिए आवश्यक है। आवश्यक FORTRAN कोड इस (it is based on the FitzHugh–Nagumo model) तरह दिखेगा:समीकरणों की प्रणाली के लिए सिम्पी कोडेजन के साथ फोरट्रान सबराउटिन उत्पन्न करें
SUBROUTINE FF(NE,U,PAR,F)
! ---------- --
! Define the nonlinear term
IMPLICIT NONE
INTEGER, INTENT(IN) :: NE
DOUBLE PRECISION, INTENT(IN) :: U(NE),PAR(*)
DOUBLE PRECISION, INTENT(OUT) :: F(NE)
DOUBLE PRECISION u,v,e,a1,a0
u=U(1)
v=U(2)
e=PAR(1)
a1=PAR(2)
a0=PAR(3)
F(1)= u-u**3-v
F(2)= e*(u-a1*v-a0)
END SUBROUTINE FF
मैं SymPy में सही भाव पैदा करने के लिए प्रबंधन, लेकिन मैं समझ नहीं है कि कैसे codegen
के साथ आवश्यक कोड उत्पन्न करने के लिए। यहाँ मेरी प्रयास अब तक है:
from sympy import symbols,latex
from sympy.utilities.codegen import codegen
from sympy.tensor import IndexedBase, Idx
from sympy import Matrix
U, PAR = symbols('U PAR', cls=IndexedBase)
u = U[1]
v = U[2]
e = PAR[1]
a1 = PAR[2]
a0 = PAR[3]
dudt = u-u**3-v
dvdt = e*(u-a1*v-a0)
print latex(dudt)
print latex(dvdt)
F = Matrix([dudt,dvdt])
print F
result = codegen(('my_function', F), 'f95', 'my_project')
print result[0][1]
लेकिन यह मुझे देता है:
IndexException:
Range is not defined for all indices in: PAR[3]
मुझे लगता है कि यह चाहता है कि आप इंडेक्सबेसबेस के लिए एक आकृति घोषित करें। लेकिन फिर भी एक समस्या है क्योंकि यह अनुक्रमित वस्तुओं को टेंसर के रूप में पेश करना चाहता है। – asmeurer
हमें वास्तव में कोड प्रिंटर में अंतर्निहित सारांश सम्मेलन को अक्षम करना चाहिए। –