我使用像
这样的东西x = Function('x',real=True)(t)
在我的所有计算中都将x(t)
作为函数变量。我现在可以区分时间,解决(不是nonlinsolve
或solveset
,因为它们不能包含这些功能)等等。
但是,我想将结果导出到MATLAB。所以我需要(t)
消失。我可以使用dict
填充d = {x(t):x}
,但我认为有一种更优雅的方法可以为所有功能执行此操作,例如y(t),z(t)
,...
我想要的结果是输入
expr = x(t)-y(t)
output = x-y
其中x和y可以是Sympy已知的“Function”,但输出中不应有(t)
。而且我确实希望在不依赖时间的情况下避免再次引入所有变量!
答案 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)