使用字符串参数而不是符号替换向量中的sympy符号

时间:2017-07-24 19:19:29

标签: python sympy

是否有另一种方法可以实现这一目标:

expr = x**3 + 4*x*y - z
expr.subs([(x, 2), (y, 4), (z, 0)])
40

通过传递,比方说,('x',2)而不是同情符号x?

我正在尝试使用与此相似的内容来表达对象。

编辑:

所以我尝试在subs参数中使用dict,它适用于这种类型的表达式,但不适用于符号为dynamicsymbols(来自mechanics模块)。

我有一些载体

v = x*inertial_frame.x + y*inertial_frame.y

我尝试使用dict方法,但没有替代。

我也试图替换成

v.to_matrix(some_inertial_frame)
Matrix([
[x(t)],
[y(t)],
[   0]])

使用

{'x(t)': 1, {'y(t)': 2}

但是,没有什么可以替代。

1 个答案:

答案 0 :(得分:1)

有一个自定义https://www.howtogeek.com/howto/windows-vista/add-any-application-to-the-desktop-right-click-menu-in-vista/专门用于将值替换为sympy.physics.mechanics.dynamicsymbols构建的表达式。

mechanics.msubs function不同,mechanics.msubs不会尝试将字符串转换为dynamicsymbols。但您可以通过致电mechanics.dynamicsymbols

自行完成
In [126]: mechanics.dynamicsymbols('x')
Out[128]: x(t)

例如,

import sympy as sym
import sympy.physics.mechanics as mechanics

x, y, z = mechanics.dynamicsymbols('x,y,z')
expr = x**3 + 4*x*y - z
substitutions = [(mechanics.dynamicsymbols(name), val) 
                 for name, val in [('x', 2), ('y', 4), ('z', 0)]]
print(mechanics.msubs(expr, substitutions))
# 40