[英]Python Sympy substitute symbolic matrix for (into a) symbol
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')
-OR- -要么-
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')
But neither of these work. 但这些都不奏效。 When I evaluate the following:
当我评估以下内容时:
q_0_dot_fcn(1,2,3,4,5,6)
I get: 我明白了:
0.5*omega_vec*q_vec
Instead of it subbing in the values I provided for the symbolic variables within the symbolic matrices (and then getting an actual m=numerical result). 而不是在我为符号矩阵内的符号变量提供的值中进行补充(然后获得实际的m =数值结果)。
You have a typo in the subs call. 您在子调用中输入了一个拼写错误。 It should be
它应该是
q_0_dot_symp = q_0_dot_symp.subs([(q_vec, sym.Matrix([q1, q2, q3])), \
(omega_vec, sym.Matrix([w1, w2, w3]).T)])
instead of 代替
q_0_dot_symp = q_0_dot_symp.subs([(q_vec, sym.Matrix([q1, q2, q3]), \
(omega_vec, sym.Matrix([w1, w2, w3]).T))])
(note the placement of the parentheses) (注意括号的位置)
After making this fix, it works for me in SymPy 1.0 完成此修复后,它在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. ]])
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.