我需要在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
替换omega
和theta
。例如,在替换之后,我希望dydt
为:
dydt_new = cos(theta)*omega
所以现在我可以用数字表示最后一个表达式,例如lambdify
。
答案 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
请注意,如果您更换替换顺序,这会失败。