Python Sympy将符号矩阵替换为(转换为)符号

时间:2016-06-10 16:01:09

标签: python matrix sympy lambdify

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

但这些都不奏效。当我评估以下内容时:

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

我明白了:

0.5*omega_vec*q_vec

而不是在我为符号矩阵中的符号变量提供的值中进行补充(然后获得实际的m =数值结果)。

1 个答案:

答案 0 :(得分:0)

您在潜在电话中输入了一个拼写错误。它应该是

web_page

而不是

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

(注意括号的位置)

完成此修复后,它在SymPy 1.0中适用于我

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