Sympy功能替代

时间:2017-11-20 10:10:22

标签: python matlab sympy substitution

我使用像

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

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

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

我想要的结果是输入

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

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

1 个答案:

答案 0 :(得分:2)

这是一个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)