Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 在表达式树中查找和替换函数_Python_Sympy - Fatal编程技术网

Python 在表达式树中查找和替换函数

Python 在表达式树中查找和替换函数,python,sympy,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

我需要在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)
我想用符号
omega
theta
查找并替换
d/dt(theta(t))
theta_t
。例如,在替换后,我希望
dydt
为:

dydt_new = cos(theta)*omega

现在我可以用数字来处理最后一个表达式,例如,用
lambdify

你可以像其他任何东西一样替换导数。在实际函数之前,只需小心替换导数即可。以下是我的作品:

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
请注意,如果交换替换顺序,该操作将失败