2016-06-10 21 views
1
q_vec, omega_vec, q1, q2, q3, w1, w2, w3 = \ 
     sym.symbols('q_vec, omega_vec, q1, q2, q3, w1, w2, w3') 

q_0_dot_str = '.5 * dot(q_vec, omega_vec)' 
q_0_dot_symp = sym.sympify(q_0_dot_str) 
q_0_dot_symp = q_0_dot_symp.subs([(q_vec, sym.Matrix([q1, q2, q3]), \ 
           (omega_vec, sym.Matrix([w1, w2, w3]).T))]) 
q_0_dot_fcn = lambdify((q1, q2, q3, w1, w2, w3), q_0_dot_symp, 'numpy') 

-ODER-Python Sympy Ersatz symbolische Matrix für (in a) Symbol

q_0_dot_str = '.5 * dot(q_vec, omega_vec)' 
q_0_dot_symp = sym.sympify(q_0_dot_str) 
q_0_dot_symp = q_0_dot_symp.subs([(q_vec, sym.Matrix([q1, q2, q3]), \ 
           (omega_vec, sym.Matrix([w1, w2, w3]).T))]) 
q_0_dot_symp = q_0_dot_symp.xreplace([{q_vec: sym.Matrix([q1, q2, q3])},\ 
            {omega_vec: sym.Matrix([w1, w2, w3]).T}]) 
q_0_dot_fcn = lambdify((q1, q2, q3, w1, w2, w3), q_0_dot_symp, 'numpy') 

Aber keiner dieser Arbeit. Wenn ich bewerten die folgenden:

q_0_dot_fcn(1,2,3,4,5,6) 

ich:

0.5*omega_vec*q_vec 

statt es in den Werten Haftung verbessernde I für die symbolischen Variablen innerhalb der symbolischen Matrizen zur Verfügung gestellt (und dann eine tatsächliche m = numerische Ergebnis zu erzielen).

+0

Diese Problem, wenn abgeschlossen, wird Ihnen nützlich sein https://github.com/sympy/sympy/issues/10163 – asmeurer

Antwort

0

Sie haben einen Tippfehler im Subs Call. Es sollte

q_0_dot_symp = q_0_dot_symp.subs([(q_vec, sym.Matrix([q1, q2, q3])), \ 
           (omega_vec, sym.Matrix([w1, w2, w3]).T)]) 

statt

q_0_dot_symp = q_0_dot_symp.subs([(q_vec, sym.Matrix([q1, q2, q3]), \ 
           (omega_vec, sym.Matrix([w1, w2, w3]).T))]) 

(beachten Sie die Platzierung der Klammern)

Nachdem dieses Update sein, es funktioniert für mich in SymPy 1,0

In [1]: import sympy as sym 

In [2]: q_vec, omega_vec, q1, q2, q3, w1, w2, w3 = \ 
    ...:   sym.symbols('q_vec, omega_vec, q1, q2, q3, w1, w2, w3') 

In [3]: q_0_dot_str = '.5 * dot(q_vec, omega_vec)' 

In [4]: q_0_dot_symp = sym.sympify(q_0_dot_str) 

In [5]: q_0_dot_symp = q_0_dot_symp.subs([(q_vec, sym.Matrix([q1, q2, q3])), \ 
           (omega_vec, sym.Matrix([w1, w2, w3]).T)]) 

In [6]: q_0_dot_fcn = lambdify((q1, q2, q3, w1, w2, w3), q_0_dot_symp, 'numpy') 

In [7]: q_0_dot_fcn(1,2,3,4,5,6) 
Out[7]: 
array([[ 2. , 2.5, 3. ], 
     [ 4. , 5. , 6. ], 
     [ 6. , 7.5, 9. ]]) 
Verwandte Themen