【发布时间】:2017-07-24 19:19:29
【问题描述】:
有没有其他方法可以做到这一点:
expr = x**3 + 4*x*y - z
expr.subs([(x, 2), (y, 4), (z, 0)])
40
例如,通过 ('x', 2) 而不是一个 sympy 符号 x?
我正在尝试将与此类似的内容应用于 sympy 向量。
编辑:
所以我尝试在 subs 参数中使用 dict,它适用于这种类型的表达式,但当符号是动态符号时(来自力学模块)则不行。
我有一些向量
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}
但同样,没有任何东西可以替代。
【问题讨论】:
-
我真的不明白你为什么要这样做。现在您必须编写两个额外的代码字符。此外,两个变量可能具有相同的名称,但范围不同。例如一个有两个积分的表达式,每个都有自己的
x代表dx。 -
如果我要将这个表达式交给一些不同的范围,那么我也必须传递符号变量,对吧?在这种情况下,使用字符串制作 sub 不是更容易吗?
-
是的,但是两个同名的变量本质上不是相同的变量。