是否有另一种方法可以实现这一目标:
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}
但是,没有什么可以替代。
答案 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