查找和替换表达式树

时间:2017-02-26 20:20:26

标签: python sympy

我需要在SymPy表达式树中找到所有用户自制的函数(以及用户函数上的派生类等内容),其位置然后只用标准的用户定义符号替换

from sympy import *
t=symbols('t')

现在创建用户制作的SymPy函数:

theta_t = Function(r'\theta')(t)

另外,我创建了我想要用{}替换theta_t的符号。

theta = Symbol(r'\theta')

我想要使用的表达式是:

y = sin(theta_t)

这是t

的衍生物
dydt = y.diff(t)

我想找到并用符号d/dt(theta(t))theta_t替换omegatheta。例如,在替换之后,我希望dydt为:

dydt_new = cos(theta)*omega

所以现在我可以用数字表示最后一个表达式,例如lambdify

1 个答案:

答案 0 :(得分:1)

您可以像其他任何东西一样替换衍生品。在实际函数之前,你只需要小心取代导数。以下适用于我:

from sympy import *

t = symbols('t')
theta_t = Function('theta')(t)
theta = Symbol('theta')
omega = Symbol('omega')
y = sin(theta_t)
dydt = y.diff(t)

dydt_new = dydt.subs([
    ( diff(theta_t,t), omega ),
    ( theta_t, theta ),
    ])

assert dydt_new==cos(theta)*omega

请注意,如果您更换替换顺序,这会失败。