Sympy 函数替换

Sympy Function substitution

我使用像

这样的东西
x = Function('x',real=True)(t)

它在我的所有计算中将 x(t) 作为函数变量。我现在可以区分时间,求解(不是 nonlinsolvesolveset,因为它们不能替代这些函数)等等。

但是,我想将我的结果导出到 MATLAB。所以我需要 (t) 消失。我可以用 d = {x(t):x} 填充 dict,但我认为有一种更优雅的方法可以对所有函数执行此操作,例如 y(t),z(t)、...

我想要的结果是输入

expr = x(t)-y(t)
output = x-y

其中 x 和 y 可以是 Sympy 已知的 "Function",但输出中不应有 (t)。而且我确实想避免在不依赖时间的情况下再次引入我所有的变量!

这是一个循环 walks through the expression tree 并用与该函数名称匹配的符号替换参数为 t 的任何函数。替换是在表达式的另一个副本中进行的,以避免修改我们正在遍历的表达式。

示例:如果 expr 为 x(t) - y(t),则 expr1 为 x - y

expr1 = expr
for f in preorder_traversal(expr):
  if f.args == (t,):
    expr1 = expr1.subs(f, Symbol(str(f.func)))
print(expr1)